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 相关文章推荐
为Java项目添加Redis缓存的方法
May 18 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
浅谈redis整数集为什么不能降级
Jul 25 Redis
缓存替换策略及应用(以Redis、InnoDB为例)
Jul 25 Redis
redis 存储对象的方法对比分析
Aug 02 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
linux下安装redis图文详细步骤
Dec 04 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
解决linux下redis数据库overcommit_memory问题
Feb 24 Redis
使用Redis实现点赞取消点赞的详细代码
Mar 20 Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
Apr 01 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 #Redis
Redis 配置文件重要属性的具体使用
May 20 #Redis
浅谈redis缓存在项目中的使用
May 20 #Redis
详解Redis主从复制实践
详解redis分布式锁的这些坑
为Java项目添加Redis缓存的方法
redis内存空间效率问题的深入探究
You might like
防止用户利用PHP代码DOS造成用光网络带宽
2011/03/01 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
CentOS安装php v8js教程
2015/02/26 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
textarea中的手动换行处理的jquery代码
2011/02/26 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
学习Node.js模块机制
2016/10/17 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
vue slot 在子组件中显示父组件传递的模板
2018/03/02 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
python集合是否可变总结
2019/06/20 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python查看数据类型的方法
2019/10/12 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
Python3.8.2安装包及安装教程图文详解(附安装包)
2020/11/28 Python
中专毕业个人的自荐信格式
2013/09/21 职场文书
小学运动会入场式解说词
2014/02/18 职场文书
毕业生找工作求职信
2014/08/05 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
2015年财务个人工作总结范文
2015/05/22 职场文书
婚宴致辞
2015/07/28 职场文书
运动会跳远广播稿
2015/08/19 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书
标准演讲稿格式结尾应该怎么书写?
2019/07/17 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang