1.多个维度使用数据库查询排序输出,目前使用的方式。
Redis用一个Sorted Set解决按两个字段排序的问题,也就是按照热度+时间作为排序字段,关键在于怎么拼接score的问题。这种特点的场景,解决方法是组装一个浮点数,整数部分是热度的值,小数部分是时间。这里要注意的是,redis里面精度应该是小数6位,所以不能把整个日期作为小数部分。例如有这样一组数据: | 热度 | 时间 | | 2 | 2016-03-31 13:41:01 | | 5 | 2016-03-31 13:41:01 | | 2 | 2016-03-31 13:42:01 | | 1 | 2016-03-31 13:41:01 | 那么score的值可以组装成: | 热度 | 时间 | score | 2 | 2016-03-31 13:41:01 | 2.134101 | 5 | 2016-03-31 13:41:01 | 5.134101 | 2 | 2016-03-31 13:42:01 | 2.134201 | 1 | 2016-03-31 13:41:01 | 1.134101 这样的局限性是每个zset只能存一天的数据 回复
redis本身 机制 并不是热衷于 比较复杂的排序, 不过 可以 先做好排序工作,然后存放在 redis列表中,将列表裁剪为指定长度,比如 1000条,Redis只需要保存最新的1000条,每次需要获取最新帖子或者评论的项目范围时,再查库获取放到缓存中
按每种排序方式都排一次序,并将排序结果缓存起来,将排序这种复杂的操作交给DB,或者应用程序,而redis只负责缓存,不负责业务逻辑。毕竟redis只是一个简单的缓存,不能完成像DB那样负责的操作。
标签:03,13,01,两个,2016,31,Redis,排序 From: https://www.cnblogs.com/nextgg/p/16847601.html