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