婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Redis的Python客戶端redis-py安裝使用說(shuō)明文檔

Redis的Python客戶端redis-py安裝使用說(shuō)明文檔

熱門標(biāo)簽:高德地圖標(biāo)注商家在哪 hbuilder地圖標(biāo)注 400電話從哪里申請(qǐng)濱州 隨州營(yíng)銷電話機(jī)器人怎么樣 江西南昌百應(yīng)電話機(jī)器人 400電話申請(qǐng)?jiān)趺纯?/a> 機(jī)器人電話機(jī)創(chuàng)意繪畫 天音通信電話機(jī)器人 杭州400電話如何申請(qǐng)的

1.安裝

redis-py是Redis key-value 數(shù)據(jù)庫(kù)的 Python 接口,安裝如下,后面我們會(huì)講hiredis這個(gè)庫(kù)

復(fù)制代碼 代碼如下:

$ sudo pip install redis
$ sudo pip install hiredis

2.入門

復(fù)制代碼 代碼如下:

>>> 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 官方文檔詳細(xì)解釋了每個(gè)命令(http://redis.io/commands)。redis-py 提供了兩個(gè)實(shí)現(xiàn)這些命令的客戶端類。StrictRedis 類試圖遵守官方的命令語(yǔ)法,但也有幾點(diǎn)例外:

·SELECT:沒(méi)有實(shí)現(xiàn)。參見下面“線程安全”部分的解釋。

·DEL:'del' 是 Python 語(yǔ)法的保留關(guān)鍵字。因此redis-py 使用 “delete” 代替。

·CONFIG GET|SET:分別用 config_get 和 config_set 實(shí)現(xiàn)。

·MULTI/EXEC:作為 Pipeline 類的一部分來(lái)實(shí)現(xiàn)。若在調(diào)用pipeline 方法時(shí)指定use_transaction=True,在執(zhí)行 pipeline 時(shí)會(huì)用 MULTI 和 EXEC 封裝 pipeline 的操作。參見下面 Pipeline 部分。

·SUBSCRIBE/LISTEN: 和 pipeline 類似,由于需要下層的連接保持狀態(tài), PubSub 也實(shí)現(xiàn)成單獨(dú)的類。調(diào)用 Redis 客戶端的 pubsub 方法返回一個(gè) PubSub 的實(shí)例,通過(guò)這個(gè)實(shí)例可以訂閱頻道或偵聽消息。兩個(gè)類(StrictRedis 和 PubSub 類)都可以發(fā)布(PUBLISH)消息。

除了上面的改變,StrictRedis 的子類 Redis,提供了對(duì)舊版本 redis-py 的兼容:

·LREM:參數(shù) ‘num' 和 ‘value' 的順序交換了一下,這樣‘num' 可以提供缺省值 0.

·ZADD:實(shí)現(xiàn)時(shí) score 和 value 的順序不小心弄反了,后來(lái)有人用了,就這樣了

·SETEX: time 和 value 的順序反了

注:最好不要用 Redis,這個(gè)類只是做兼容用的

4.詳細(xì)說(shuō)明

4.1 連接池

在后臺(tái),redis-py 采用了連接池(ConnectionPool)來(lái)管理對(duì) Redis 服務(wù)器的連接。缺省情況下,每個(gè)Redis 實(shí)例都創(chuàng)建自己的連接池。也可以采用向 Redis 類的 connection_pool 參數(shù)傳遞已創(chuàng)建的連接池的方式。通過(guò)這種方式,可以實(shí)現(xiàn)客戶端分片或精確控制連接的管理:

復(fù)制代碼 代碼如下:

>>> pool = redis.ConnectionPool(host='localhost', port=6379, db=0)

>>> r = redis.StrictRedis(connection_pool=pool)


4.2 連接

ConnectionPool 管理一組 Connection 實(shí)例。redis-py 提供兩種類型的 Connection。缺省情況下,Connection 是一個(gè)普通的 TCP 連接。 UnixDomainSocketConnection 允許和服務(wù)器運(yùn)行在同一個(gè)設(shè)備上的客戶端通過(guò) unix 套接字進(jìn)行連接。要使用 UnixDomainSocketConnection 連接, 只需要通過(guò)unix_socket_path 參數(shù)傳遞一個(gè) unix 套接字文件的字符串。另外,確保redis.conf 文件配置了unixsocket 參數(shù)(缺省情況下是注釋掉的):

復(fù)制代碼 代碼如下:

>>> r = redis.StrictRedis(unix_socket_path='/tmp/redis.sock')

也可以自己創(chuàng)建 Connection 子類。這個(gè)特性可以在使用異步框架時(shí)用于控制 socket 的行為。要使用自己的Connection 初始化客戶端類,需要?jiǎng)?chuàng)建一個(gè)連接池,通 connection_class 參數(shù)把自己的類傳遞進(jìn)去。傳遞的其它關(guān)鍵字參數(shù)會(huì)在初始化時(shí)傳遞給自定義的類:
復(fù)制代碼 代碼如下:

