1,安裝
#pip install redis
使用:
import redis##r = redis.Redis(host='localhost', port=6379, db=0)
r['test'] = 'test' #或可以r.
set#( 'test', 'test') 設定keyr.get('test') #取得test的值
##r.delete
('test') #刪除這個keyr.flush
db() #清空資料庫r.keys() #列出所有key
r.exists('test') #偵測這個key是否存在
##r.dbsize( ) #資料庫中多少個條數
>>> import redis >>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0) >>> r = redis.StrictRedis(connection_pool = pool) >>> r.set('foo', 'bar') True >>> r.get('foo') 'bar'
3.API參考
Redis 官方文件詳細解釋了每個指令(http://www. php.cn/)。 redis-py 提供了兩個實作這些命令的用戶端類別。 StrictRedis 類別試圖遵守官方的命令語法,但也有幾點例外:·SELECT:沒有實現。請參閱下面“線程
安全性”部分的解釋。
·DEL:’del’ 是 Python 語法的保留關鍵字。因此redis-py 使用 「delete」 代替。 ·CONFIG GET|SET:分別以 config_get 和 config_set 實作。
·MULTI/EXEC:作為 Pipeline 類別的一部分來實現。若在呼叫pipeline 方法時指定use_trans
action=True,在執行 pipeline 時會以 MULTI 及 EXEC 封裝 pipeline 的操作。參見下面 Pipeline 部分。
·SUBSCRIBE/LISTEN: 和 pipeline 類似,由於需要下層的連線維持
狀態, PubSub 也實現成單獨的類別。呼叫 Redis 客戶端的 pubsub 方法傳回一個 PubSub 的實例,並透過這個實例可以訂閱頻道或偵聽訊息。兩個類別(StrictRedis 和 PubSub 類別)都可以發布(PUBLISH)訊息。 除了上面的改變,StrictRedis 的子類別 Redis,提供了舊版 redis-py 的相容:·LREM:參數 'num' 和 'value' 的順序交換了一下,這樣'num' 可以提供缺省值 0.
·ZADD:實現時 score 和 value 的順序不小心弄反了,後來有人用了,就這樣了
·SETEX :
time和 value 的順序反了
註:最好不要用 Redis,這個類別只是做相容用的4.詳細說明
#4.1 連線池
在後台,redis-py 採用了連線池(ConnectionPool)來管理對 Redis 伺服器的連線。缺省情況下,每個Redis 實例都會建立自己的連線池。也可以採用向 Redis 類別的 connection_pool 參數傳遞已建立的連接池的方式。透過這種方式,可以實現客戶端分片或精確控制連線的管理:
>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)
>>> r = redis.StrictRedis(connection_pool=pool)
4.2 连接
ConnectionPool 管理一组 Connection 实例。redis-py 提供两种类型的 Connection。缺省情况下,Connection 是一个普通的 TCP 连接。 UnixDomainSocketConnection 允许和服务器运行在同一个设备上的客户端通过 unix 套接字进行连接。要使用 UnixDomainSocketConnection 连接, 只需要通过unix_socket_path 参数传递一个 unix 套接字文件的字符串。另外,确保redis.conf 文件配置了unixsocket 参数(缺省情况下是注释掉的):
>>> r = redis.StrictRedis(unix_socket_path='/tmp/redis.sock')
也可以自己创建 Connection 子类。这个特性可以在使用异步框架时用于控制 socket 的行为。要使用自己的Connection 初始化客户端类,需要创建一个连接池,通 connection_class 参数把自己的类传递进去。传递的其它关键字参数会在初始化时传递给自定义的类:
>>> pool = redis.ConnectionPool(connection_class=YourConnectionClass, your_arg='...', ...)
4.3 分析器
分析类提供了控制如何对 Redis 服务器的响应进行分析的途径。redis-py 提供了两个分析类, PythonParser和 HiredisParser。缺省情况下,如果安装了 hiredis 模块, redis-py 会尝试使用 HiredisParser,否则使用 PythonParser。
Hiredis 是由 Redis 核心团队维护的 C 库。 Pieter Noordhuis 创建了 Python 的实现。分析 Redis 服务器的响应时,Hiredis 可以提供 10 倍的速度提升。性能提升在获取大量数据时优为明显,比如 LRANGE 和SMEMBERS 操作。
和 redis-py 一样,Hiredis 在 Pypi 中就有,可以通过 pip 或 easy_install 安装:
$ pip install hiredis
或:
$ easy_install hiredis
4.4 响应回调函数
客户端类使用一系列回调函数来把 Redis 响应转换成合适的 Python 类型。有些回调函数在 Redis 客户端类的字典 RESPONSE_CALLBACKS 中定义。
通过 set_response_callback 方法可以把自定义的回调函数添加到单个实例。这个方法接受两个参数:一个命令名和一个回调函数。通过这种方法添加的回调函数只对添加到的对象有效。要想全局定义或重载一个回调函数,应该创建 Redis 客户端的子类并把回调函数添加到类的 RESPONSE_CALLBACKS(原文误为REDIS_CALLBACKS) 中。
响应回调函数至少有一个参数:Redis 服务器的响应。要进一步控制如何解释响应,也可以使用关键字参数。这些关键字参数在对 execute_command 的命令调用时指定。通过 “withscores” 参数,ZRANGE 演示了回调函数如何使用关键字参数。
4.5 线程安全
Redis 客户端实例可以安全地在线程间共享。从内部实现来说,只有在命令执行时才获取连接实例,完成后直接返回连接池,命令永不修改客户端实例的状态。
但是,有一点需要注意:SELECT 命令。SELECT 命令允许切换当前连接使用的数据库。新的数据库保持被选中状态,直到选中另一个数据库或连接关闭。这会导致在返回连接池时,连接可能指定了别的数据库。
因此,redis-py 没有在客户端实例中实现 SELECT 命令。如果要在同一个应用中使用多个 Redis 数据库,应该给第一个数据库创建独立的客户端实例(可能也需要独立的连接池)。
在线程间传递 PubSub 和 Pipeline 对象是不安全的。
4.6 Pipeline
Pipeline 是 StrictRedis 类的子类,支持在一个请求里发送缓冲的多个命令。通过减少客户端和服务器之间往来的数据包,可以大大提高命令组的性能。
Pipeline 的使用非常简单:
>>> r = redis.Redis(...)
>>> r.set('bing', 'baz')
>>> # Use the pipeline() method to create a pipeline instance
>>> pipe = r.pipeline()
>>> # The following SET commands are buffered
>>> pipe.set('foo', 'bar')
>>> pipe.get('bing')
>>> # the EXECUTE call sends all bufferred commands to the server, returning
>>> # a list of responses, one for each command.
>>> pipe.execute()
[True, 'baz']
>>> pipe.set('foo', 'bar').sadd('faz', 'baz').incr('auto_number').execute()
[True, True, 6]
另外,pipeline 也可以保证缓冲的命令组做为一个原子操作。缺省就是这种模式。要使用命令缓冲,但禁止pipeline 的原子操作属性,可以关掉 transaction:
>>> pipe = r.pipeline(transaction=False)
一个常见的问题是:在进行原子事务操作前需要从 Redis 中获取事务中要用的数据。比如,假设 INCR 命令不存在,但我们需要用 Python 创建一个原子版本的 INCR。
一个不成熟的实现是获取值(GET),在 Python 中增一, 设置(SET)新值。但是,这不是原子操作,因为多个客户端可能在同一时间做这件事,每一个都通过 GET 获取同一个值。
WATCH 命令提供了在开始事务前监视一个或多个键的能力。如果这些键中的任何一个在执行事务前发生改变,整个事务就会被取消并抛出 WatchError 异常。要实现我们的客户 INCR 命令,可以按下面的方法操作:
>>> with r.pipeline() as pipe:
... while 1:
... try:
... # 对序列号的键进行 WATCH
... pipe.watch('OUR-SEQUENCE-KEY')
... # WATCH 执行后,pipeline 被设置成立即执行模式直到我们通知它
... # 重新开始缓冲命令。
... # 这就允许我们获取序列号的值
... current_value = pipe.get('OUR-SEQUENCE-KEY')
... next_value = unicode(int(current_value) + 1)
... # 现在我们可以用 MULTI 命令把 pipeline 设置成缓冲模式
... pipe.multi()
... pipe.set('OUR-SEQUENCE-KEY', next_value)
... # 最后,执行 pipeline (set 命令)
... pipe.execute()
... # 如果执行时没有抛出 WatchError,我们刚才所做的确实“原子地”
... # 完成了
... break
... except WatchError:
... # 一定是其它客户端在我们开始 WATCH 和执行 pipeline 之间修改了
... # 'OUR-SEQUENCE-KEY',我们最好的选择是重试
... continue
注意,因为在整个 WATCH 过程中,Pipeline 必须绑定到一个连接,必须调用 reset() 方法确保连接返回连接池。如果 Pipeline 用作 Context Manager(如上面的例子所示), reset() 会自动调用。当然,也可以用手动的方式明确调用 reset():
>>> pipe = r.pipeline()
>>> while 1:
... try:
... pipe.watch('OUR-SEQUENCE-KEY')
... current_value = pipe.get('OUR-SEQUENCE-KEY')
... next_value = unicode(int(current_value) + 1)
... pipe.multi()
... pipe.set('OUR-SEQUENCE-KEY', next_value)
... pipe.execute()
... break
... except WatchError:
... continue
... finally:
... pipe.reset()
·WATCH 执行后,pipeline 被设置成立即执行模式
·用 MULTI 命令把 pipeline 设置成缓冲模式
·要么使用 with,要么显式调用 reset()
有一个简便的名为“transaction”的方法来处理这种处理和在 WatchError 重试的模式。它的参数是一个可执行对象和要 WATCH 任意个数的键,其中可执行对象接受一个 pipeline 对象做为参数。上面的客户端 INCR 命令可以重写如下(更可读):
>>> def client_side_incr(pipe):
... current_value = pipe.get('OUR-SEQUENCE-KEY')
... next_value = unicode(int(current_value) + 1)
... pipe.multi()
... pipe.set('OUR-SEQUENCE-KEY', next_value)
>>>
>>> r.transaction(client_side_incr, 'OUR-SEQUENCE-KEY')
以上是詳解python redis使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具