43 lines
878 B
Go
43 lines
878 B
Go
package bloomfilter
|
|
|
|
import (
|
|
"context"
|
|
"github.com/redis/go-redis/v9"
|
|
)
|
|
|
|
type Redis struct {
|
|
client *redis.Client
|
|
key string
|
|
ctx context.Context
|
|
}
|
|
|
|
func (r *Redis) Create(u uint64) {
|
|
r.ctx = context.Background()
|
|
}
|
|
|
|
func (r *Redis) Set(uint64s []uint64) error {
|
|
args := make([]interface{}, 0, len(uint64s)+1)
|
|
args = append(args, len(uint64s))
|
|
for _, u := range uint64s {
|
|
args = append(args, u)
|
|
}
|
|
|
|
return r.client.Eval(r.ctx, LuaBloomBatchSetBits, []string{r.key}, args...).Err()
|
|
}
|
|
|
|
func (r *Redis) Get(uint64s []uint64) (bool, error) {
|
|
args := make([]interface{}, 0, len(uint64s)+1)
|
|
args = append(args, len(uint64s))
|
|
for _, u := range uint64s {
|
|
args = append(args, u)
|
|
}
|
|
|
|
eval := r.client.Eval(r.ctx, LuaBloomBatchGetBits, []string{r.key}, args...)
|
|
|
|
if res, ok := eval.Val().(int64); ok && res == 1 {
|
|
return true, nil
|
|
}
|
|
|
|
return false, eval.Err()
|
|
}
|