按redis中的值按字母顺序对一组整数ID进行排序

时间:2012-08-30 15:00:53

标签: redis

我使用redis作为Web应用程序的数据存储。基本设计建立在对象的散列和索引的zset之上,例如

user:<USER_ID> => hash(username: STRING, user_id: INTEGER, last_visit_date: FLOAT, create_date: FLOAT)
users:by_last_visit => zset( (last_visit_date, user_id) ...)
users:by_create_date => zset( (create_date, user_id) ... )

我的日期存储为自纪元以来的秒数。到目前为止,这已经非常有效 - 我可以使用强大的zset操作来快速获取相关范围,进行分页等,并且我的排序要求自然地映射到浮点空间。

但是,现在我需要按字母顺序排序。我知道zset会按字母顺序按值排序,以打破分数上的平局。到目前为止,我最好的解决方案是将我的字符串作为值得分为零,并依赖于此功能。我不喜欢这样,因为我最终得到了一些ID为值的集合以及一些将字符串作为值的集合 - 我需要应用程序逻辑来确定它在给定时间使用的集合类型并将字符串映射回ID。此外,我失去了随意联合/交叉我的设置的能力。

我的下一个最佳解决方案是将字符串映射到浮点分数,但这看起来非常混乱且容易出错,因为字符串可以任意长。

是否有更好的选择,而不是将字符串投入到具有相同分数的zset并保持反向映射回到ID?假设这是最好的解决方案,它是否可靠(即我依赖于副作用还是真正的特征)?

0 个答案:

没有答案