首页 > 数据库 >Redis 中两个字段排序

Redis 中两个字段排序

时间:2022-11-01 14:57:36浏览次数:78  
标签:03 13 01 两个 2016 31 Redis 排序

参考:Redis 中两个字段排序

   redis如何实现多字段排序

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

相关文章

  • Redis线上救命丸:01---误操作AOF、RDB恢复数据
    Redis的flushall/flushdb命令可以做数据清除,对于Redis的开发和运维人员有一定帮助,然而一旦误操作,它的破坏性也是很明显的。怎么才能快速恢复数据,让损失达到最小呢?本文我们将......
  • Redis:10---List对象
    ​一、列表对象概述   列表类型是用来存储多个有序的字符串,一个列表最多可以存储多个元素。列表是一种比较灵活的数据结构,它可以充当栈和队列的角色,在实际开发上有......
  • Redis:02---安装Redis(Linux+Windows+Docker)
    Linux安装:一、安装方式1(下载源码编译安装)第一步:从下面的网址中下载Redis最新稳定版本的源代码sudowgethttp://download.redis.io/redis-stable.tar.gz第二步:下载完之后解......
  • OpenResty+mysql+redis
    1、       ​​ad_load.lua​​  ​​nginx.conf​​1、读取mysql并缓存redis     ......
  • 剑指offer第二版-17_1任意两个整数的加法
    /***定义一个函数,在该函数中可以实现任意两个整数的加法*<p>*对于这道题,由于没有限定输入的两个数的范围,所以要按照大数问题来进行处理*由于题目要求是要实现任意两......
  • centos7下配置redis时出现的一些问题
    1、redis的客户端连接不上centos7的redis原因分析:打开cmd调用telnet192.168.44.1296379发现连接超时,原因可能为防火墙阻塞将6379端口永久开发 firewall-cmd--zone......
  • redis 两种自动备份模式
    RDB持久化配置:文件io小,效率高,出故障数据丢失多Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.con......
  • 剑指offer——数字在排序数组中出现的次数
    题目描述:统计给定数字k在排序数组中出现的次数思路1:最容易想到但是效率不高的一个方法就是遍历整个数组,统计k出现的次数(for循环就能解决,不赘述)思路2:由于题目给出是排序......
  • c#:两个list不同元素,值类型,对象类型
    基本值类型publicstaticList<T>GetListDiff<T>(List<T>listA,List<T>listB){List<T>ret=newList<T>();if(listA.Count>listB.Count)......
  • 1662. 检查两个字符串数组是否相等
    1662.检查两个字符串数组是否相等给你两个字符串数组word1和word2。如果两个数组表示的字符串相同,返回true;否则,返回false。输入:word1=["ab","c"],word2=......