redis的zset可以很方便地用來實現排行榜功能,下面介紹python如何使用redis實現排行榜功能
1、加入排行榜:向key為name的zset里面添加一個member,其分數為score,如果已經存在就覆蓋
zadd(name,mapping) #name是榜單名,mapping字典(value是積分,key是排序字段值,注意這里的key和value都是值,key可以是整數)
例如:要對玩家信息id是5,積分是521,要將這個玩家加入到榜單,傳入的mapping是{5:521},在redis中存儲的value(字段)值是5,score(字段)值是521
2、更新榜單:
zincrby(name,amount,value) #增量更新,name榜單名,amount是具體增減值,可以是負數,value的含義見1解釋;
zadd也可實現榜單更新
3、獲取排名:
zrank(name,value) #name是榜單名,value含義見1 按score從小到大排名,從0開始
zrevrank(name,value) #按score從大到小排名,從0開始
zscan(name, cursor=0, match=None, count=None,score_cast_func=float) #獲得name下榜單數據,返回值是元組,第二個元素是list(榜單數據)
4、獲取積分
zscore(name, value)#name是榜單名,value是元素詳見1
4、獲取某個區間(排名)榜單數據
zrange(name, start, end, desc=False,withscores=False,score_cast_func=float)
name
榜單名
start 有序集合索引起始位置
end 有序集合索引結束位置
desc 排序規則,默認按照分數從小到大排序 withscores 是否獲取元素的分數,默認只獲取元素的值
score_cast_func 對分數進行數據轉換的函數
返回值:tupe(元組:元素不能修改,第一個元素是bytes,需要轉碼encoding='utf-8',第二個元素是積分)數組
如果我們獲取第六名的榜單數據,start和end都是5即可,注意索引是從0開始的
zrevrange和zrange參數一致,但是返回的是bytes的list(榜單中的value)
5、獲取某范圍內積分的榜單
zrangebyscore參數同zrevrange,返回也和zrevrange一樣
6、數量相關
zcard(name) #獲取榜單數量 name榜單名
zcount(name, min, max
) #獲取min和max間榜單數量 min max是積分7、刪除元素
zrem(name, *values) #刪除某個元素
zremrangebyrank(name, min, max
) #批量刪除min到max區間內元素簡單示例