获取Redis中列条目的总和

Bhu*_*ake 2 redis servicestack

我们如何获取NO-SQL数据库Redis中列条目的总和?

我的意思是类似于:

    Select sum(salary) from Account;
Run Code Online (Sandbox Code Playgroud)

Lin*_*iel 6

简短的回答是,你不能。这并不完全是 Redis 的目的。更长一点的答案是,您可以使用 redis lua 脚本和EVAL命令来完成此操作。

使用 redis 列表,例如:

LPUSH mylist 1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)

还有一个脚本sum.lua

local list = redis.call('lrange', KEYS[1], 0, -1)
local sum = 0
for i, val in ipairs(list) do
  sum = sum + val
end

return sum
Run Code Online (Sandbox Code Playgroud)

您可以从命令行调用它,如下所示:

$ redis-cli EVAL "$(cat sum.lua)" 1 mylist
(integer) 28
Run Code Online (Sandbox Code Playgroud)

编辑:第三个答案是@DidierSpezia 的评论,关于在排列数据时计算它。通常,在使用 Redis 时,您将根据您想要的查询方式来构建数据,而不是相反。也许你会做类似的事情:

# Paying out salary
redis> LPUSH employee:17:salaries 10000
redis> HINCRBY total_salaries 17 10000

# Fetching total salary to employee 17

redis> HGET total_salaries 17
"10000"
Run Code Online (Sandbox Code Playgroud)

  • 当然,获取此统计信息的最佳方法是在插入/删除数据时即时计算:这就是 INCRBY/HINCRBY 等命令的目的。 (2认同)