我正在使用Redis来跟踪每个房间,每栋楼的事件访问次数, 我需要在这样的层次结构中显示它们。您可以查看每个房间的所有活动,但也可以缩小并获得每个建筑物的活动总数。
每栋建筑都有唯一的名称,例如:公屋和大楼内的每个房间都有一个独特的号码,例如101,212。
有人请告知架构和最佳方法来存储访问事件并在Redis上聚合它们。
例如,我的等级是PRH:101:5,PRH:212:6,我希望能够有效地显示:101(5),212(6)和PRH(11)。
答案 0 :(得分:2)
我将我的答案分成两部分,因为一些新的Redis功能即将发布,但尚未发布。
Redis 2.8.8及更早版本
使用Hash Set
redis数据类型,HINCRBY
和HGET
递增计数器时,请执行以下操作:
HINCRBY building PRH 1
HINCRBY room:PRH 101 1
# The hash set nor the member doesn't have to exist beforehand.
# If you need atomicity, bundle these commands in a Lua script. Parameterized, avoid Lua SHA1 changes to minimize Lua server-side mem usage.
# Alternative for atomicity: use MULTI+EXEC
在几个增量之后,您可以在两个级别进行查询:
HGET building PRH
# this gives you after 10 increments: PRH=10
HGET room:PRH 101
# this gives you after 5 increments to this room: PRH:101=5
Redis 2.9.x(未来)
如果数字很大,并且它与估算相关,加标准误差为0.81%是可以接受的,那么您可以使用高效的HYPERLOGLOG
结构/算法。请参阅PFCOUNT
。
如果您想使用范围与词典排序/查询相结合,请查看ZRANGEBYLEX
希望这有帮助,TW