goBloomFilter/redis.go
2025-05-09 18:07:21 +08:00

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()
}