コンテンツにスキップ

スクリプト開発 / コネクターオブジェクト DFF.CONN / Redis

Redis コネクター操作オブジェクトは、主に Redis の操作方法を提供します。

DFF.CONN(...) のパラメータは次のとおりです:

パラメータ 必須 / デフォルト値 説明
connector_id str 必須 コネクター ID
database str None コネクター構成のデータベース番号を上書き
client_name str None 今回の接続のクライアント名を設定

Redis Cluster では論理データベースを選択できないため、クラスター接続では database は無視されます。

メッセージ購読

コネクターでのメッセージ購読については、スクリプト開発 / コネクター購読 を参照してください

.query(...)

Redis の execute_command(...) を直接呼び出してコマンドを実行します。パラメータは次のとおりです:

パラメータ 必須 / デフォルト値 説明
command str 必須 Redis コマンド
*args - - Redis コマンド引数
**kwargs - - redis-py に渡すパラメータ
1
2
3
db.query('SET', 'myKey', 'myValue', 'nx')
result = db.query('GET', 'myKey')
# b'myValue'

.query(...) は redis-py の戻り値を変換しません。文字列結果は通常 bytes です。実際の操作では、データ形式に応じて変換できます:

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import json

result = db.query('GET', 'intValue')
print(int(result))

result = db.query('GET', 'strValue')
print(result.decode('utf-8'))

result = db.query('GET', 'jsonValue')
print(json.loads(result.decode('utf-8')))

.run(...)

redis-py のメソッド名に従ってクライアントメソッドを呼び出します。シグネチャは .run(command, *args, **kwargs) です。例:

1
result = db.run('set', 'myKey', 'myValue', nx=True)

command は大文字と小文字を区別する redis-py メソッド名で、通常は小文字を使用します。戻り値は対応する redis-py メソッドと同じです。

一般的な便利メソッド

コネクターは以下の便利メソッドを提供します。読み取り系メソッドは、対応する実装で bytes を再帰的に UTF-8 文字列にデコードするため、.query(...) の元の戻り値とは異なる場合があります。

データベースとキー

メソッド 説明
.ping() 接続を確認
.info() Redis 情報を取得
.dbsize() 現在のデータベースのキー数を取得
.type(key) キーの型を取得。キーが存在しない場合は None を返す
.memory_usage(key, samples=0) キーが使用するメモリを取得
.keys(pattern='*', limit=None) SCAN を使用して一致するキーを取得。返却数を制限できる
.exists(key) キーの存在を判定し、bool を返す
.expire(key, expires) 秒単位の有効期限を設定
.expireat(key, timestamp) 絶対有効期限を設定
.ttl(key) / .pttl(key) 秒単位 / ミリ秒単位の残り時間を取得
.rename(key, new_key) キー名を変更
.renamenx(key, new_key) 新しいキーが存在しない場合のみリネーム
.delete(keys) キーまたはキーリストを削除し、削除数を返す

文字列とハッシュ

メソッド 説明
.set(key, value, expires=None, not_exists=False, exists=False, get_old_value=False) 値を設定し、有効期限および NX、XX、GET オプションを設定できる
.mset(key_values) 辞書のキーと値を一括設定
.get(key) 単一の値を取得してデコード
.mget(keys) 一括取得し、{key: value} を返す
.getset(key, value) 新しい値を設定し、古い値を返す
.incr(key) / .incrby(key, step=1) / .incrbyfloat(key, step=1) 数値をインクリメント
.hkeys(key, pattern='*', with_values=False) HSCAN を使用してフィールドを取得。同時に値を返すこともできる
.hset(key, field=None, value=None, field_values=None) 1 つのフィールドまたはフィールドマップを設定
.hmset(key, field_values) フィールドを一括設定
.hsetnx(key, field, value) フィールドが存在しない場合のみ設定
.hget(key, field) / .hgetall(key) フィールド値を取得してデコード
.hmget(key, fields) 一括取得し、{field: value} を返す
.hstrlen(key, field) / .hstrlenall(key) 1 つまたはすべてのフィールド値のバイト長を取得
.hincr(key, field) / .hincrby(key, field, step=1) / .hincrbyfloat(key, field, step=1) フィールドの数値をインクリメント
.hdel(key, field) 1 つのフィールドまたはフィールドリストを削除

リスト、セット、ソート済みセット

メソッド 説明
.lpush(key, value) / .rpush(key, value) 左側 / 右側から 1 つの値または値リストをプッシュ
.lpop(key, count=None) / .rpop(key, count=None) 左側 / 右側から 1 つまたは複数の値をポップ
.blpop(key, timeout=0) / .brpop(key, timeout=0) ブロッキングポップ
.rpoplpush(key, dest_key=None) ポップして別のリストにプッシュ
.brpoplpush(key, dest_key=None, timeout=0) ブロッキングでポップしてプッシュ
.llen(key) / .lrange(key, start=0, stop=-1) リストの長さ / 範囲を取得
.ltrim(key, start, stop) リストをトリミング
.push(...) / .pop(...) / .bpop(...) .lpush(...) / .rpop(...) / .brpop(...) のエイリアス
.sadd(key, member) / .srem(key, member) 1 つのメンバーまたはメンバーリストを追加 / 削除
.scard(key) / .smembers(key) / .sismember(key, member) セットの要素数、メンバーの取得、またはメンバーかどうかの判定
.zadd(key, member_scores) / .zrem(key, member) ソート済みセットのメンバーを追加 / 削除
.zcard(key) ソート済みセットのメンバー数を取得
.zrange(key, start=0, stop=-1, with_scores=False) 位置に基づいてメンバーを取得
.zrangebyscore(key, min_score='-inf', max_score='+inf', with_scores=False) スコアに基づいてメンバーを取得

.publish(...)

Redis チャネルにメッセージをパブリッシュし、メッセージを受信した購読者数を返します。.pub(...) はそのエイリアスです。

1
subscriber_count = db.publish('events', 'hello')

拡張メソッド

メソッド 説明
.eval(lua_script, key_count, *args) Lua スクリプトを実行し、戻り値をデコード
.push_limit(key, value, limit) 左側からプッシュした後、リストを指定された長さに制限
.get_pattern(pattern) マッチするキーと値を取得し、{key: value} を返す
.delete_pattern(pattern) マッチするすべてのキーを削除
.hget_pattern(key, pattern) マッチするハッシュフィールドと値を取得
.lock(lock_key, lock_value, max_lock_time) SET EX NX を使用してロックを取得
.extend_lock_time(lock_key, lock_value, max_lock_time) ロック保持者を検証後、有効期限を延長
.unlock(lock_key, lock_value) ロック値が一致する場合のみロックを解放