腳本開發 / 連接器對象 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 | |
.query(...) 不轉換 redis-py 的返回值,字符串結果通常為 bytes。實際操作時可以按數據格式轉換:
| Python | |
|---|---|
1 2 3 4 5 6 7 8 9 10 | |
.run(...)
按 redis-py 的方法名調用客户端方法,簽名為 .run(command, *args, **kwargs)。例如:
| 示例 | |
|---|---|
1 | |
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 | |
擴展方法
| 方法 | 説明 |
|---|---|
.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) |
僅在鎖值匹配時釋放鎖 |