>>> pool = redis.ConnectionPool(connection_class=YourConnectionClass, your_arg='...', ...)

4.3 分析器

分析類提供了控制如何對(duì) Redis 服務(wù)器的響應(yīng)進(jìn)行分析的途徑。redis-py 提供了兩個(gè)分析類, PythonParser和 HiredisParser。缺省情況下,如果安裝了 hiredis 模塊, redis-py 會(huì)嘗試使用 HiredisParser,否則使用 PythonParser。

Hiredis 是由 Redis 核心團(tuán)隊(duì)維護(hù)的 C 庫(kù)。 Pieter Noordhuis 創(chuàng)建了 Python 的實(shí)現(xiàn)。分析 Redis 服務(wù)器的響應(yīng)時(shí),Hiredis 可以提供 10 倍的速度提升。性能提升在獲取大量數(shù)據(jù)時(shí)優(yōu)為明顯,比如 LRANGE 和SMEMBERS 操作。

和 redis-py 一樣,Hiredis 在 Pypi 中就有,可以通過(guò) pip 或 easy_install 安裝:

復(fù)制代碼 代碼如下:

$ pip install hiredis

或:
復(fù)制代碼 代碼如下:

$ easy_install hiredis

4.4 響應(yīng)回調(diào)函數(shù)

客戶端類使用一系列回調(diào)函數(shù)來(lái)把 Redis 響應(yīng)轉(zhuǎn)換成合適的 Python 類型。有些回調(diào)函數(shù)在 Redis 客戶端類的字典 RESPONSE_CALLBACKS 中定義。

通過(guò) set_response_callback 方法可以把自定義的回調(diào)函數(shù)添加到單個(gè)實(shí)例。這個(gè)方法接受兩個(gè)參數(shù):一個(gè)命令名和一個(gè)回調(diào)函數(shù)。通過(guò)這種方法添加的回調(diào)函數(shù)只對(duì)添加到的對(duì)象有效。要想全局定義或重載一個(gè)回調(diào)函數(shù),應(yīng)該創(chuàng)建 Redis 客戶端的子類并把回調(diào)函數(shù)添加到類的 RESPONSE_CALLBACKS(原文誤為REDIS_CALLBACKS) 中。

響應(yīng)回調(diào)函數(shù)至少有一個(gè)參數(shù):Redis 服務(wù)器的響應(yīng)。要進(jìn)一步控制如何解釋響應(yīng),也可以使用關(guān)鍵字參數(shù)。這些關(guān)鍵字參數(shù)在對(duì) execute_command 的命令調(diào)用時(shí)指定。通過(guò) “withscores” 參數(shù),ZRANGE 演示了回調(diào)函數(shù)如何使用關(guān)鍵字參數(shù)。

4.5 線程安全

Redis 客戶端實(shí)例可以安全地在線程間共享。從內(nèi)部實(shí)現(xiàn)來(lái)說(shuō),只有在命令執(zhí)行時(shí)才獲取連接實(shí)例,完成后直接返回連接池,命令永不修改客戶端實(shí)例的狀態(tài)。

但是,有一點(diǎn)需要注意:SELECT 命令。SELECT 命令允許切換當(dāng)前連接使用的數(shù)據(jù)庫(kù)。新的數(shù)據(jù)庫(kù)保持被選中狀態(tài),直到選中另一個(gè)數(shù)據(jù)庫(kù)或連接關(guān)閉。這會(huì)導(dǎo)致在返回連接池時(shí),連接可能指定了別的數(shù)據(jù)庫(kù)。

因此,redis-py 沒(méi)有在客戶端實(shí)例中實(shí)現(xiàn) SELECT 命令。如果要在同一個(gè)應(yīng)用中使用多個(gè) Redis 數(shù)據(jù)庫(kù),應(yīng)該給第一個(gè)數(shù)據(jù)庫(kù)創(chuàng)建獨(dú)立的客戶端實(shí)例(可能也需要獨(dú)立的連接池)。

