天天看點

python(Redis 中 Set/Zset 類型資料和其他操作)

1、redis 基本操作指令

  • Set 操作
    • Set 集合就是不允許重複的清單
    • 無序集合
python(Redis 中 Set/Zset 類型資料和其他操作)
    • sadd(name,values)  給 name 對應的集合中添加 1 個或多個元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("Animal","cat")     # 給 Animal 集合中添加 1 個元素
print(re.smembers("Animal"))
re.sadd("Animal","dog","pig")   # 給 Animal 集合中添加多個元素
print(re.smembers("Animal"))

# 結果如下
{'cat'}
{'pig', 'dog', 'cat'}      
    • smembers(name)  擷取 name 對應的集合的所有成員
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))    # 擷取 Animal 對應的值

# 結果如下
{'cat', 'dog', 'pig'}      
    • srandmember(name,numbers)  從 name 對應的集合中随機擷取 numbers 個元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.srandmember("Animal",2))

# 結果如下
['dog', 'pig']      
    • scard(name)  擷取 name 對應的集合中的元素個數
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))    # 擷取 Animal 對應的值
print(re.scard("Animal"))       # 擷取 Animal 對應的值的數量

# 結果如下
{'pig', 'cat', 'dog'}
3      
    • sdiff(keys,*args)  在第一個 name 對應的集合中且不在其他 name 對應的集合的元素集合
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd")
print(re.sdiff("set_name","set_name1","set_name2"))     # 輸出存在 set_name 中但是不存在 set_name1 和 set_name2 中的元素

# 結果如下
{'aa'}      
    • sinter(keys,*args)  擷取多個 name 對應集合的交集
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd")

print(re.sinter("set_name","set_name1","set_name2"))     # 輸出 set_name,set_name1 和 set_name2 的交集

# 結果如下
{'bb'}      
    • sunion(keys,*args)  擷取多個 name 對應的集合的并集
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.sadd("set_name","aa","bb")
re.sadd("set_name1","bb","cc")
re.sadd("set_name2","bb","cc","dd")
print(re.sunion("set_name","set_name1","set_name2"))    # 擷取 set_name,set_name1,set_name2 的并集

# 結果如下
{'bb', 'cc', 'aa', 'dd'}      
    • sismember(name,value)檢查 value 是否是 name 對應的集合内的元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.sismember("Animal","cat"))    # 判斷 cat 存在于集合 Animal 中

# 結果如下
True      
    • smove(src,dst,value)将元素 value 從 src 集合中移動到 dst 集合中
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.smove("set_name1","set_name","cc")   # 将 set_name1 中的 cc 移動到 set_name 中      
    • spop(name)  從集合的右側移除一個元素,并将其傳回
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
print(re.spop("Animal"))    # 移除某個值(無序删除)
print(re.smembers("Animal"))

# 結果如下
{'dog', 'cat', 'pig'}
cat
{'dog', 'pig'}      
    • srem(name, values)  指定删除 name 集合中的元素 values
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
re.srem("Animal","cat")     # 指定删除 Animal 集合中的 cat 元素
print(re.smembers("Animal"))

# 結果如下
{'dog', 'cat', 'pig'}
{'dog', 'pig'}      
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=1,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.smembers("Animal"))
re.srem("Animal","cat","pig")     # 指定删除 Animal 集合中的 cat 和 pig 元素
print(re.smembers("Animal"))

# 結果如下
{'pig', 'cat', 'dog'}
{'dog'}      
  • Zset 操作
    • 有序集合:在集合的基礎上,為每元素排序,元素的排序需要根據另外一個值來進行比較
    • 對于有序集合,每一個元素有兩個值,即:值和分數,分數專門用來做排序
python(Redis 中 Set/Zset 類型資料和其他操作)
    • zadd(name,mapping)  在 name 對應的有序集合中添加元素
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.zadd("Animal",{"cat":1,"dog":2,"pig":3})     # 往有序集合 Animal 中加入元素值和其對應的分數      
    • zrange( name,start,end,desc=False,withscores=False,score_cast_func=int)  按照索引範圍 [start,end] 擷取 name 對應的有序集合的元素
      • name:redis 的 name
      • start:有序集合索引起始位置
      • end:有序集合索引結束位置
      • desc:排序規則,預設按照分數從小到大排序
        • False:按分數從小到大排序
        • True:按分數從大到小排序
      • withscores:是否擷取元素的分數,預設隻擷取元素的值
        • False:隻擷取元素值
        • True:擷取元素值和分數
      • score_cast_func:對分數進行資料轉換的函數
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,2))    # 擷取 Animal 有序集合中索引範圍為 [0,2] 所對應的值

