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 19 Redis
嵌入式Redis服务器在Spring Boot测试中的使用教程
Jul 21 Redis
Redis Cluster 集群搭建你会吗
Aug 04 Redis
在项目中使用redis做缓存的一些思路
Sep 14 Redis
SpringBoot集成Redis的思路详解
Oct 16 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
windows安装 redis 6.2.6最新步骤详解
Apr 26 Redis
Redis高并发缓存架构性能优化
May 15 Redis
Redis 限流器
May 15 Redis
Redis全局ID生成器的实现
Jun 05 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
php中stream(流)的用法
2014/03/25 PHP
php读取3389的脚本
2014/05/06 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
巧妙破除网页右键禁用的十大绝招
2006/08/12 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
jQuery中的一些常见方法小结(推荐)
2016/06/13 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
2016/12/05 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
Bootstrap实现各种进度条样式详解
2017/04/13 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
Python实现模拟登录及表单提交的方法
2015/07/25 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
python实现kMeans算法
2017/12/21 Python
Python解决走迷宫问题算法示例
2018/07/27 Python
TensorFlow梯度求解tf.gradients实例
2020/02/04 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
巴西宠物商店:Cobasi
2019/04/19 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
党员个人对照检查材料范文
2014/09/24 职场文书
缓刑期间思想汇报范文
2014/10/10 职场文书
2015年暑假生活总结
2015/07/13 职场文书
小学毕业感言200字
2015/07/30 职场文书
2016秋季运动会前导词
2015/11/25 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS