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