使用dcloud全家桶开发公众号H5系统

云函数缓存机制实现

小韦云科技-区块链+小程序+公众号+商城+分销+直播+企业官网+外贸电商-为您提供优质的开发服务-电话/微信联系:18123611282

由于云函数每次运行完都会注销,不像其它后端(如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了

本文由小韦云原创,转载请注明出处:https://bctos.cn/doc/18/1964,否则追究其法律责任

关键词:云函数 缓存

广告位招商