在線程間傳遞 PubSub 和 Pipeline 對(duì)象是不安全的。

4.6 Pipeline

Pipeline 是 StrictRedis 類的子類,支持在一個(gè)請(qǐng)求里發(fā)送緩沖的多個(gè)命令。通過(guò)減少客戶端和服務(wù)器之間往來(lái)的數(shù)據(jù)包,可以大大提高命令組的性能。

Pipeline 的使用非常簡(jiǎn)單:

復(fù)制代碼 代碼如下:

>>> 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']

為了方便使用,所有緩沖到 pipeline 的命令返回 pipeline 對(duì)象本身。因此調(diào)用可以鏈起來(lái):

復(fù)制代碼 代碼如下:

>>> pipe.set('foo', 'bar').sadd('faz', 'baz').incr('auto_number').execute()

[True, True, 6]


另外,pipeline 也可以保證緩沖的命令組做為一個(gè)原子操作。缺省就是這種模式。要使用命令緩沖,但禁止pipeline 的原子操作屬性,可以關(guān)掉 transaction:

>>> pipe = r.pipeline(transaction=False)
一個(gè)常見的問(wèn)題是:在進(jìn)行原子事務(wù)操作前需要從 Redis 中獲取事務(wù)中要用的數(shù)據(jù)。比如,假設(shè) INCR 命令不存在,但我們需要用 Python 創(chuàng)建一個(gè)原子版本的 INCR。

一個(gè)不成熟的實(shí)現(xiàn)是獲取值(GET),在 Python 中增一, 設(shè)置(SET)新值。但是,這不是原子操作,因?yàn)槎鄠€(gè)客戶端可能在同一時(shí)間做這件事,每一個(gè)都通過(guò) GET 獲取同一個(gè)值。

WATCH 命令提供了在開始事務(wù)前監(jiān)視一個(gè)或多個(gè)鍵的能力。如果這些鍵中的任何一個(gè)在執(zhí)行事務(wù)前發(fā)生改變,整個(gè)事務(wù)就會(huì)被取消并拋出 WatchError 異常。要實(shí)現(xiàn)我們的客戶 INCR 命令,可以按下面的方法操作:

復(fù)制代碼 代碼如下:

>>> with r.pipeline() as pipe:

...     while 1:

...         try:

...             # 對(duì)序列號(hào)的鍵進(jìn)行 WATCH

...             pipe.watch('OUR-SEQUENCE-KEY')

...             # WATCH 執(zhí)行后,pipeline 被設(shè)置成立即執(zhí)行模式直到我們通知它

...             # 重新開始緩沖命令。

...             # 這就允許我們獲取序列號(hào)的值

...             current_value = pipe.get('OUR-SEQUENCE-KEY')

...             next_value = unicode(int(current_value) + 1)

...             # 現(xiàn)在我們可以用 MULTI 命令把 pipeline 設(shè)置成緩沖模式

...             pipe.multi()

...             pipe.set('OUR-SEQUENCE-KEY', next_value)

...             # 最后,執(zhí)行 pipeline (set 命令)

...             pipe.execute()

...             # 如果執(zhí)行時(shí)沒(méi)有拋出 WatchError,我們剛才所做的確實(shí)“原子地”

...             # 完成了

...             break

...         except WatchError:

...             # 一定是其它客戶端在我們開始 WATCH 和執(zhí)行 pipeline 之間修改了

...             # 'OUR-SEQUENCE-KEY',我們最好的選擇是重試

...             continue


注意,因?yàn)樵谡麄€(gè) WATCH 過(guò)程中,Pipeline 必須綁定到一個(gè)連接,必須調(diào)用 reset() 方法確保連接返回連接池。如果 Pipeline 用作 Context Manager(如上面的例子所示), reset() 會(huì)自動(dòng)調(diào)用。當(dāng)然,也可以用手動(dòng)的方式明確調(diào)用 reset():
復(fù)制代碼 代碼如下:

>>> 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()

重點(diǎn)(譯者注):

·WATCH 執(zhí)行后,pipeline 被設(shè)置成立即執(zhí)行模式

·用 MULTI 命令把 pipeline 設(shè)置成緩沖模式

·要么使用 with,要么顯式調(diào)用 reset()

