指令碼開發 / 聯結器物件 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) |
僅在鎖值匹配時釋放鎖 |