是否可以迭代按值排序的所有存储的redis键?
stored values:
SET foo:a 1
SET foo:b 20
SET foo:c 5
desired output:
SCAN 0 MATCH foo_* <some-sort-magic>
foo:b
foo:c
foo:a
我无法在排序集中存储foo:a,foo:b,foo:c,因为值经常变化。
如果它也适用于哈希值会更好:
stored hashs:
HSET foo:a bar 1
HSET foo:b bar 20
HSET foo:c bar 5
desired output:
SCAN 0 MATCH foo_* <some-sort-magic-for-the-'bar'-field>
foo:b
foo:c
foo:a
除了在应用程序中获取所有值和排序之外的任何建议? THX。
答案 0 :(得分:2)
是否可以迭代按值排序的所有存储的redis键?
即使这是可能的,你真的不想这样做。对密钥空间进行全面扫描,存储响应需要RAM并且排序需要更多时间。你真的想让数据库占用吗?
编辑:如果您确实希望保持数据库占用,那么Redis没有开箱即用的功能。但是,如果没有应用程序执行过滤,至少还有两种方法可以做到这一点。
第一种方法是使用执行SCAN
的Lua脚本,获取值并在返回回复之前对它们进行排序。
第二种方法是使用Redis模块,特别是RediSearch来扩展Redis的功能。
我无法在排序集中存储foo:a,foo:b,foo:c,因为值经常变化。
没有太频繁改变的事情 - Redis的一切都是在RAM中完成的,因此写入速度和......其他任何东西一样快。
除了在应用程序中获取所有值和排序之外的任何建议吗?
使用排序集。