按一定值对redis记录进行排序

时间:2015-10-23 13:37:27

标签: redis

我有一个redis表,其值存储为

key: "aa - 1" value {"price": "10"}
key: "aa - 2" value {"price": "8"}
key: "aa - 4" value {"price": "15"}

我正在执行keys *aa*以获取密钥列表。有没有办法让price订购此列表? 感谢。

2 个答案:

答案 0 :(得分:0)

Redis不是很复杂。它肯定不是基于文档的,并且没有json类型。

从你的评论我明白你在字符串中保存了json。没有办法对此进行排序。

Here概述了redis类型:如果您需要排序,则应决定sorted sets,并将价格作为分数。

答案 1 :(得分:0)

首先,这实际上不是一张桌子。您应该将数据视为一组可以通过键识别的对象:将对象与key1放在一起,然后使用key快速恢复。但是你的对象只是字符串甚至是byte []。

要将数据存储在键值存储中,可以使用多种方法。您可以将整个对象放入键中,并始终返回整个对象。无法对任何事情进行排序。 您还可以在属性级别执行某种垂直拆分,并分别存储每个属性或子对象。类似的东西:

key: "aa - 1:price" value "10"
key: "aa - 1:name" value "CoolName"

明显的缺点 - 很难以一致的方式维护,需要很多请求来获取整个对象。虽然也可以使用GET "aa - 1:*"

但是在这里,你可以使用不同的redis数据结构存储不同的属性。

例如,您可以使用ZADD存储price。这样的事情:

ZADD pricesSet 10 "aa - 1"
ZADD pricesSet 4 "aa - 2"

然后你可以使用ZRANGEBYSCORE从这个键中获取数据

ZRANGEBYSCORE priceSet 5 15

意味着获得价格从5到15的所有商品的钥匙。您将获得" aa - 1"然后可以单独购买。

是的,ZRANGEBYSCORE的输出按价格排序。