ホームページ  >  記事  >  データベース  >  Python での Redis のアプリケーション

Python での Redis のアプリケーション

PHPz
PHPzオリジナル
2023-06-20 16:32:251203ブラウズ

Redis は、オープン ソースの高性能キー/値ストレージ システムであり、キャッシュ、メッセージ キュー、カウンター、その他のシナリオで一般的に使用されます。 Python は、簡潔で効率的なスクリプト言語として、Web バックグラウンド処理、データ分析とマイニング、機械学習、人工知能などの分野でも広く使用されています。この記事では、Redis のインストール、Python Redis クライアント モジュールの使用、特定のアプリケーション ケースなど、Python での Redis のアプリケーションについて説明します。

1. Redis のインストール

  1. インストール ファイルをダウンロードします
    Redis 公式 Web サイトでは、ソース コードとプリコンパイルされたバージョンが提供されています。プリコンパイル済みバージョンを選択した場合は、最新バージョンを直接ダウンロードできます。
  2. 解凍とコンパイル
    ダウンロードが完了したら、指定したディレクトリに解凍します。 make コマンドを使用して、Redis を実行可能ファイルや起動スクリプトなどにコンパイルします。 Linux システムでは、次のコマンドを使用できます:

$ tar xzf redis-5.0.3.tar.gz
$ cd redis-5.0.3
$ make

  1. Redis サーバーの起動
    コンパイルが完了したら、redis-server コマンドを使用して Redis サーバーを起動できます。デフォルトのリスニング ポートは 6379 です:

$ src /redis-server

  1. テスト接続
    redis-cli コマンドを使用して、操作のために Redis サーバーに接続できます。たとえば、SET コマンドを使用してキーと値のペアを設定します:

$ src/redis-cli
127.0.0.1:6379> SET mykey "Hello Redis"
OK
127.0. 0.1:6379> GET mykey
"Hello Redis"

2. Python Redis クライアント モジュールの使用

Python での Redis の使用を容易にするために、次のことができます。 redis-py モジュールを Redis クライアント ライブラリとして使用します。 pip コマンドを使用してインストールできます。

$ pip install redis

  1. Redis サーバーに接続する
    まず、Redis サーバーに接続するための Redis オブジェクトを作成する必要があります。 。次のコードを使用できます:

import redis
rds = redis.Redis(host='localhost', port=6379, db=0)

where host とport はそれぞれ Redis サーバーのアドレスとポート番号、db は Redis データベースの番号を表し、デフォルトは 0 です。

  1. データ操作
    Redis オブジェクトを使用すると、キーと値のペアの設定、取得、削除などの操作を実行できます。例:

rds.set('name', 'Alice')
name = rds.get('name')
print(name) # 出力: b'Alice '

このうち、set メソッドはキーと値のペアの設定に使用され、get メソッドはキーと値のペアの取得に使用されます。 get メソッドによって返されるデータ型はバイトであるため、decode メソッドを使用して文字列に変換する必要があることに注意してください。

  1. バッチ操作
    効率を向上させるために、Redis はバッチ操作をサポートしています。パイプラインを使用すると、複数の操作をパッケージ化して Redis サーバーに送信できるため、ネットワークのオーバーヘッドと遅延が軽減されます。例:

pipe = rds.pipeline()
pipe.set('key1', 'value1')
pipe.set('key2', 'value2')
pipe.set('key3', 'value3')
pipe.execute()

  1. Pub/Sub モード
    Redis は、送信情報のパブリッシュ/サブスクライブ モードを提供します。 Python Redis クライアント ライブラリは、対応する API も提供します。例:

インポート時間
pubsub = rds.pubsub()
pubsub.subscribe('channel')
rds.publish('channel', 'Hello')
time.sleep(1) # 1 秒待ちます
msg = pubsub.get_message()
print(msg) # 出力: {'type': 'message', 'channel': b'channel ' , 'data': b'Hello'}

このうち、subscribeメソッドはチャンネルに登録することを意味し、publishメソッドはメッセージを公開することを意味します。 get_message メソッドを使用してメッセージを取得します。

3. 特定のアプリケーション ケース

  1. キャッシュ
    Python Redis クライアント ライブラリを使用すると、一般的に使用されるデータをキャッシュし、Web アプリケーションの応答速度を高速化できます。例:

import time
import redis
class Cache:

def __init__(self):
    self.rds = redis.Redis(host='localhost', port=6379, db=0)

def get(self, key):
    val = self.rds.get(key)
    if val:
        return val.decode()
    return None

def set(self, key, val, ttl=60):
    self.rds.set(key, val, ex=ttl)

cache = Cache()
val =cache.get('key')
if not val:

# 从数据库中查询数据
val = 'value'
cache.set('key', val, ttl=60)

print(val)

Cache クラスは Redis キャッシュの実装をカプセル化しており、get メソッドと set メソッドを使用してキャッシュ データを取得または設定できます。データを取得する前にキャッシュにクエリを実行します。キャッシュにデータが存在しない場合は、データベースからデータを読み取り、キャッシュします。

  1. 分散ロック
    分散ロックは、複数のプロセス/スレッド/ノードが連携するときにリソースの競合を回避するために使用される同期メカニズムです。 Python Redis クライアント ライブラリを使用して、分散ロックを実装できます。例:

インポート時間
import redis
class Lock:

def __init__(self):
    self.rds = redis.Redis(host='localhost', port=6379, db=0)
    self.locked = False

def acquire(self, lockname, ttl=60):
    identifier = str(time.time())
    self.locked = self.rds.setnx(lockname, identifier)
    if self.locked:
        self.rds.expire(lockname, ttl)
    return self.locked

def release(self, lockname):
    if self.locked:
        self.rds.delete(lockname)

lock = Lock()
if lock.acquire('mylock'):

# 处理业务逻辑...
lock.release('mylock')

Lock クラスは分散ロックの実装をカプセル化しており、acquire メソッドと release メソッドを使用してロックを取得または解放できます。ロックを取得するとき、ロックがすでに占有されている場合は False を返し、ロックが占有されていない場合はロックを取得して有効期限を設定します。

要約すると、Redis は Python で広く使用されており、キャッシュ、分散ロック、メッセージ キュー、カウンター、その他のシナリオで使用できます。 Python Redis クライアント ライブラリは、便利なデータ操作のためのシンプルで使いやすい API も提供します。

以上がPython での Redis のアプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。