我们如何获得 NO-SQL 数据库 Redis 中列条目的总和?
我的意思类似于:
Select sum(salary) from Account;
简短的回答是,你不能。这并不是 redis 的本意。稍长一点的答案是,您可以使用 redis lua 脚本和EVAL命令来完成此操作。
使用 redis 列表,例如:
LPUSH mylist 1 2 3 4 5 6 7
还有一个脚本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
您可以从命令行调用它,如下所示:
$ redis-cli EVAL "$(cat sum.lua)" 1 mylist
(integer) 28
编辑:第三个答案是@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"