跳转至

脚本开发 / 连接器对象 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) 仅在锁值匹配时释放锁