凡星
凡星
  • 发布:2021-04-27 16:15
  • 更新:2021-09-14 20:48
  • 阅读:1229

公众号开发(十)云函数缓存机制实现

分类:uni-app

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

0 关注 分享

要回复文章请先登录注册

8***@qq.com

8***@qq.com

怎么缓存数组尼
2021-09-14 20:48
秋峰

秋峰

很棒 学习了!
2021-08-27 17:39