測開6 - Python(操做redis)

redis 是一個數據庫,數據存在內存,每秒鐘支持10w次的讀寫。redis

但不一樣於MySQL,redis 是非關係型數據庫。sql

關於關係型和非關係型數據庫,關係型即咱們常見的,數據庫包含表、字段,經過 sql 查詢;而非關係型數據庫,沒有 sql 語句,沒有表,常見的有:redis、mongodb、memcachemongodb

1⃣️ 初步認識和簡單應用數據庫

a. 簡單應用spa

  前面說了,redis 是非關係型數據庫,這類數據庫的有點是數據讀取很是快,它存儲的方式是 key=value 。如下爲簡單應用。code

 1 import redis
 2 red = ('111.2.1.2','password***')
 3 r = redis.Redis(host = red[0],password=red[1],db=3,decode_responses=True)    #db能夠是0-16的任意數值;decode_responses=True這句話加上以後,取出的數值是字符串,本來是bytes
 4 
 5 name = input('name:').strip()
 6 password = input('password:').strip()
 7 r.set('name',name)    #前一個‘name’就是value
 8 r.set('password',password)    #插入
 9 r.delete('name')    #刪除
10 
11 print(r.get(name).decode())    #.decode在此處沒必要加了

  以上也能夠用 r.set(name,password) 來存儲,這樣用戶名和密碼能夠對應起來。blog

b. 多層路徑(文件夾)ip

1 r.set('aaa_a:lucy':'123')
2 r.set('aaa_a:tom':'1234455')    #這種狀況下會有一個文件夾,多個冒號的話多個文件夾

 

2⃣️ 設置失效時間等方法內存

a. 設置失效時間:r.set() 中的第三個參數,輸入的數字表明秒數,必定秒數以後 key 就會消失字符串

b. 清除當前數據庫:r.flushdb()

c. 清除全部數據庫:r.flushall()

d. 模糊查詢:print(r.keys('j*')  #至關於sql語句的 like,會輸出全部 ‘j’ 開頭的 key

e. 檢查某個key是否存在:print(r.exists('jiaolf'))  #存在返回1,不存在返回0

 

3⃣️ 關鍵字的類型

 包含:string、hash、list等,主要寫下 hash 類型。總的來講,hash 類型至關於二維的字典。

 1 import redis
 2 r = redis.Redis(host='127.0.0.1',password='sdaf',db=1,decode_responses=True)
 3 r.hset('cnz_user','xiaohei','123456')
 4 r.hset('cnz_user','xiaobai','111111')
 5 r.hdel('cnz_user','xiaohuang')    #刪除小key
 6 print(r.hget('cnz_user','xiaobai'))
 7 print(r.hgetall('cnz_user'))    #獲取小字典
 8 d = {'xiaohei':'123','xixi':'12345'}
 9 r.hmset('cnz_user',d)    #批量set數據
10 print(r.type('jiaolf'))    #獲取類型

上面說設置失效時間時,第三個參數是失效時間,由於 hash 類型的有三個參數,因此,針對失效時間,還有一個通用的方法。  r.expire('cnz_user',60) 

這種方法對 string 類型的也一樣適用。

 

搞個練習💫

redis 遷移,從 a 遷移到 b。(思路:從 a 獲取全部的 key,而後經過 key 取到 value,set 到 b,須要經過判斷類型來有針對性的使用方法)

 1 import redis,hashlib
 2 red = ('118.24.3.40','*******')
 3 a = redis.Redis(host=red[0],password=red[1],db = 3,
 4                 decode_responses=True)   # 取出的數值是字符串,本來是bytes
 5 b = redis.Redis(host=red[0],password=red[1],db = 4,
 6                 decode_responses=True)
 7 
 8 for k in a.keys():
 9     if a.type(k) == 'string':
10         value = a.get(k)
11         b.set(k,value)
12     elif a.type(k) == 'hash':
13         d = a.hgetall(k)
14         b.hset(k,d)    
15     else:
16         print('其餘類型不支持‘)

錯的點:① 獲取類型的時候,須要用 a.type();② hash 類型的數據,用 .hgetall() 獲取到小字典

相關文章
相關標籤/搜索