python(Redis 中 Set/Zset 類型數據和其他操作)


1、redis 基本操作命令

  • Set 操作
    • Set 集合就是不允許重復的列表
    • 無序集合

    • 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 操作
    • 有序集合:在集合的基礎上,為每元素排序,元素的排序需要根據另外一個值來進行比較
    • 對於有序集合,每一個元素有兩個值,即:值和分數,分數專門用來做排序

    • 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM