跳转至

脚本开发 / 简易缓存 DFF.CACHE

DataFlux Func 内置了基于 Redis 的简易缓存功能DFF.CACHE。 对于一些有数据缓存需求,同时需求并不复杂的场景,可以直接使用本内置缓存功能。

存储功能为Scope-Key-Value结构,不同命名空间下,允许存在相同的 Key。

写入 / 读取数据不会自动自动序列化/反序列化,使用时需要在脚本中自行处理

DFF.CACHE.set(...)

DFF.CACHE.set(...)方法用于建立缓存,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
value str/int/float 必须 数据
scope str 当前脚本名 命名空间
expire int None 过期时间。
单位:秒
None表示永不过期
not_exists bool False 是否仅在数据不存在时写入

示例如下:

Python
1
2
DFF.CACHE.set('user:count', 100, scope='stat')
# 此时缓存值为:'100'

DFF.CACHE.get(...)

DFF.CACHE.get(...)方法用于获取缓存,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
DFF.CACHE.set('user:count', 100, scope='stat')
DFF.CACHE.get('user:count', scope='stat')
# '100'

DFF.CACHE.getset(...)

DFF.CACHE.getset(...)方法用于设置缓存的同时,获取之前的值,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
value str/int/float 必须 数据
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
4
DFF.CACHE.set('user:count', 100, scope='stat')
DFF.CACHE.getset('user:count', 200, scope='stat')
# '100'
# 此时缓存值为:'200'

DFF.CACHE.expire(...)

DFF.CACHE.expire(...)方法用于设置缓存的过期时间,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
expire int None 过期时间。
单位:秒
None表示永不过期
scope str 当前脚本名 命名空间

示例如下:

Python
1
DFF.CACHE.expire('user:count', 3600, scope='stat')

DFF.CACHE.delete(...)

DFF.CACHE.delete(...)方法用于删除存储的数据,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
scope str 当前脚本名 命名空间

示例如下:

Python
1
DFF.CACHE.delete('user:count', scope='stat')

DFF.CACHE.incr(...)

DFF.CACHE.incr(...)方法用于对缓存值增加步进,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
step int 1 步进值
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
DFF.CACHE.incr('user:count', scope='stat')
# 此时缓存值为:'2'

DFF.CACHE.hkeys(...)

DFF.CACHE.hkeys(...)方法用于获取哈希结构字段列表,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
pattern str "*" 字段匹配模式
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
DFF.CACHE.hmset('user:001', { 'name': 'Tom', 'city': 'Beijing' }, scope='cachedInfo')
DFF.CACHE.hkeys('user:001', scope='userCache')
# ['name', 'city']

DFF.CACHE.hget(...)

DFF.CACHE.hget(...)方法用于获取哈希结构中一个/多个/全部字段值,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
field str/list None 字段名/字段名列表
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
4
5
6
7
DFF.CACHE.hmset('user:001', { 'name': 'Tom', 'city': 'Beijing' }, scope='cachedInfo')
DFF.CACHE.hget('user:001', scope='cachedInfo')
# {'name': 'Tom', 'city': 'Beijing'}
DFF.CACHE.hget('user:001', ['name', 'city'], scope='cachedInfo')
# {'name': 'Tom', 'city': 'Beijing'}
DFF.CACHE.hget('user:001', 'name', scope='cachedInfo')
# 'Tom'

DFF.CACHE.hset(...)

DFF.CACHE.hset(...)方法用于设置哈希结构中的某个字段值,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
field str 必须 字段名
value str/int/float 必须 数据
scope str 当前脚本名 命名空间
not_exists bool False 是否仅在字段不存在时写入

示例如下:

Python
1
2
DFF.CACHE.hset('user:001', 'name', 'Tom', scope='cachedInfo')
# 此时缓存值为:{ 'name': 'Tom' }

DFF.CACHE.hmset(...)

DFF.CACHE.hmset(...)方法用于设置哈希结构中的多个字段值,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
obj dict 必须 数据
scope str 当前脚本名 命名空间
Python
1
2
DFF.CACHE.hmset('user:001', { 'name': 'Tom', 'city': 'Beijing' }, scope='cachedInfo')
# 此时缓存值为:{ 'name': 'Tom', 'city': 'Beijing' }

DFF.CACHE.hincr(...)

DFF.CACHE.hincr(...)方法用于对哈希结构中的字段增加步进,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
field str 必须 字段名
step int 1 步进值
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
DFF.CACHE.hincr('user:001', 'signCount', scope='cachedInfo')
# 此时缓存值为:{ 'signCount': '2' }

DFF.CACHE.hdel(...)

DFF.CACHE.hdel(...)方法用于删除哈希结构中的某个字段,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
field str 必须 字段名
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
DFF.CACHE.hmset('user:001', { 'name': 'Tom', 'city': 'Beijing' }, scope='cachedInfo')
DFF.CACHE.hdel('user:001', 'city', scope='cachedInfo')
# 此时缓存值为:{ 'name': 'Tom' }

DFF.CACHE.lpush(...)

