redis批量更新字典

ia2d9nvy  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(469)

所以我插入了一堆key:dict in redis,如下所示:

{user1 : {command1:0, command2:0}}

等。每次用户使用命令时,它会将计数器增加1,并且每小时重置一次。
然而,我在读redis,这意味着批量更新重置,我将不得不做一个键搜索,然后分别更新每个。我知道我也可以使用管道来完成,这样我就可以批量更新它们中的每一个。
有没有更好的方法?通常大约有10万用户,它可以扩展到100万,这是否足够安全/有效,查询是否足够短以满足生产需要?
因为我觉得如果我在db上有这个信息-我可以做一些类似“updatetablesetcommand1=0 wherecommand1!=0”,但这意味着每次使用命令时(通常大约100/s),我都需要更新它。。。

5lhxktic

5lhxktic1#

你不需要事先插入命令。
只需使用hincrby命令
假设redis是空的,现在您可以发布

HINCRBY user1  command1 1

redis将创建一个名为user1的散列,其值为command1和1。
再来一次

HINCRBY user1  command1 1

然后

HGET user1  command1

结果得到2
要重置计数器,只需删除user1。如果您立即发出此命令(查询计数器)

HGET user1  command1

结果是0或null(取决于您的redis客户端)
有了一百万个客户和100个命令,它的存储容量将达到几百MB。
redis需要大约50k qps(单示例)~150k qps(集群)。所以你可以计算一下,看看是否足够,这取决于有多少客户一次发出命令。

相关问题