redis实现排行榜功能


Posted in Redis onMay 24, 2021

redis的zset可以很方便地用来实现排行榜功能,下面简单介绍python如何使用redis实现排行榜功能

加入排行榜

获取redis实例

import redis
main_rds = redis.StrictRedis(host='localhost',port=6379,db=0,password='')

全量加入排行榜

注意根据redis包的版本不同,zadd和zincby的传参方式也不同

对于redis 3.0(python的redis包)以下的版本

# 向key为name的zset里面添加一个member,其分数为score,如果已经存在就覆盖
main_rds.zadd(name,score,member)

示例

main_rds.zadd("test",100,"a")

对于redis 3.0(python的redis包)及以上的版本

# 向key为name的zset里面添加一个member,其分数为score,如果已经存在就覆盖
main_rds.zadd(name,{member:score})

示例

main_rds.zadd("test",{"b":90,"c":80}) # 可以一次加入多个

增量加入排行榜

对于redis 3.0(python的redis包)以下的版本

# # 向key为name的zset里面添加一个member,其分数为score,如果已经存在就增量添加
main_rds.zincrby(name,member,amount)

示例

main_rds.zincrby("test","love",10)  # 10.0,一次只能加入一个
main_rds.zincrby("test","love",-1)  # 9.0

对于redis 3.0(python的redis包)及以上的版本

# 向key为name的zset里面添加一个member,其增量分数为score,如果不存在就添加
main_rds.zincrby(name,amount,member)

示例

main_rds.zincrby("test",8,"beauty")  # 8.0
main_rds.zincrby("test",-2,"beauty")  # 6.0

操作排行榜

获取某个member的排名

# 获取某个member的排名,按score从小到大排名,从0开始
main_rds.zrank(name,member)
# 获取某个member的排名,按score从大到小排名,从0开始
main_rds.zrevrank(name,meber)

示例

main_rds.zadd("test",{"a":1,"b":2,"c":3})
main_rds.zrank("test","a") # 0
main_rds.zrevrank("test","a") # 2

获取某个meber的score

main_rds.zscore(key,member)

示例

main_rds.zscore("test","c")  # 3.0

获取排名在某个区间的元素

# 返回key为name的zset(按score从大到小排序)中的index从start到end(顾头也顾尾)的所有元素
main.zrevrange(name, start, end, withscores=False)

示例

main_rds.zadd("test",{"d":5.1,"e":6,"f":7})  # 3
# 顾头也顾尾
main_rds.zrevrange("test",0,3)  # ['f', 'e', 'd', 'c']

获取score在某个区间的元素

# 返回key为name的zset中score(从小到大)在给定区间(顾头也顾尾)的元素
main_rds.zrangebyscore(name, min, max, start=None, num=None, withscores=False)

示例

# 顾头也顾尾
main_rds.zrangebyscore("test",2,6)  # ['b', 'c', 'd', 'e']

获取score在给定区间的元素数量

# 返回key为name的zset中score在给定区间的数量
main_rds.zcount(name, min, max)

示例

main_rds.zcount("test",2,6)  # 4L

获取整个zset的元素个数

main_rds.zcard(name)

示例

main_rds.zcard("test") # 6

删除某个元素

# 删除key为name里面的元素
main_rds.zrem(name, *values)

示例

main_rds.zrevrange("test",0,10)   # ['love', 'f', 'beauty']
main_rds.zrem("test","f")    # 1
main_rds.zrem("test","love","beauty") # 2

删除排名在某个区间的元素

# 删除key为name的zset中排名在给定区间的元素
main_rds.zremrangebyrank(name, min, max)

示例

main_rds.zremrangebyrank("test",0,2) # 3

#### 删除score在某个区间的元素
# 删除key为name的zset中score在给定区间的元素
main_rds.zremrangebyscore(name, min, max)

示例

main_rds.zremrangebyscore("test", 5, 6)  # 2

到此这篇关于redis实现排行榜功能的文章就介绍到这了,更多相关redis 排行榜内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
redis连接被拒绝的解决方案
Apr 12 Redis
Redis数据结构之链表与字典的使用
May 11 Redis
Java Socket实现Redis客户端的详细说明
May 26 Redis
了解Redis常见应用场景
Jun 23 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
Redis入门教程详解
Aug 30 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
Redis分布式锁的7种实现
Apr 01 Redis
一文搞懂Redis中String数据类型
Apr 03 Redis
Grafana可视化监控系统结合SpringBoot使用
Apr 19 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 #Redis
Redis 配置文件重要属性的具体使用
May 20 #Redis
浅谈redis缓存在项目中的使用
May 20 #Redis
详解Redis主从复制实践
详解redis分布式锁的这些坑
为Java项目添加Redis缓存的方法
redis内存空间效率问题的深入探究
You might like
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
Zend Framework常用校验器详解
2016/12/09 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
理解javascript定时器中的单线程
2016/02/23 Javascript
JS中检测数据类型的几种方式及优缺点小结
2016/12/12 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
jQuery实现图片简单轮播功能示例
2018/08/13 jQuery
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
JavaScript之数组扁平化详解
2019/06/03 Javascript
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
2016/07/01 Python
Python冒泡排序注意要点实例详解
2016/09/09 Python
基于python实现在excel中读取与生成随机数写入excel中
2018/01/04 Python
Python爬取成语接龙类网站
2018/10/19 Python
Python中字符串List按照长度排序
2019/07/01 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
python生成大写32位uuid代码
2020/03/03 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
Etam艾格英国官网:法国著名女装品牌
2019/04/15 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
学院书画协会部门职责
2013/11/28 职场文书
《长征》教学反思
2014/04/27 职场文书
走群众路线学习笔记
2014/11/06 职场文书
端午节寄语2015
2015/03/23 职场文书
nginx容器方式反向代理实战
2022/04/18 Servers