【问题标题】:Redis Batch Updating DictionariesRedis 批量更新字典
【发布时间】:2020-08-13 03:14:12
【问题描述】:

所以我在redis中插入了一堆key:dict,如下:

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

等等。每次用户使用命令时,计数器都会增加 1,并且每小时重置一次。

但是,我正在阅读 redis,这意味着要重置批量更新,我必须进行 KEY 搜索,然后单独更新每个更新。我知道我也可以使用管道来执行此操作,这样我就可以批量更新它们中的每一个。

有没有更好的方法呢?通常有大约 10 万用户,它可以扩展到假设一百万,这是否足够安全/有效,查询是否足够短以用于生产?

因为我觉得如果我在数据库上有这些信息 - 我可以执行类似“UPDATE table SET command1 = 0 WHERE command1 != 0”之类的操作,但这意味着每次使用命令时(通常大约 100/ s) 我需要更新它...

【问题讨论】:

    标签: python redis


    【解决方案1】:

    你不需要提前插入命令。

    只需使用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 万客户和 100 个命令,则存储空间将达到数百 MB。

    Redis 大约需要 50K QPS(单实例)~ 150K QPS(集群)。所以你可以算一算,看看是否足够,这取决于有多少客户同时发出命令。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-23
      • 2022-11-08
      • 1970-01-01
      • 2012-02-16
      相关资源
      最近更新 更多