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数据结构之链表与字典的使用
May 11 Redis
redis三种高可用方式部署的实现
May 11 Redis
基于Redis延迟队列的实现代码
May 13 Redis
详解Redis瘦身指南
May 26 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
使用RedisTemplat实现简单的分布式锁
Nov 20 Redis
使用Redis做预定库存缓存功能
Apr 02 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
Redis全局ID生成器的实现
Jun 05 Redis
Redis主从复制操作和配置详情
Sep 23 Redis
Redis实战之Lettuce的使用技巧详解
Dec 24 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 #Redis
Redis 配置文件重要属性的具体使用
May 20 #Redis
浅谈redis缓存在项目中的使用
May 20 #Redis
详解Redis主从复制实践
详解redis分布式锁的这些坑
为Java项目添加Redis缓存的方法
redis内存空间效率问题的深入探究
You might like
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
PHP 5.3新特性命名空间规则解析及高级功能
2010/03/11 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
PHP defined()函数的使用图文详解
2019/07/20 PHP
JavaScript 参考教程
2006/12/29 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
jquery 插件开发备注
2010/08/27 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
Jquery树插件zTree实现菜单树
2017/01/24 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
js弹出窗口简单实现代码
2017/03/22 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
JS async 函数的含义和用法实例总结
2020/04/08 Javascript
python多线程操作实例
2014/11/21 Python
详细解读Python中的__init__()方法
2015/05/02 Python
python执行CMD指令,并获取返回的方法
2018/12/19 Python
python接口调用已训练好的caffe模型测试分类方法
2019/08/26 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
CSS3实现超慢速移动动画效果非常流畅无卡顿
2014/06/15 HTML / CSS
测绘工程系学生的自我评价
2013/11/30 职场文书
英语教师求职信
2014/06/16 职场文书
祝寿主持词
2015/07/02 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
测量JavaScript函数的性能各种方式对比
2021/04/27 Javascript
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
浅谈什么是SpringBoot异常处理自动配置的原理
2021/06/21 Java/Android
mysql left join快速转inner join的过程
2021/06/30 MySQL
css3 选择器
2022/05/11 HTML / CSS
Docker安装MySql8并远程访问的实现
2022/07/07 Servers