DFF.CACHE.lpush(...)方法用于从左侧向列表结构添加元素,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
value str/int/float 必须 数据
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
DFF.CACHE.lpush('userQueue', '001', scope='queue')
DFF.CACHE.lpush('userQueue', '002', scope='queue')
# 此时缓存值为:[ '002', '001' ]

DFF.CACHE.rpush(...)

DFF.CACHE.rpush(...)方法用于从右侧向列表结构添加元素,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
value str/int/float 必须 数据
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
DFF.CACHE.rpush('userQueue', '001', scope='queue')
DFF.CACHE.rpush('userQueue', '002', scope='queue')
# 此时缓存值为:[ '001', '002' ]

DFF.CACHE.lpop(...)

DFF.CACHE.lpop(...)方法用于从左侧从列表结构中弹出元素,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
4
DFF.CACHE.lpush('userQueue', '001', scope='queue')
DFF.CACHE.lpush('userQueue', '002', scope='queue')
DFF.CACHE.lpop('userQueue', scope='queue')
# '002'

DFF.CACHE.rpop(...)

DFF.CACHE.rpop(...)方法用于从右侧从列表结构中弹出元素,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
4
DFF.CACHE.lpush('userQueue', '001', scope='queue')
DFF.CACHE.lpush('userQueue', '002', scope='queue')
DFF.CACHE.rpop('userQueue', scope='queue')
# '001'

DFF.CACHE.llen(...)

DFF.CACHE.llen(...)方法用于获取列表结构元素数量,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
4
DFF.CACHE.lpush('userQueue', '001', scope='queue')
DFF.CACHE.lpush('userQueue', '002', scope='queue')
DFF.CACHE.llen('userQueue', scope='queue')
# 2

DFF.CACHE.lrange(...)

DFF.CACHE.lrange(...)方法用于获取列表结构内元素列表(不弹出),参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
start int 0 起始索引(包含)
stop int -1 结束索引(包含,-1表示最后一个)
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
4
5
6
7
8
DFF.CACHE.rpush('userQueue', '001', scope='queue')
DFF.CACHE.rpush('userQueue', '002', scope='queue')
DFF.CACHE.rpush('userQueue', '003', scope='queue')
DFF.CACHE.rpush('userQueue', '004', scope='queue')
DFF.CACHE.lrange('userQueue', 0, 1, scope='queue')
# [ '001', '002' ]
DFF.CACHE.lrange('userQueue', 0, -1, scope='queue')
# [ '001', '002', '003', '004' ]

DFF.CACHE.ltrim(...)

DFF.CACHE.ltrim(...)方法用于从左侧开始,保留列表结构内元素,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名
start int 必须 起始索引(包含)
stop int 必须 结束索引(包含,-1表示最后一个)
scope str 当前脚本名 命名空间

示例如下:

Python
1
2
3
4
5
6
DFF.CACHE.rpush('userQueue', '001', scope='queue')
DFF.CACHE.rpush('userQueue', '002', scope='queue')
DFF.CACHE.rpush('userQueue', '003', scope='queue')
DFF.CACHE.rpush('userQueue', '004', scope='queue')
DFF.CACHE.ltrim('userQueue', 0, 1, scope='queue')
# 此时缓存值为:[ '001', '002' ]

小技巧:限制队列长度(回卷)

Python
1
2
3
4
5
6
limit = 3
for i in range(100):
    DFF.CACHE.lpush('userQueue', i, scope='queue')
    DFF.CACHE.ltrim('userQueue', 0, limit, scope='queue')

# 此时缓存值为:[ '99', '98', '97' ]

DFF.CACHE.rpoplpush(...)

DFF.CACHE.rpoplpush(...)方法用于在一个列表结构右侧弹出元素,同时向另一个列表结构左侧推入元素,同时返回此元素,参数如下:

参数 类型 必须/默认值 说明
key str 必须 键名(来源)
dest_key str key相同 键名(目标)
scope str 当前脚本名 命名空间(来源)
dest_scope str scope相同 命名空间(目标)

示例如下:

Python
1
2
3
4
5
6
7
8
DFF.CACHE.lpush('userQueue', '001', scope='queue')
DFF.CACHE.lpush('userQueue', '002', scope='queue')
DFF.CACHE.lpush('userQueue', '003', scope='queue')

DFF.CACHE.rpoplpush('userQueue', 'userQueue2', scope='queue')
# '001'
# 此时 userQueue 缓存值为:[ '003', '002' ]
# 此时 userQueue2 缓存值为:[ '001' ]

小技巧:队列滚动

Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
DFF.CACHE.lpush('userQueue', '001', scope='queue')
DFF.CACHE.lpush('userQueue', '002', scope='queue')
DFF.CACHE.lpush('userQueue', '003', scope='queue')
# 此时缓存值为:[ '003', '002', '001' ]

DFF.CACHE.rpoplpush('userQueue', scope='queue')
# '001'
# 此时缓存值为:[ '001', '003', '002' ]

DFF.CACHE.rpoplpush('userQueue', scope='queue')
# '002'
# 此时缓存值为:[ '002', '001', '003' ]