是否可以像这样在 Redis 中按“列”对列表数量进行排序:
mylist 3 5 6
mylist2 1 6 8
mylist3 4 9 3
(sort by first column)
mylist2 1 6 8
mylist 3 5 6
mylist3 4 9 3
最佳答案
是的,但您必须为其准备数据。一种方法是使用 Sorted Set,您可以在其中将列表的键名保留为成员,将分数保留为其中的第一个成员(“列”)。请注意,每当您对相关列表进行更改时,您都必须更新此排序集。
在您的示例中,Sorted Set 应该创建为:
ZADD lists_index 3 mylist 1 mylist2 4 mylist3
要获取列表的排序列表,请执行 ZRANGEBYSCORE lists_index -inf +inf
。
更新:根据 OP 的评论,Lua 将是解决此问题的一种方式,如下所示:
local t = {}
for _, k in pairs(KEYS) do
local s = redis.call('LINDEX', k, ARGV[1])
t[#t+1] = { s, k }
end
table.sort(t, function (a, b)
return (a[1] < b[1])
end)
local r = {}
for i, v in pairs(t) do
r[#r+1] = v[2]
end
return r
然后这样运行:
$ redis-cli --eval sort_by_column.lua mylist mylist2 mylist3 , 0
1) "mylist2"
2) "mylist"
3) "mylist3"
但是请注意,无论何时调用此排序操作(与持续维护的排序集相反),使用此方法都将需要更多资源。
关于redis - 对 Redis 中的列表数量进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30636327/