左手Mongodb右手Redis redis操作


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

 


免責聲明!

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



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