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() 獲取到小字典