Python redis操作例分析【接続、パイプ、パブリケーション、サブスクリプションなど】

3886 ワード

この例では、Python redis操作について説明します.皆さんの参考にしてください.具体的には以下の通りです.
一、redis
redisはkey-valueストレージシステムです.Memcachedと同様に、string(文字列)、list(チェーンテーブル)、set(セット)、zset(sorted set--秩序セット)、hash(ハッシュタイプ)など、格納されたvalueタイプが相対的に多くサポートされています.これらのデータ型は、push/pop、add/remove、および交差および差セット、およびより豊富な操作をサポートし、これらの操作は原子的である.これに基づいて、redisは様々な方法のソートをサポートします.memcachedと同様に、効率を保証するために、データはメモリにキャッシュされます.違いはredisが更新したデータを定期的にディスクに書き込むか、修正操作を追加の記録ファイルに書き込むか、それに基づいてmaster-slave同期を実現することである.
Redisは高性能なkey-valueデータベースです.redisの出現はmemcachedのようなkey/valueストレージの不足を大きく補償し,一部の場合関係データベースに良い補完作用を果たすことができる.Python、Ruby、Erlang、PHPクライアントを提供し、使いやすく、Redisは主従同期をサポートしています.データは、プライマリ・サーバから任意の数のセカンダリ・サーバに同期でき、セカンダリ・サーバは、他のセカンダリ・サーバに関連付けられたプライマリ・サーバであってもよい.これにより、Redisは単層ツリーコピーを実行することができる.ディスクから意図せずにデータを書き込むことができます.パブリケーション/サブスクリプションメカニズムが完全に実装されているため、データベースからツリーをどこでも同期させると、チャネルをサブスクリプションし、プライマリ・サーバの完全なメッセージ・パブリケーション・レコードを受信できます.
二、python操作redis
1、接続方式
redis-pyはRedisを実装するための2つのクラスRedisとStrictRedisのコマンドを提供し、StrictRedisはほとんどの公式コマンドを実装するために使用され、公式の構文とコマンドを使用し、RedisはStrictRedisのサブクラスである

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
r = redis.Redis(host='192.168.0.110', port=6379,db=0)
r.set('name', 'zhangsan')  #  
print (r.get('name'))  #  


2、接続プール
redis-pyはconnection poolを使用して、1つのredis serverに対するすべての接続を管理し、接続が確立され、解放されるたびにオーバーヘッドを回避します.デフォルトでは、Redisインスタンスごとに独自の接続プールが維持されます.1つの接続プールを直接確立し、パラメータRedisとして使用することで、複数のRedisインスタンスが1つの接続プールを共有することができます.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
pool = redis.ConnectionPool(host='192.168.0.110', port=6379)
r = redis.Redis(connection_pool=pool)
r.set('name', 'zhangsan')  #  
print (r.get('name'))  #  


3、操作
redis詳細操作コマンド
4、パイプ
redis-pyのデフォルトでは、リクエストのたびに作成(接続プール申請接続)と切断(接続プールの返却)の1回の接続操作が実行されます.1回のリクエストで複数のコマンドを指定する場合は、piplineを使用して1回のリクエストで複数のコマンドを指定できます.デフォルトでは、1回のpiplineは原子的な操作です.

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import redis
pool = redis.ConnectionPool(host='192.168.0.110', port=6379)
r = redis.Redis(connection_pool=pool)
pipe = r.pipeline(transaction=True)
r.set('name', 'zhangsan')
r.set('name', 'lisi')
pipe.execute()


5、配布と購読
まずRedisHelperクラスを定義し、Redisに接続し、チャンネルをmonitorとして定義し、パブリケーション(publish)およびサブスクリプション(subscribe)メソッドを定義します.

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import redis
class RedisHelper(object):
  def __init__(self):
    self.__conn = redis.Redis(host='192.168.0.110',port=6379)#  Redis
    self.channel = 'monitor' #    
  def publish(self,msg):#      
    self.__conn.publish(self.channel,msg)
    return True
  def subscribe(self):#      
    pub = self.__conn.pubsub()
    pub.subscribe(self.channel)
    pub.parse_response()
    return pub


パブリッシャ

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#  
from RedisHelper import RedisHelper
obj = RedisHelper()
obj.publish('hello')#  


購読者

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#  
from RedisHelper import RedisHelper
obj = RedisHelper()
redis_sub = obj.subscribe()#      
while True:
  msg= redis_sub.parse_response()
  print (msg)


Pythonに関する詳細については、「Pythonの一般的なデータベース操作テクニックの概要」、「Pythonコード操作テクニックの概要」、「Pythonデータ構造とアルゴリズムチュートリアル」、「Python Socketプログラミングテクニックの概要」、「Python関数数使用テクニックの概要」、「Python文字列操作テクニックの概要」、『Python入門と進級経典教程』及び『Pythonファイルとディレクトリ操作技術要約』
ここではPythonプログラムの設計に役立つことを願っています.