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')))
#其中的
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 | <int> 過期時間(m) |
px | <int> 過期時間(ms) |
我们计划创建一个 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')))
由于 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
是之前在数据库中不存在的。
我们计划去重复 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
官方文档。
更多编程相关知识,请访问:编程视频!!
以上是淺析Python中怎麼用Redis的詳細內容。更多資訊請關注PHP中文網其他相關文章!