# 結果如下
['cat', 'dog', 'pig']      
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,2,desc=True,withscores=True))    # 擷取 Animal 有序集合中索引範圍為 [0,2] 所對應的值

# 結果如下
[('pig', 3.0), ('dog', 2.0), ('cat', 1.0)]      
    • zrevrange(name,start,end,withscores=False,score_cast_func=float)  按照索引範圍 [start,end] 擷取 name 對應的有序集合的元素
      • 用法同 zrange()
      • 預設按分數從大到小排序的
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrevrange("Animal",0,2,withscores=True))    # 擷取 Animal 有序集合中索引範圍為 [0,2] 所對應的值

# 結果如下
[('pig', 3.0), ('dog', 2.0), ('cat', 1.0)]      
    • zscore(name,value)  擷取name對應有序集合中 value 對應的分數
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
print(int(re.zscore("Animal","pig")))   # 擷取 Animal 對應有序集合中 pig 對應的分數

# 結果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
3      
    • zcard(name)  擷取有序集合内元素的數量
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zcard("Animal"))

# 結果如下
3      
    • zcount(name,min,max)  擷取有序集合中分數在 [min,max] 之間的個數
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zcount("Animal",2,3))  # 擷取有序集合 Animal 中分數在 [2,3] 之間的元素數量

# 結果如下
2      
    • zrank(name,value)  擷取 value 在 name 對應的有序集合中的排行位置,從 0 開始
      • 按照分數從小到大排序
    • zrevrank(name,value)  擷取 value 在 name 對應的有序集合中的排行位置,從 0 開始
      • 按照分數從大到小排序
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5))
print(re.zrank("Animal","cat"))     # 擷取 cat 在 Animal 對應的有序集合中的排行位置,從 0 開始(按照分數從小到大排序)
print(re.zrevrank("Animal","cat"))      # 擷取 cat 在 Animal 對應的有序集合中的排行位置,從 0 開始(按照分數從大到小排序)

# 結果如下
['cat', 'dog', 'pig']
0
2      
    • zrem(name,values)  删除 name 對應的有序集合中值是 values 的成員
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zrem("Animal","dog","cat")       # 删除 Animal 對應的有序集合中值是 dog 和 cat 的成員
print(re.zrange("Animal",0,5,withscores=True))

# 結果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[('pig', 3.0)]      
    • zremrangebyrank(name,min,max)  根據排行範圍删除
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zremrangebyrank("Animal",0,2)       # 删除 Animal 對應的有序集合中排行索引值 [0,2] 範圍的元素
print(re.zrange("Animal",0,5,withscores=True))

# 結果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[]      
    • zremrangebyscore(name,min,max)  根據分數範圍删除
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=2,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.zrange("Animal",0,5,withscores=True))
re.zremrangebyscore("Animal",0,2)       # 删除 Animal 對應的有序集合中分數等于 0 或者 2 的元素
# re.zremrangebyscore("Animal",2,2)       # 删除 Animal 對應的有序集合中分數等于 2 的元素
print(re.zrange("Animal",0,5,withscores=True))

# 結果如下
[('cat', 1.0), ('dog', 2.0), ('pig', 3.0)]
[('cat', 1.0)]
# [('cat', 1.0), ('pig', 3.0)]      
  • 其他操作
    • delete(*names)  根據 name 删除 redis 中的任意資料類型
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.delete("Student2","Fruits")      # 删除 db0 中 Student2 和 Fruits 資料      
    • exists(name)  檢測 redis 的 name 是否存在
      • 0 表示不存在
      • 1 表示存在
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.delete("Student2","Fruits")      # 删除 db0 中 Student2 和 Fruits 資料
print(re.exists("Student2"))    # 判斷在 db0 中 Student2 是否存在
print(re.exists("Student1"))

# 結果如下
0
1      
    • rename(src,dst)  将 src 重命名為 dst
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.rename("Student1","Student")     # 将 Student1 重命名為 Student
print(re.get("Student"))

# 結果如下
zhaoliu      
    • move(name,db)  将 redis 的某個值移動到指定的 db 下
      • db 為 int
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
re.move("Student",4)    # 将 Student 從 db0 移動到 db4 中      
    • type(name)  擷取 name 對應值的類型
import redis

pool = redis.ConnectionPool(host="192.168.0.221",port=6379,db=0,password="123456",decode_responses=True)
re = redis.Redis(connection_pool=pool)
print(re.type("Student"))
print(re.type("Teacher"))

# 結果如下
string
hash      

作者:多測師進階講師_鄭sir

微信:ZhengYing8887

出處:https://www.cnblogs.com/ZhengYing0813/

備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。

繼續閱讀