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.
Note: You can also build and load the module yourself.
docker run -p 6379:6379 --name redis-redisbloom redislabs/rebloom:latest
docker exec -it redis-redisbloom bash
# redis-cli
# 127.0.0.1:6379>
Create a new cuckoo filter with capacity 64 and TTL 10 second (default 1800s):
# 127.0.0.1:6379> CF.RESERVE newFilter 2 TTL 10
Add a new item
# 127.0.0.1:6379> CF.ADD newFilter foo
(integer) 1
Find out whether an item exists in the filter:
# 127.0.0.1:6379> CF.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> CF.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.
To build RedisBloom, ensure you have the proper 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
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 |
Documentation and full command reference at redisbloom.io.
Got questions? Feel free to ask at the RedisBloom mailing list.
RedisBloom is licensed under the Redis Source Available License Agreement