set key value 設置key的值
get key 取得key的值
decr key 值會減一
incr key 值會加一
decrby key value ,會讓key的值減少value.
incrby key value 會讓key的值增加value.
del key 刪除key的值
python操作redis的第三方庫是“redis”
使用命令 pip install redis
import redis client = redis.Redis()
后面都要的操作都要使用client對象進行。
for key in client.Keys(): print(key)
client.keys()返回的是一個列表,列表內的bytes型key.
1.創建字符串
client.set(key,value)
2.獲取字符串的值
client.get("hello")
前面的b代表是bytes類型
通過key,decode()解碼,字符串就可以正常顯示。
提示:
無論是Python的字符串還是數字,進入redis就會編程bytes型的數據,因此特別注意格式轉化。
在redis-cli中,set命令有一個nx參數,在python中也可以使用:
client.set("key","value",nx=True)
如果key存在了,則不會覆蓋原有的數據。
redis的數據都保存在內存中,查詢起來非常快。可以滿足對查詢速度要求很快但查詢邏輯簡單的查詢。
對於數據超百萬級的,需要使用redis的hash.存儲相同的數據,hash消耗的內存只有字符串的四分之一。
對於不知道有多少key的情況,不能冒然使用keys *,甚至導致redis失去響應。
列表的創建,查詢和修改
1.列表list是redis中的另一種數據結構。
列表就像一根平放的水管,既可以從左邊塞數據,也可以向右邊塞數據,可以從左邊取數據也可以從右邊取數據。
redis-cli種插入數據,使用push.
左邊插入,lpush value1....value2...
右邊插入,rpush value1...value2
用lpush插入數據的流程如圖所示
用rpush和lpush插入數據的寫法完全相同。
查看列表的長度,使用llen,命令格式是llen key
根據索引查看數據
使用lrange來根據索引查看數據
索引從最左邊開始,從0開始到長度-1.
索引查看數據的命令格式為:
lrange 0 開始索引 結束索引
lrange example_list 6 6
lrange key start stop
彈出數據,使用pop,分為lpop,rpop
lpop,左彈出 lpop key
rpop 右彈出 rpop key
彈出的數據會被從列表中刪除。
修改數據lset
lset key index 新的值
lset example_list 3 me
python如何插入數據
把多條數據使用一個列表保存,然后在這個列表“左側加※”后作為參數加入到lpush或者rpush
讀取數據
首先查看列表長度llen(key)
需要解碼,使用decode()
從左右彈出數據使用lpop,rpop,
被彈出來的數據也是bytes類型,所以仍需要解碼
列表的應用:
在工程中,redis列表一般用來作為一個隊列,存放一批可以使用相同邏輯處理的數據
在一個互聯網公司,需要在除夕給10萬個用戶發送祝福短信,假設一台服務器1秒鍾可以發送一個短信,現有10台服務器,需要2.7小時完成任務。
為了保證不漏掉客服,也不能重讀發送。
不停的從redis獲取手機號調用發送接口。
模擬程序:
import json import redis client = redis.Redis(host="localhost", port=6379) def send_sms(phone_number): print("發送對象手機", phone_number) print("啦啦啦啦啦") while True: phone_info_bytes = client.lpop("phone_queue") if not phone_info_bytes: print("短信發送完畢") break phone_info = json.loads(phone_info_bytes) retry_times = phone_info.get("retry_times", 0) phone_number = phone_info["phone_number"] result = send_sms(phone_number) if result: print(f"手機號:{phone_number} 短信發送成功!") continue if retry_times >= 3: print(f"重試超過三次,放棄手機號{phone_number}") continue next_phone_info = {"phone_number": phone_number, "retry_times": retry_times + 1} client.rpush("phone_queue", json.dumps(next_phone_info))
集合set的創建和修改
集合sets是redis的基本數據結構之一
集合里數據不能重復,也沒有順序,所以不存在左右側區分。
集合的首字母是s,添加是“add”,所以集合中添加數據是“sadd”.
sadd key value1 value2 value3
set集合中都是無序的。
查詢集合數據量的命令是scard,其中s是集合sets的首字母,card是cardinality 基數的縮寫
scard key
獲取數據命令spop
命令格式:
spop key count ,如果count省略,則表示隨機獲取1個數據,如果count大於1,則獲取多條數據
獲取集合中的所有數據
smembers key不會刪除數據,但是數據大慎用,或導致系統i/o資源耗盡,redis失去響應。
要刪除特定元素,可以使用命令“srem”
srem key value1....value2...value3
集合的交集
在數學中,有集合的交集,並集,差集,在redis中也存在這樣的概念。
交集:既屬於A又屬於B的
在redis中使用sinter求交集
sinter key1,key2,key3
集合的並集
A和B集合的所有去重數據。
sunion key1,key2,key3...
集合的差集
只屬於一個集合,不屬於另外一個集合的數據構成的集合。
sdiff key1,key2,key3