如何利用 Redis 来存取小程序中的 formid

业务场景

在项目中有这样一个需求,小程序端将用户的formid传递到服务端,服务端做保存,这样可以根据系统的需要做一个模版消息通知。每个用户可能有多个formid,系统中存在大量的用户。如何去存取该formid呢?

初步构想

1.使用redis中的list数据类型,当作队列,每一个用户一个list,list存用户的formid。
2.为了防止部分fromid的失效,我们在取的时候使用先进先出的方式。这样保证用户的formid是最先存取的,尽可能的保证formid满足小程序7天有效的特点。

伪代码

$userId = 1;
$formId = 'dsfasdfas123132weqweqw';
$redis = new Redis();
$redis->connect('127.0.0.1',6379);
// 存formid
$redis->lpush('wx:formId:user'.$userId,$fromId);
// 取formid
$redis->rpop('wx:formId:user'.$userId);

问题思考

1.针对上面的思路,在项目中也实践过,项目前期倒是没什么问题出现,但是到后期针对用户的大量formid存储,发现后期在发送模版消息时,很多formid已经失效。
2.针对用户量的一个思考,如果用户量小,可以一个用户一个list,如果上万,十万,百万,这样的用户量,岂不是得存万,十万,百万的list了。

讨论数量: 4

存百万list大概也就几百兆内存占用,一台redis服务器起码16G内存把,完全不用担心

1个月前 评论
奕鹏 (楼主) 1个月前

7天的有效期你无法保证

更重要的是微信又修改规则了formid发模板消息的方法要失效了

1个月前 评论
奕鹏 (楼主) 1个月前
PHPer技术栈

小程序通 submit 点击事件获 formid 在安卓和 IOS 是不一样的,安卓系统中为 13 位时间戳,而 IOS 系统中为 32 位字符串

1个月前 评论
奕鹏 (楼主) 1个月前

每个用户一个zset 有序集合, score 存过期时间,这样就不会取到过期的formid 了

1个月前 评论
奕鹏 (楼主) 1个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!