跳轉至

腳本開發 / 連接器對象 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) 設置一個字段或字段映射
.hmset(key, field_values) 批量設置字段
.hsetnx(key, field, value) 僅在字段不存在時設置
.hget(key, field) / .hgetall(key) 獲取並解碼字段值
.hmget(key, fields) 批量獲取,返回 {field: value}
.hstrlen(key, field) / .hstrlenall(key) 獲取一個或全部字段值的字節長度
.hincr(key, field) / .hincrby(key, field, step=1) / .hincrbyfloat(key, field, step=1) 遞增字段數值
.hdel(key, field) 刪除一個字段或字段列表

列表、集合和有序集合

方法 説明
.lpush(key, value) / .rpush(key, value) 從左側 / 右側壓入一個值或值列表
.lpop(key, count=None) / .rpop(key, count=None) 從左側 / 右側彈出一個或多個值
.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) 添加 / 刪除一個成員或成員列表
.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) 僅在鎖值匹配時釋放鎖