RedisBloom: Probabilistic Data Structures for Redis
The RedisBloom module provides four data structures: a scalable Bloom filter, a cuckoo filter, a count-min sketch, and a top-k. These data structures trade perfect accuracy for extreme memory efficiency, so they're especially useful for big data and streaming applications.
Bloom and cuckoo filters are used to determine, with a high degree of certainty, whether an element is a member of a set.
A count-min sketch is generally used to determine the frequency of events in a stream. You can query the count-min sketch get an estimate of the frequency of any given event.
A top-k maintains a list of k most frequently seen items.
Quick Start Guide
Note: You can also build and load the module yourself.
1. Launch with Docker
docker run -d --name redis-stack-server -p 6379:6379 redis/redis-stack-server:latest
redis-cli
2. Use RedisBloom with docker exec -it redis-redisbloom bash
# redis-cli
# 127.0.0.1:6379>
Create a new bloom filter by adding a new item:
# 127.0.0.1:6379> BF.ADD newFilter foo
(integer) 1
Find out whether an item exists in the filter:
# 127.0.0.1:6379> BF.EXISTS newFilter foo
(integer) 1
In this case, 1
means that the foo
is most likely in the set represented by newFilter
. But recall that false positives are possible with Bloom filters.
# 127.0.0.1:6379> BF.EXISTS newFilter bar
(integer) 0
A value 0
means that bar
is definitely not in the set. Bloom filters do not allow for false negatives.
Building and Loading RedisBloom
To build RedisBloom, ensure you have the proper git submodules, and afterwards run make
in the project's directory.
git submodule update --init --recursive
make
If the build is successful, you'll have a shared library called redisbloom.so
.
To load the library, pass its path to the loadmodule
directive when starting redis-server
:
$ redis-server --loadmodule /path/to/redisbloom.so
Client libraries
Project | Language | License | Author | URL | Comment |
---|---|---|---|---|---|
Jedis | Java | MIT | Redis | GitHub | |
redisbloom-py | Python | BSD | Redis | GitHub | |
JReBloom | Java | BSD | Redis | GitHub | Deprecated |
redisbloom-go | Go | BSD | Redis | GitHub | |
rueidis | Go | Apache License 2.0 | Rueian | GitHub | |
rebloom | JavaScript | MIT | Albert Team | GitHub | |
phpredis-bloom | PHP | MIT | Rafa Campoy | GitHub | |
phpRebloom | PHP | MIT | Alessandro Balasco | GitHub | |
StackExchange.Redis (extensions) | .NET | MIT | StackExchange | GitHub | |
redis-modules-sdk | TypeScript | BSD-3-Clause | Dani Tseitlin | GitHub | |
redis-modules-java | Java | Apache License 2.0 | dengliming | GitHub | |
NRedisBloom | .NET | MIT | yadazula | GitHub | |
vertx-redis-client | Java | Apache License 2.0 | Eclipse Vert.x | GitHub |
Documentation
Documentation and full command reference at redisbloom.io.
Mailing List / Forum
Got questions? Feel free to ask at the RedisBloom mailing list.
License
RedisBloom is licensed under the Redis Source Available License Agreement