sorting - Redis:在 alpha 中排序哈希 "fields"

标签 sorting hash redis

我正在尝试对散列中的“字段”进行排序。 例如,

  1. mykey, cde, firstone
  2. mykey, abcde, secondone
  3. mykey, bcde, thirdone

我想按字母顺序对字段(cde、abcde、bcde)进行排序,但是没有办法这样做。如果有人知道这件事,请帮助我。

如果没有办法解决这个问题,我正在考虑更改键和值的名称..并使用 zadd 而不是 hash。如果您有更好的解决方案,请在这里给我建议。

最佳答案

哈希字段名称不容易排序 - 没有本地命令可以这样做,并且返回字段的顺序(例如使用 HGETALL)对于所有意图和目的都是随机的。

虽然排序集在排序方面更可取,但您可以使用 Lua 脚本来解决这个问题,该脚本将执行哈希字段的词法排序。例如:

$ cat hashsort.lua
local r = redis.call('HGETALL',KEYS[1])
local t = {}
for i=1,#r,2 do
    t[#t+1] = { field = r[i], value = r[i+1] }
end
table.sort(t, function(a,b) return a.field < b.field end)
r = {}
for _, v in pairs(t) do
    r[#r+1] = v.field
    r[#r+1] = v.value
end
return r

$ redis-cli HMSET hash z 99 ee 55 e 5 a 1 b 2 ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ justsomethinglongsohashmaxzipwillbeexceeded
OK
$ redis-cli --eval hashsort.lua hash
 1) "a"
 2) "1"
 3) "b"
 4) "2"
 5) "e"
 6) "5"
 7) "ee"
 8) "55"
 9) "z"
10) "99"
11) "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"
12) "justsomethinglongsohashmaxzipwillbeexceeded"

关于sorting - Redis:在 alpha 中排序哈希 "fields",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37249996/

相关文章:

java - 在 Java 中从浮点值接收与 php 中相同的 sha256 时出现问题

java - java中的SHA2密码散列

php - 为什么冒泡排序从 C 移植到 PHP 不起作用?

javascript - 使用 javascript 按组成的字母表手动对段落进行排序

c# - 如何在ListView中对内容进行排序?

java - 虽然没有超过索引,但索引出现错误

python - 将字节读入十六进制摘要字符串的方法

redis - 如何用Django Rest Framework实现Redis Cache?

python - celery 异步获取超时永不超时

ruby - 需要双服务器配置建议