我正在尝试对散列中的“字段”进行排序。 例如,
- mykey, cde, firstone
- mykey, abcde, secondone
- 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/