国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Redis - Redis的Python客戶端redis-py安裝使用說明文檔

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

2019-10-24 18:05Redis教程網 Redis

這篇文章主要介紹了Redis的Python客戶端redis-py安裝使用說明文檔,本文講解了安裝方法、入門使用實例、API參考和詳細說明,需要的朋友可以參考下

1.安裝

redis-py是Redis key-value 數據庫的 Python 接口,安裝如下,后面我們會講hiredis這個庫

復制代碼代碼如下:

$ sudo pip install redis
$ sudo pip install hiredis

 

2.入門

復制代碼代碼如下:


>>> 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://redis.io/commands)。redis-py 提供了兩個實現這些命令的客戶端類。StrictRedis 類試圖遵守官方的命令語法,但也有幾點例外:

·SELECT:沒有實現。參見下面“線程安全”部分的解釋。

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

·CONFIG GET|SET:分別用 config_get 和 config_set 實現。

·MULTI/EXEC:作為 Pipeline 類的一部分來實現。若在調用pipeline 方法時指定use_transaction=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']

 

為了方便使用,所有緩沖到 pipeline 的命令返回 pipeline 對象本身。因此調用可以鏈起來:

復制代碼代碼如下:


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

 

4.7 版本計劃

redis-py 跟隨 Redis 發布版本。如 redis-py 2.0.0 應該支持 Redis 2.0.0 的所有命令。

4.8 作者

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

特別鳴謝:

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

·Alexander Solovyov 提供通用響應回調系統的思想。

·Paul Hubbard for initial packaging support.

延伸 · 閱讀

精彩推薦
  • RedisRedis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關于Redis全量復制與部分復制的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習...

    豆子先生5052019-11-27
  • Redisredis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具...

    一線碼農5812019-11-18
  • RedisRedis 事務知識點相關總結

    Redis 事務知識點相關總結

    這篇文章主要介紹了Redis 事務相關總結,幫助大家更好的理解和學習使用Redis,感興趣的朋友可以了解下...

    AsiaYe8232021-07-28
  • Redisredis 交集、并集、差集的具體使用

    redis 交集、并集、差集的具體使用

    這篇文章主要介紹了redis 交集、并集、差集的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友...

    xiaojin21cen10152021-07-27
  • RedisRedis如何實現數據庫讀寫分離詳解

    Redis如何實現數據庫讀寫分離詳解

    Redis的主從架構,能幫助我們實現讀多,寫少的情況,下面這篇文章主要給大家介紹了關于Redis如何實現數據庫讀寫分離的相關資料,文中通過示例代碼介紹...

    羅兵漂流記6092019-11-11
  • Redisredis實現排行榜功能

    redis實現排行榜功能

    排行榜在很多地方都能使用到,redis的zset可以很方便地用來實現排行榜功能,本文就來簡單的介紹一下如何使用,具有一定的參考價值,感興趣的小伙伴們...

    乘月歸5022021-08-05
  • Redis詳解Redis復制原理

    詳解Redis復制原理

    與大多數db一樣,Redis也提供了復制機制,以滿足故障恢復和負載均衡等需求。復制也是Redis高可用的基礎,哨兵和集群都是建立在復制基礎上實現高可用的...

    李留廣10222021-08-09
  • RedisRedis的配置、啟動、操作和關閉方法

    Redis的配置、啟動、操作和關閉方法

    今天小編就為大家分享一篇Redis的配置、啟動、操作和關閉方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    大道化簡5312019-11-14
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 91精品国产综合久久久久 | 亚洲福利在线播放 | 一级片免费视频 | 国产91精品亚洲精品日韩已满 | 一区二区三区日本 | 亚洲成人在线观看视频 | 日韩不卡 | 国产成人精品一区二区三区视频 | 国产一区中文字幕 | 久久99深爱久久99精品 | 一级黄色大片 | 欧美电影免费网站 | 成人福利视频网 | 日韩中文字幕视频在线观看 | 日本高清视频在线播放 | 精品一区二区久久久久久久网站 | 国产精品福利在线观看 | 另类国产ts人妖高潮系列视频 | 日韩精品99久久久久中文字幕 | 成人免费毛片高清视频 | 91免费黄色片 | 精品在线91 | 国产欧美精品一区二区三区四区 | av天天看 | 亚洲免费在线看 | 欧美一区二区三区在线看 | 成人免费乱码大片a毛片软件 | 手机看片在线 | 国产视频一区二区视频 | 九色在线视频 | 国产精品一区二区三区四区 | 欧美一区二区三区免费视频 | 久久久久成人精品 | 亚洲日本电影 | 国产精品毛片无码 | 中文字幕高清视频 | 玖玖综合网 | 欧美日本精品 | 国产免费拔擦拔擦8x高清在线人 | 日本高清中文字幕 | 深夜在线视频 |