有一個(gè)簡(jiǎn)便的名為“transaction”的方法來(lái)處理這種處理和在 WatchError 重試的模式。它的參數(shù)是一個(gè)可執(zhí)行對(duì)象和要 WATCH 任意個(gè)數(shù)的鍵,其中可執(zhí)行對(duì)象接受一個(gè) pipeline 對(duì)象做為參數(shù)。上面的客戶端 INCR 命令可以重寫如下(更可讀):

復(fù)制代碼 代碼如下:

>>> 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')

4.7 版本計(jì)劃

redis-py 跟隨 Redis 發(fā)布版本。如 redis-py 2.0.0 應(yīng)該支持 Redis 2.0.0 的所有命令。

4.8 作者

redis-py 由 Andy McCurdy (sedrik@gmail.com) 開發(fā)并維護(hù)。項(xiàng)目地址在:http://github.com/andymccurdy/redis-py

特別鳴謝:

·Ludovico Magnocavallo, Python Redis 客戶端的原作者, 其中一些 socket 代碼現(xiàn)在還在使用。

·Alexander Solovyov 提供通用響應(yīng)回調(diào)系統(tǒng)的思想。

·Paul Hubbard for initial packaging support.

您可能感興趣的文章:
  • Java客戶端利用Jedis操作redis緩存示例代碼
  • java客戶端Jedis操作Redis Sentinel 連接池的實(shí)現(xiàn)方法
  • 詳解java 客戶端鏈接不上redis解決方案
  • Scala 操作Redis使用連接池工具類RedisUtil
  • redis實(shí)現(xiàn)多進(jìn)程數(shù)據(jù)同步工具代碼分享
  • 推薦一款神仙顏值的 Redis 客戶端工具(速收藏)

