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遍历所有key的两个命令(KEYS 和 SCAN)
Apr 12 Redis
Redis数据结构之链表与字典的使用
May 11 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
缓存替换策略及应用(以Redis、InnoDB为例)
Jul 25 Redis
springboot使用Redis作缓存使用入门教程
Jul 25 Redis
Redis 常见使用场景
Aug 30 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
Redis高并发防止秒杀超卖实战源码解决方案
Nov 01 Redis
Redis命令处理过程源码解析
Feb 12 Redis
分布式Redis Cluster集群搭建与Redis基本用法
Feb 24 Redis
redis数据结构之压缩列表
Mar 21 Redis
Redis sentinel哨兵集群的实现步骤
Jul 15 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 #Redis
Redis 配置文件重要属性的具体使用
May 20 #Redis
浅谈redis缓存在项目中的使用
May 20 #Redis
详解Redis主从复制实践
详解redis分布式锁的这些坑
为Java项目添加Redis缓存的方法
redis内存空间效率问题的深入探究
You might like
虫族 Zerg 热键控制
2020/03/14 星际争霸
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
php验证session无效的解决方法
2014/11/04 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
超全面的JavaScript开发规范(推荐)
2017/01/21 Javascript
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
vue+iview+less 实现换肤功能
2018/08/17 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
JS实现纸牌发牌动画
2021/01/19 Javascript
[42:36]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第二局
2016/02/26 DOTA
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
python比较2个xml内容的方法
2015/05/11 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
基于python实现微信模板消息
2015/12/21 Python
python算法表示概念扫盲教程
2017/04/13 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
新秀丽官方旗舰店:Samsonite拉杆箱、双肩包、皮具
2018/03/05 全球购物
九年级物理教学反思
2014/01/29 职场文书
电台实习生求职信
2014/02/25 职场文书
物流专业求职信
2014/06/30 职场文书
土建施工员岗位职责
2015/04/11 职场文书
谢师宴家长致辞
2015/07/27 职场文书
2016大学优秀学生干部事迹材料
2016/03/01 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
Ajax实现异步加载数据
2021/11/17 Javascript
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL