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:對分數進行資料轉換的函數
- zrange( name,start,end,desc=False,withscores=False,score_cast_func=int) 按照索引範圍 [start,end] 擷取 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.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()
- 預設按分數從大到小排序的
- zrevrange(name,start,end,withscores=False,score_cast_func=float) 按照索引範圍 [start,end] 擷取 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.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 開始
- 按照分數從大到小排序
- zrank(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 表示存在
- exists(name) 檢測 redis 的 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)
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
- move(name,db) 将 redis 的某個值移動到指定的 db 下
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/
備注:本文版權歸作者所有,歡迎轉載和添加作者微信探讨技術,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。