標(biāo)簽:昆明 葫蘆島 常德 石嘴山 沈陽(yáng) 鶴崗 招商 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Redis的Python客戶端redis-py安裝使用說(shuō)明文檔》,本文關(guān)鍵詞  Redis,的,Python,客戶端,redis-py,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Redis的Python客戶端redis-py安裝使用說(shuō)明文檔》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Redis的Python客戶端redis-py安裝使用說(shuō)明文檔的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    久久精品一区四区| 日本欧美大码aⅴ在线播放| 久久久精品蜜桃| 亚洲自拍偷拍网站| 色婷婷激情一区二区三区| 欧美精品一区二区三区蜜桃| 亚洲激情自拍偷拍| 99久久精品国产精品久久| 1024成人网色www| 成人激情文学综合网| 中文字幕亚洲电影| 99国产精品国产精品久久| 亚洲欧美色图小说| 欧美性videosxxxxx| 日本亚洲视频在线| 久久免费视频一区| 99re免费视频精品全部| 亚洲色图欧洲色图婷婷| 色中色一区二区| 亚洲一区二区三区爽爽爽爽爽| 99九九99九九九视频精品| 亚洲图片你懂的| 欧美精品一级二级| 国产成人啪免费观看软件 | 国产福利精品一区| 国产亚洲欧美色| 蜜桃久久av一区| 色拍拍在线精品视频8848| 久久久精品免费免费| 日韩手机在线导航| 青青青爽久久午夜综合久久午夜 | 欧美日韩一区不卡| 午夜av电影一区| 91精品午夜视频| 国产99久久久久| 国产精品不卡一区| 日韩一区二区三区在线观看| 国产乱人伦偷精品视频不卡 | 日韩欧美久久一区| 日日欢夜夜爽一区| 久久精品男人天堂av| 91在线看国产| 丝袜国产日韩另类美女| 欧美国产一区在线| 久久精品网站免费观看| 欧美精品第一页| 91在线免费看| 9i在线看片成人免费| 国产在线播放一区三区四| 午夜激情久久久| 亚洲人成在线播放网站岛国| 欧美激情自拍偷拍| 国产欧美精品一区| 26uuu国产日韩综合| 3751色影院一区二区三区| 色综合久久综合| 成人av在线网站| 国产成a人无v码亚洲福利| 久久精品国产一区二区三区免费看| 亚洲免费av在线| 中文字幕欧美国产| 久久日韩粉嫩一区二区三区| 日韩欧美国产综合| 制服丝袜亚洲色图| 91精品国产综合久久精品麻豆| 色天使久久综合网天天| 欧美色图一区二区三区| 精品一区二区久久| 麻豆精品精品国产自在97香蕉| 日日夜夜一区二区| 日韩av一区二区三区四区| 婷婷激情综合网| 亚洲大型综合色站| 麻豆成人久久精品二区三区红| 久久黄色级2电影| 国产一区在线视频| 成人一区在线看| 日日摸夜夜添夜夜添精品视频| 午夜伊人狠狠久久| 日本不卡视频在线| 婷婷六月综合网| 视频一区视频二区中文| 丝袜亚洲精品中文字幕一区| 久久精品免费观看| 懂色av中文字幕一区二区三区 | 久久久久久亚洲综合影院红桃| 日韩一区二区三区精品视频| 欧美精品一区二区在线播放| 欧美国产一区在线| 亚洲第一搞黄网站| 久草精品在线观看| www.亚洲人| 欧美日韩不卡在线| 久久精品水蜜桃av综合天堂| 一区二区三区免费看视频| 日欧美一区二区| 懂色一区二区三区免费观看| 在线看国产日韩| 亚洲精品一线二线三线无人区| 久久久久久久电影| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 粉嫩aⅴ一区二区三区四区| 欧美性视频一区二区三区| 在线看一区二区| 久久久噜噜噜久久人人看| 中文字幕综合网| 天堂精品中文字幕在线| 黄页视频在线91| 欧美一区二区视频在线观看2022| 日韩亚洲国产中文字幕欧美| 国产人久久人人人人爽| 一区二区三区免费网站| 国产一区二区精品久久| 欧美色中文字幕| 国产精品免费人成网站| 视频在线在亚洲| 不卡一区二区在线| 精品国产91亚洲一区二区三区婷婷 | 国内外成人在线视频| 成人性生交大片免费看中文网站| 欧美性色黄大片手机版| 国产日产亚洲精品系列| 五月婷婷色综合| 91色婷婷久久久久合中文| 精品粉嫩aⅴ一区二区三区四区| 久久久不卡网国产精品二区| 视频一区二区欧美| 粉嫩av一区二区三区| 欧美午夜一区二区| 亚洲女同ⅹxx女同tv| 国产一区欧美一区| 日韩欧美国产精品| 日本伊人色综合网| 欧美一级欧美一级在线播放| 亚洲精品国产精品乱码不99| 国产成人免费视| 精品嫩草影院久久| 亚洲成人黄色小说| 色哟哟一区二区| 国产精品久久久久影视| 狠狠色丁香久久婷婷综合丁香| 91麻豆精品国产| 亚洲大尺度视频在线观看| 欧美日韩小视频| 午夜婷婷国产麻豆精品| 日本韩国精品在线| 日韩一区日韩二区| 91亚洲精品乱码久久久久久蜜桃 | 国产色婷婷亚洲99精品小说| 日韩电影在线看| 欧美日韩在线播| 亚洲伦理在线精品| 在线中文字幕不卡| 亚洲视频 欧洲视频| av在线播放不卡| 亚洲女与黑人做爰| 欧美四级电影网| 亚洲一区二区三区免费视频| 在线电影院国产精品| 亚洲二区视频在线| 一本一本久久a久久精品综合麻豆| 欧美激情在线免费观看| 激情深爱一区二区| 中文字幕第一区二区| 国产成人福利片| 中文字幕中文在线不卡住| 99久久久无码国产精品| 国产亚洲午夜高清国产拍精品| 韩国成人福利片在线播放| 久久久777精品电影网影网| 欧美精品欧美精品系列| 午夜电影网一区| 亚洲精品在线观看视频| 99视频一区二区三区| 中文字幕日本不卡| 欧洲一区在线观看| 免费观看成人av| 中文字幕制服丝袜成人av| 欧美日精品一区视频| 国产精品系列在线播放| 中文字幕亚洲区| 日韩久久久精品| 一本色道a无线码一区v| 蜜臀a∨国产成人精品| 国产欧美日本一区视频| 欧美日韩国产高清一区二区三区 | 91精品国产综合久久婷婷香蕉| 精品一区二区三区在线观看| 国产精品欧美一级免费| 91 com成人网| 成人激情文学综合网| 美国十次了思思久久精品导航| 国产精品美女久久久久高潮| 精品成人一区二区三区四区| 欧美日韩一级黄| 国产乱子伦视频一区二区三区| 亚洲精品日韩一| 久久一区二区三区四区| 欧美日韩视频在线一区二区| 黄页视频在线91|