python中怎么用redis?下面本篇文章給大家介紹一下python使用redis的方法,希望對大家有所幫助!
前面我們都是使用 Redis 客戶端對 Redis 進行使用的,但是實際工作中,我們大多數情況下都是通過代碼來使用 Redis 的,由于小編對 Python 比較熟悉,所以我們今天就一起來學習下如何使用 Python 來操作 Redis。【相關推薦:Redis視頻教程】
環境準備
- Redis 首先需要安裝好。
- Python 安裝好(建議使用 Python3)。
- Redis 的 Python 庫安裝好(pip install redis)。
開始實踐
小試牛刀
例:我們計劃通過 Python 連接到 Redis。然后寫入一個 kv,最后將查詢到的 v 打印出來。
直接連接
#!/usr/bin/python3 import?redis???#?導入redis模塊 r?=?redis.Redis(host='localhost',?port=6379,?password="pwd@321",?decode_responses=True)???#?host是redis主機,password為認證密碼,redis默認端口是6379 r.set('name',?'phyger-from-python-redis')??#?key是"name"?value是"phyger-from-python-redis"?將鍵值對存入redis緩存 print(r['name'])??#?第一種:取出鍵name對應的值 print(r.get('name'))??#?第二種:取出鍵name對應的值 print(type(r.get('name')))
立即學習“Python免費學習筆記(深入)”;
其中的 get 為連接池最后一個執行的命令。
連接池
通常情況下,需要連接 redis 時,會創建一個連接,基于這個連接進行 redis 操作,操作完成后去釋放。正常情況下,這是沒有問題的,但是并發量較高的情況下,頻繁的連接創建和釋放對性能會有較高的影響,于是連接池發揮作用。
連接池的原理:預先創建多個連接,當進行 redis 操作時,直接獲取已經創建好的連接進行操作。完成后,不會釋放這個連接,而是讓其返回連接池,用于后續 redis 操作!這樣避免連續創建和釋放,從而提高了性能!
#!/usr/bin/python3 import?redis,time???#?導入redis模塊,通過python操作redis?也可以直接在redis主機的服務端操作緩存數據庫 pool?=?redis.ConnectionPool(host='localhost',?port=6379,?password="pwd@321",?decode_responses=True)???#?host是redis主機,需要redis服務端和客戶端都起著?redis默認端口是6379 r?=?redis.Redis(connection_pool=pool) r.set('name',?'phyger-from-python-redis') print(r['name']) print(r.get('name'))??#?取出鍵name對應的值 print(type(r.get('name')))
你會發現,在實際使用中直連和使用連接池的效果是一樣的,只是在高并發的時候會有明顯的區別。
基操實踐
對于眾多的 Redis 命令,我們在此以 SET 命令為例進行展示。
格式: set(name, value, ex=None, px=None, nx=False, xx=False)
在 redis-py 中 set 命令的參數:
參數名 | 釋義 |
---|---|
ex | |
px | |
nx | |
xx |
ex
我們計劃創建一個 kv 并且設置其 ex 為 3,期待 3 秒后此 k 的 v 會變為 None。
#!/usr/bin/python3 import?redis,time???#?導入redis模塊,通過python操作redis?也可以直接在redis主機的服務端操作緩存數據庫 pool?=?redis.ConnectionPool(host='localhost',?port=6379,?password="pwd@321",?decode_responses=True)???#?host是redis主機,需要redis服務端和客戶端都起著?redis默認端口是6379 r?=?redis.Redis(connection_pool=pool) r.set('name',?'phyger-from-python-redis',ex=3) print(r['name'])????#?應當有v time.sleep(3) print(r.get('name'))??#?應當無v print(type(r.get('name')))
nx
由于 px 的單位太短,我們就不做演示,效果和 ex 相同。
我們計劃去重復 set 前面已經 set 過的 name,不出意外的話,在 nx 為真時,我們將會 set 失敗。但是人如果 set 不存在的 name1,則會成功。
#!/usr/bin/python3 import?redis,time???#?導入redis模塊,通過python操作redis?也可以直接在redis主機的服務端操作緩存數據庫 pool?=?redis.ConnectionPool(host='localhost',?port=6379,?password="pwd@321",?decode_responses=True)???#?host是redis主機,需要redis服務端和客戶端都起著?redis默認端口是6379 r?=?redis.Redis(connection_pool=pool) r.set('name',?'phyger-0',nx=3)?#?set失敗 print(r['name'])????#?應當不生效 r.set('name1',?'phyger-1',nx=3)?#?set成功 print(r.get('name1'))??#?應當生效 print(type(r.get('name')))
如上,你會發現 name 的 set 未生效,因為 name 已經存在于數據庫中。而 name1 的 set 已經生效,因為 name1 是之前在數據庫中不存在的。
xx
我們計劃去重復 set 前面已經 set 過的 name,不出意外的話,在 nx 為真時,我們將會 set 成功。但是人如果 set 不存在的 name2,則會失敗。
#!/usr/bin/python3 import?redis,time???#?導入redis模塊,通過python操作redis?也可以直接在redis主機的服務端操作緩存數據庫 pool?=?redis.ConnectionPool(host='localhost',?port=6379,?password="pwd@321",?decode_responses=True)???#?host是redis主機,需要redis服務端和客戶端都起著?redis默認端口是6379 r?=?redis.Redis(connection_pool=pool) r.set('name',?'phyger-0',xx=3)?#?set失敗 print(r['name'])????#?應當變了 r.set('name2',?'phyger-1',xx=3)?#?set成功 print(r.get('name2'))??#?應當沒有set成功 print(type(r.get('name')))
以上,就是今天全部的內容,更多信息建議參考 redis 官方文檔。
更多編程相關知識,請訪問:Redis視頻教程!!