redis的zset可以很方便地用來實現(xiàn)排行榜功能,下面簡單介紹python如何使用redis實現(xiàn)排行榜功能
加入排行榜
獲取redis實例
1
2
|
import redis main_rds = redis.StrictRedis(host = 'localhost' ,port = 6379 ,db = 0 ,password = '') |
全量加入排行榜
注意根據(jù)redis包的版本不同,zadd和zincby的傳參方式也不同
對于redis 3.0(python的redis包)以下的版本
1
2
|
# 向key為name的zset里面添加一個member,其分?jǐn)?shù)為score,如果已經(jīng)存在就覆蓋 main_rds.zadd(name,score,member) |
示例
1
|
main_rds.zadd( "test" , 100 , "a" ) |
對于redis 3.0(python的redis包)及以上的版本
1
2
|
# 向key為name的zset里面添加一個member,其分?jǐn)?shù)為score,如果已經(jīng)存在就覆蓋 main_rds.zadd(name,{member:score}) |
示例
1
|
main_rds.zadd( "test" ,{ "b" : 90 , "c" : 80 }) # 可以一次加入多個 |
增量加入排行榜
對于redis 3.0(python的redis包)以下的版本
1
2
|
# # 向key為name的zset里面添加一個member,其分?jǐn)?shù)為score,如果已經(jīng)存在就增量添加 main_rds.zincrby(name,member,amount) |
示例
1
2
|
main_rds.zincrby( "test" , "love" , 10 ) # 10.0,一次只能加入一個 main_rds.zincrby( "test" , "love" , - 1 ) # 9.0 |
對于redis 3.0(python的redis包)及以上的版本
1
2
|
# 向key為name的zset里面添加一個member,其增量分?jǐn)?shù)為score,如果不存在就添加 main_rds.zincrby(name,amount,member) |
示例
1
2
|
main_rds.zincrby( "test" , 8 , "beauty" ) # 8.0 main_rds.zincrby( "test" , - 2 , "beauty" ) # 6.0 |
操作排行榜
獲取某個member的排名
1
2
3
4
|
# 獲取某個member的排名,按score從小到大排名,從0開始 main_rds.zrank(name,member) # 獲取某個member的排名,按score從大到小排名,從0開始 main_rds.zrevrank(name,meber) |
示例
1
2
3
|
main_rds.zadd( "test" ,{ "a" : 1 , "b" : 2 , "c" : 3 }) main_rds.zrank( "test" , "a" ) # 0 main_rds.zrevrank( "test" , "a" ) # 2 |
獲取某個meber的score
1
|
main_rds.zscore(key,member) |
示例
1
|
main_rds.zscore( "test" , "c" ) # 3.0 |
獲取排名在某個區(qū)間的元素
1
2
|
# 返回key為name的zset(按score從大到小排序)中的index從start到end(顧頭也顧尾)的所有元素 main.zrevrange(name, start, end, withscores = False ) |
示例
1
2
3
|
main_rds.zadd( "test" ,{ "d" : 5.1 , "e" : 6 , "f" : 7 }) # 3 # 顧頭也顧尾 main_rds.zrevrange( "test" , 0 , 3 ) # ['f', 'e', 'd', 'c'] |
獲取score在某個區(qū)間的元素
1
2
|
# 返回key為name的zset中score(從小到大)在給定區(qū)間(顧頭也顧尾)的元素 main_rds.zrangebyscore(name, min , max , start = None , num = None , withscores = False ) |
示例
1
2
|
# 顧頭也顧尾 main_rds.zrangebyscore( "test" , 2 , 6 ) # ['b', 'c', 'd', 'e'] |
獲取score在給定區(qū)間的元素數(shù)量
1
2
|
# 返回key為name的zset中score在給定區(qū)間的數(shù)量 main_rds.zcount(name, min , max ) |
示例
1
|
main_rds.zcount( "test" , 2 , 6 ) # 4L |
獲取整個zset的元素個數(shù)
1
|
main_rds.zcard(name) |
示例
1
|
main_rds.zcard( "test" ) # 6 |
刪除某個元素
1
2
|
# 刪除key為name里面的元素 main_rds.zrem(name, * values) |
示例
1
2
3
|
main_rds.zrevrange( "test" , 0 , 10 ) # ['love', 'f', 'beauty'] main_rds.zrem( "test" , "f" ) # 1 main_rds.zrem( "test" , "love" , "beauty" ) # 2 |
刪除排名在某個區(qū)間的元素
1
2
|
# 刪除key為name的zset中排名在給定區(qū)間的元素 main_rds.zremrangebyrank(name, min , max ) |
示例
1
2
3
4
5
|
main_rds.zremrangebyrank( "test" , 0 , 2 ) # 3 #### 刪除score在某個區(qū)間的元素 # 刪除key為name的zset中score在給定區(qū)間的元素 main_rds.zremrangebyscore(name, min , max ) |
示例
1
|
main_rds.zremrangebyscore( "test" , 5 , 6 ) # 2 |
到此這篇關(guān)于redis實現(xiàn)排行榜功能的文章就介紹到這了,更多相關(guān)redis 排行榜內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://www.cnblogs.com/zzliu/p/11787830.html