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