颖想家

所谓幸福就是你在,我在,你一直在,我一直在

微信小程序数据缓存wx.setStorage本地储存设置过期时间

根据官方给的文档资料(https://developers.weixin.qq.com/miniprogram/dev/api/storage/wx.setStorageSync.html)数据缓存wx.setstoragesync和wx.setstorage微信默认的机制是设置了无限长的过期时限。同一个微信用户,同一个小程序 storage 上限为 10MB。localStorage 以用户维度隔离,同一台设备上,A 用户无法读取到 B 用户的数据。

所以如果我们只想让数据存储24小时后就再次获取新的数据,我们可以参考诸如 Cookie 这样的缓存机制,我们自己创建一个过期时间。在设置某缓存数据 A 的时候,我们可以同时设置一个过期时间值的数据缓存 B,在下一次打开该页面的时候,不仅需要判断数据 A 是否存在,也需要比较 B 与当前时间,如果符合要求则使用本地缓存的数据 A,否则则重新拉取数据并刷新 A 和 B。自定义函数代码如下:

    getNew: function(id) {

        let res = 0;

        let timestamp = Date.parse(new Date());

        let expiration = timestamp + 24*60*60*1000; //缓存24小时

        let data_expiration = wx.getStorageSync('data_expiration_' + id);

        if (data_expiration) {

            if (timestamp > data_expiration) {

                wx.removeStorageSync('data_expiration_' + id); //清除指定缓存

                wx.setStorageSync('data_expiration_' + id, expiration);

                res = 1;

            } 

        } else {

            wx.setStorageSync('data_expiration_' + id, expiration);

            res = 1;

        }

        return res;

    }

wx.setstoragesync和wx.setstorage的区别

以Sync(同步,同时)结尾的都是都是同步缓存,二者的区别是:异步不会阻塞当前任务,同步缓存直到同步方法处理完才能继续往下执行。

通俗来讲,异步就是不管保没保存成功,程序都会继续往下执行,同步是等保存成功了,才会执行下面的代码。

使用异步性能会更好;而使用同步,数据会更安全。

缓存可以跨页面获取,留在程序中。也可以通过代码清除缓存。函数如下:

wx.clearStorageSync();//清除所有缓存

wx.removeStorageSync('key');//清除指定缓存


发表留言