- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
假设我有一个单独的计数器用于数千个客户端(存储在 redis 中),所有客户端都使用相同的命名空间。即 client.counter.<client_id>
.我想将该 namespace 中的所有条目递减 1(不低于零)。是否可以在不遍历每个 redis key 的情况下执行此操作?有没有更好的方法来处理这种数据模型?
最佳答案
有几种方法。
HASH solution
您可以使用 HASH以命名空间作为键,client_id作为字段,计数器作为值来存储数据。
// insert
hset client.counter client_1 1
hset client.counter client_2 2
...
hset client.counter client_N N
// get all client ids
hkeys client.counter
// decr the counter for each client
hincrby client.counter client_1 -1
如果客户端太多,hkeys
可能会阻塞对 Redis 的其他操作。在这种情况下,您可以使用 hscan
增量迭代 HASH 中的所有客户端。
LIST solution
你可以有一个LIST拯救所有客户。当您想要为“命名空间”中的所有客户端递减计数器时,您只需迭代 LIST 以获取客户端 ID,然后逐一递减相应的计数器。
// insert client and id
set client.counter.client_1 1
// update the id list
lpush client.ids client_1
// get all client ids
lrange client.ids 0 -1
// decr the counter
decr client.ids.client_1
如果客户端太多,您不需要一次获取所有 ID。此外,您可以使用 SET存储客户端 ID。
关于Redis DECR 整组键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043006/
假设我有一个单独的计数器用于数千个客户端(存储在 redis 中),所有客户端都使用相同的命名空间。即 client.counter. .我想将该 namespace 中的所有条目递减 1(不低于零)
Memcached incr 命令用于对已存在的 key(键) 的数字值进行自增操作 语法 incr key increment_value key : 键值 key-value 结构
Memcached decr 命令用于对已存在的 key(键) 的数字值进行自减操作 语法 decr key decrement_value key : 键值 key-value 结构
如何将 Redis 中的键增量重置为零?在文档中没有找到命令 最佳答案 您可以删除它或简单地将它SET 归零。 关于redis - 如何在 DECR 后重置 Redis 中的键增量?,我们在Stack
我是一名优秀的程序员,十分优秀!