Comment on Realtime Metrics for 128 Million Users with Redis: 50ms + 16MB RAMparentComments−antirez14yThere is an easy fix for this, that is also the recommended way to use bitmaps in Redis: split your bitmap among multiple keys.For instance you want to set bit i, but you want k bits per every key, the you do: keyname = "bitmap:"+(i/k) keybit = i%k k can be fairly large, like 128k bytes per key. It's still small but big enough for keys overhead to be negligible.−firefoxman114yWow, that's almost exactly how I implemented it: var bucketSize = 8190; ... var bucketNumber = Math.floor(userId / bucketSize), bitInBucket = userId % bucketSize; ...correction on my last comment, looks like I use ~8 thousand bits per bucket, not 8 million.
Comments
There is an easy fix for this, that is also the recommended way to use bitmaps in Redis: split your bitmap among multiple keys.
For instance you want to set bit i, but you want k bits per every key, the you do:
k can be fairly large, like 128k bytes per key. It's still small but big enough for keys overhead to be negligible.Wow, that's almost exactly how I implemented it:
...correction on my last comment, looks like I use ~8 thousand bits per bucket, not 8 million.