redis - 对 Redis 中的列表数量进行排序?

标签 redis

是否可以像这样在 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/

相关文章:

c# - servicestack.redis 不保存字典属性

lua - 检查redis中特定值的键

redis - 使用一个 Redis Lua 脚本使用多个数据库?

architecture - Redis 配置

lua - 如何将 Lua 字符串转换为 float

ruby-on-rails - rails : How can I run redis automatically with `rails s`

c# - 在 Redis 中批量创建键 - ServiceStack C#

redis - 是否可以开始 resque-web 监听 redis 套接字?

node.js - 无法运行 redis-node-client 测试代码

matplotlib - 如何根据从 Twitter API 收集的数据生成网络矩阵?