业务场景
在项目中有这样一个需求,小程序端将用户的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了。