python 操作 redis

由官方文檔而得
python 利用 redis 第三方庫
首先安裝
pip install redis
然后就可以開始愉快地使用了

import redis
r = redis.StricRedis(host='localhost', port=6379, db=0)
r.set('test', '1')
r.get('test')   # ->> '1'

注,r 方法一覽:


dir(r)

dir(r)

默認(rèn)情況下,響應(yīng)以 Python3 的字節(jié)Python 2 的 str 形式返回,用戶負(fù)責(zé)解碼操作。
redis-py 實(shí)現(xiàn)了兩個(gè)類來操作 redis

  1. StricRedis 盡量堅(jiān)持官方語法,除了以下命令:
    • select 沒有實(shí)現(xiàn),考慮到了線程安全
    • del Python 關(guān)鍵字,用 delete 代替
    • config get|se 作為 config_get / config_set 實(shí)現(xiàn)
    • multi / exec 作為 Pipeline 類的一部分實(shí)現(xiàn)的。
  2. Redis 類是 StricRedis 的子類,提供向后的兼容性。推薦使用 StricRedis。Redis 覆蓋了幾個(gè)命令:
    • lrem num 和 value 參數(shù)順序顛倒,num 提供默認(rèn)值 0
    • zadd Redis類期望* args的形式為:name1,score1,name2,score2,...,而 StricRedis 是 score1,name1,score2,name2,...,這與 Redis 一樣。
    • setex time 和 value 順序顛倒。在 Redis 類中是:setex(key, value, time),在 StricRedis 類中是:setex(key, time, value)。

連接池來操作

pool = redis.ConnectionPool(host = ' localhost ',port = 6379,db = 0)
r = redis.Redis(connection_pool = pool)

解析器

可以使用 Redis 官方維護(hù)的一個(gè) C 庫 hiredis
pip install hiredis

線程安全

可以在線程之間安全地共享 Redis 客戶端實(shí)例。有一點(diǎn)需要注意:Redis SELECT命令。SELECT命令允許您切換連接當(dāng)前使用的數(shù)據(jù)庫。該數(shù)據(jù)庫保持選定狀態(tài)直到選擇另一個(gè)數(shù)據(jù)庫或連接關(guān)閉。這會(huì)產(chǎn)生一個(gè)問題,即連接可以返回到連接到不同數(shù)據(jù)庫的池。因此不會(huì)實(shí)現(xiàn) select 命令。
在線程之間傳遞PubSub或Pipeline對象是不安全的。

管道

一般用來執(zhí)行事務(wù)操作

>>> 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 buffered commands to the server, returning
>>> # a list of responses, one for each command.
>>> pipe.execute()
[True, 'baz']

也可以進(jìn)行鏈?zhǔn)讲僮?/p>

>>> pipe.set(' foo ',' bar ').sadd(' faz ',' baz ').incr(' auto_number ')。execute()
[True,True,6]

禁用原子性:
pipe = r.pipeline(transaction = False)
WATCH 監(jiān)控命令:

>>> with r.pipeline() as pipe:
...     while 1:
...         try:
...            # 設(shè)置一個(gè) watch
...             pipe.watch('OUR-SEQUENCE-KEY')
...             current_value = pipe.get('OUR-SEQUENCE-KEY')
...             next_value = int(current_value) + 1
...             # 開始事務(wù)
...             pipe.multi()
...             pipe.set('OUR-SEQUENCE-KEY', next_value)
...             # 執(zhí)行
...             pipe.execute()
...             # 如果拋出 WatchError ,表示原子性失敗
...             break
...        except WatchError:
...             # 另一個(gè)客戶端修改了,我們必須重試
...             continue

由于 Pipeline 在 watch 期間綁定到單個(gè)連接,必須調(diào)用 reset() 來確保返回連接池,使用 with 上下文的話,它會(huì)自動(dòng)調(diào)用。當(dāng)然也可以手動(dòng)調(diào)用:

>>> pipe = r.pipeline()
>>> while 1:
...     try:
...         pipe.watch('OUR-SEQUENCE-KEY')
...         ...
...         pipe.execute()
...         break
...     except WatchError:
...         continue
...     finally:
...         pipe.reset()

也可以使用 transaction() 方法來簡化操作

>>> def client_side_incr(pipe):
...     current_value = pipe.get('OUR-SEQUENCE-KEY')
...     next_value = int(current_value) + 1
...     pipe.multi()
...     pipe.set('OUR-SEQUENCE-KEY', next_value)
>>>
>>> r.transaction(client_side_incr, 'OUR-SEQUENCE-KEY')
[True]

注:訂閱發(fā)布模式還沒有詳細(xì)理解,故沒寫,以后用到了會(huì)寫。

迭代器

>>> for key, value in (('A', '1'), ('B', '2'), ('C', '3')):
...     r.set(key, value)
>>> for key in r.scan_iter():
...     print key, r.get(key)
A 1
B 2
C 3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • python操作Redis 一. Redis是什么 Redis 是一個(gè)開源(BSD許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系...
    shu_ke閱讀 3,974評論 0 9
  • Python操作redis python連接方式:點(diǎn)擊 下面介紹詳細(xì)使用 1、String 操作 redis中的S...
    子非初心閱讀 287評論 0 1
  • 連接數(shù)據(jù)庫 StrictRedis ConnectionPool 構(gòu)造url方式連接到數(shù)據(jù)庫,有以下三種模式: S...
    cnkai閱讀 3,207評論 0 2
  • 昨天,我們討論了python如何連接redis。今天我們要學(xué)習(xí)如何用python操作redis的數(shù)據(jù)。 這里,再補(bǔ)...
    阿爾卑斯山上的小灰兔閱讀 1,388評論 0 0
  • 半倚窗扉立,村莊入眼漆。 亭臺(tái)人鼎沸, 暑熱褪羅衣。 注:新韻
    幽小窗閱讀 684評論 78 44

友情鏈接更多精彩內(nèi)容