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实现排行榜功能的更多相关文章

  1. Redis实现排行榜功能(实战)

    需求前段时间,做了一个世界杯竞猜积分排行榜.对世界杯64场球赛胜负平进行猜测,猜对+1分,错误+0分,一人一场只能猜一次.1.展示前一百名列表.2.展示个人排名(如:张三,您当前的排名106579). ...

  2. 使用 Redis 实现排行榜功能

    排行榜功能是一个很普遍的需求.使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择. 一般排行榜都是有实效性的,比如“用户积分榜”.如果没有实效性一直按照总榜来排,可能榜首总是几个老用户,对 ...

  3. 使用 Redis 实现排行榜功能 (转载 https://segmentfault.com/a/1190000002694239)

    排行榜功能是一个很普遍的需求.使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择. 一般排行榜都是有实效性的,比如"用户积分榜".如果没有实效性一直按照总榜来排,可能榜 ...

  4. Redis实现世界杯排行榜功能(实战)

    转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9754346.html 需求 前段时间,做了一个世界杯竞猜积分排行榜.对世界杯64场球赛胜负平进行猜测,猜对+ ...

  5. Redis 有序聚合实现排行榜功能

    排行榜功能是一个很普遍的需求.使用 Redis 中有序集合的特性来实现排行榜是又好又快的选择.Redis有序集合非常适用于有序不重复数据的存储 一般排行榜都是有实效性的,比如“用户积分榜”.如果没有实 ...

  6. Redis的Sorted-Sets排行榜功能实现

    Redis的ZSet排行榜功能实现 1. 功能需求 类似给用户n张图片, 用户左滑不喜欢右滑喜欢.所以每个用户就会有一些喜欢的图片集合和不喜欢的图片集合.现在我们要做一个将按照一个算法将喜欢的排到前面 ...

  7. 用户积分排行榜功能-Redis实现

    一.排行榜功能简介 排行榜功能是一个很普遍的需求.使用 Redis 中有序集合(SortedSet)的特性来实现排行榜是又好又快的选择. 一般排行榜都是有实效性的,比如交通数据流中的路口/路段的车流量 ...

  8. 【接口设计】用户积分排行榜功能-Redis实现

    一.排行榜功能简介 排行榜功能是一个很普遍的需求.使用 Redis 中有序集合(SortedSet)的特性来实现排行榜是又好又快的选择. 一般排行榜都是有实效性的,比如交通数据流中的路口/路段的车流量 ...

  9. Redis多机功能介绍

    Redis多机功能目的:以单台Redis服务器过渡到多台Redis服务器 Redis单机在生产环境中存在的问题 1.内存容量不足 Redis使用内存来存书数据库中的数据,但是对于一台机器来说,硬件的内 ...

随机推荐

  1. VUE 1.0

    现代开发模式:vue/react. 20%的时间花在了表现层 传统开发模式:jquery. 80%的时间花在了表现层 MVC——数据.表现.行为分离 视图层(表现层)<----->数据层 ...

  2. centos 6.x下jira显示饼图乱码解决方法

    由于最近业务反馈jira出饼图时出现乱码现象,无法显示中文. 1. 由于平时用的yum源没有相关安装包,这里推荐暂时修改yum源如下: [epel] name=Extra Packages - $ba ...

  3. SQL 查看某个表被哪些存储过程或者视图使用

    --查询某个表被哪些视图/存储过程使用(type='P':表示存储过程,type='V':表示视图) SELECT OBJECT_NAME(id) FROM syscomments WHERE id ...

  4. 基于Docker安装 GitLab

    ⒈下载镜像 本文使用GitLab 中文社区版 Docker 镜像 Docker Hub地址:https://hub.docker.com/r/beginor/gitlab-ce 如果要体验最新版的Gi ...

  5. 编译错误ERROR C2027

    一个工程编译时出错! 费了很多时间,增加头文件都不可取,然后把source File文件下分的.cpp文件删除,然后编译通过.

  6. Jmeter之参数化(4种设置方法)

    以多用户登录为例~~~ 参数化: 1.用户参数 2.CSV数据文件 3.函数助手CSVRead 4.用户自定义的变量 1.用户参数 脚本目录结构如下: 因为设置了2组账号密码,所以线程数设置为2(添加 ...

  7. Struts2 流程原理

    一.流程图 (转) 二.流程详解 1.服务器传递来的请求,通过ActionContextClearUp.other filters.最后到达StrutsPrepareAndExecuteFilter ...

  8. jvm GC:垃圾回收的测试与分析

    实验环境: (1)Java版本以及模式: java version "1.8.0_171" Java(TM) SE Runtime Environment (build 1.8.0 ...

  9. asp.net 7.分页

    分页 SQL: select * from( select *,row_number()over(order by id) as num from T_userInfo) as t 数据层(UserI ...

  10. python 的面试题总汇

    函数作用域; LEGB : L>E>G>B L : local函数内部作用域 E : enclosing函数内部与内嵌函数之间 G : global全局作用域 B : build-i ...