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 Cluster 字段模糊匹配及删除
May 27 Redis
浅谈Redis主从复制以及主从复制原理
May 29 Redis
Redis可视化客户端小结
Jun 10 Redis
聊一聊Redis与MySQL双写一致性如何保证
Jun 26 Redis
关于redisson缓存序列化几枚大坑说明
Aug 04 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
聊聊redis-dump工具安装问题
Jan 18 Redis
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
Mar 16 Redis
Redis安装使用RedisJSON模块的方法
Mar 23 Redis
Redis基本数据类型List常用操作命令
Jun 01 Redis
浅谈Redis变慢的原因及排查方法
Jun 21 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 #Redis
Redis 配置文件重要属性的具体使用
May 20 #Redis
浅谈redis缓存在项目中的使用
May 20 #Redis
详解Redis主从复制实践
详解redis分布式锁的这些坑
为Java项目添加Redis缓存的方法
redis内存空间效率问题的深入探究
You might like
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
关于更改Zend Studio/Eclipse代码风格主题的介绍
2013/06/23 PHP
php操作xml
2013/10/27 PHP
php判断数组元素中是否存在某个字符串的方法
2014/06/14 PHP
PHP连接数据库实现注册页面的增删改查操作
2016/03/27 PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
2016/04/01 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
JavaScript 变量作用域分析
2011/07/04 Javascript
jQuery + Flex 通过拖拽方式动态改变图片的代码
2011/08/03 Javascript
那些年,我还在学习jquery 学习笔记
2012/03/05 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
2017/05/10 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
跟老齐学Python之数据类型总结
2014/09/24 Python
python实现对一个完整url进行分割的方法
2015/04/29 Python
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python中将字典转换为列表的方法
2016/09/21 Python
django在接受post请求时显示403forbidden实例解析
2018/01/25 Python
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
Django中使用CORS实现跨域请求过程解析
2019/08/05 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
Keras设定GPU使用内存大小方式(Tensorflow backend)
2020/05/22 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
EJB的角色和三个对象
2015/12/31 面试题
《晚上的太阳》教学反思
2014/04/23 职场文书
推荐信模板
2014/05/09 职场文书
2014年个人思想工作总结
2014/11/27 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书