由于云函数每次运行完都会注销,不像其它后端(如PHP)可以使用session或者文件缓存数据。理论上自己部署redis也是用来缓存数据,但redis不可能部署到云函数的内网中,走外网的话性能肯定大打折扣。因此只能使用云数据库来缓存数组,虽然这会增加数据库的访问次数,但也是没办法的事,好在云数据库的性能比较高,不像mysql那样会成为性能瓶颈
数据库就用之前建好的bctos-cache,它只有三个字段:键名(key),缓存内容(value)和过期时间(expired)
其中为了能保存对象数据,所有保存的数据在入库前先经过 JSON.stringify, 出库时会使用 JSON.parse 进行还原。所以不建议直接查询bctos-cache,而是调用云函数处理。
为方便使用,我们直接在APP.vue里封装了cache方法
async function cache(key, value, expired) {
console.log('缓存的参数', {
key,
value,
expired
});
let res = await uniCloud.callFunction({
name: 'bctos-common',
data: {
action: "cache",
key,
value,
expired
}
})
console.log('缓存的结果', res);
if (typeof(res.result.data) == "undefined") {
return res.result
} else {
return res.result.data
}
}
可以这样方便的调用
let app = getApp();
//写入缓存,并且长期有效
app.cache('test','123456')
//写入缓存,而且只缓存300秒,到期自动删除
app.cache('test','123456', 300)
//读取缓存
let res = await app.cache('test')
//删除缓存, value设为null表示删除
app.cache('test', null)
如果是在云函数中使用缓存,建议把上面的cache方法复制到云函数中使用
有了这缓存的功能,后面就可以用来缓存access_token和ticket了
2 个评论
要回复文章请先登录或注册
8***@qq.com
秋峰