草庐IT

Redis DECR 整组键

coder 2023-11-07 原文

假设我有一个单独的计数器用于数千个客户端(存储在 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 DECR 整组键的更多相关文章

  1. hadoop - PIG 中整组记录的最大值/最小值 - 2

    我有一组要从文件加载的记录,我需要做的第一件事是获取列的最大值和最小值。在SQL中,我会使用这样的子查询来执行此操作:selectc.state,c.population,(selectmax(c.population)fromstate_infoc)asmax_pop,(selectmin(c.population)fromstate_infoc)asmin_popfromstate_infoc我想在PIG中也一定有一种简单的方法可以做到这一点,但我找不到它。它具有MAX和MIN功能,但是当我尝试执行以下操作时它不起作用:records=LOAD'/Users/Winter/Scho

  2. Redis DECR 整组键 - 2

    假设我有一个单独的计数器用于数千个客户端(存储在redis中),所有客户端都使用相同的命名空间。即client.counter..我想将该namespace中的所有条目递减1(不低于零)。是否可以在不遍历每个rediskey的情况下执行此操作?有没有更好的方法来处理这种数据模型? 最佳答案 有几种方法。HASHsolution您可以使用HASH以命名空间作为键,client_id作为字段,计数器作为值来存储数据。//inserthsetclient.counterclient_11hsetclient.counterclient_2

随机推荐