您的位置:首页 > 数据库 > Redis

微信公众号开发应用redis案例一则

2018-01-10 15:05 239 查看
业务中有一个场景是需要记录公众号中48小时内活跃过的用户,以便我们可以给他们推送客服消息。这个适用场景如下:点击打开链接



需要记录的事件有:关注、发消息、点击菜单。所以思路就是每次用户触发这些事件的时候,微信服务器会给我们服务器发消息。这个时候可以记录当前时间,并以userId为key存储到redis中。要想在Yii框架中使用redis,需要在web.php中配置一下:

'wechat_active_time_redis' = [
'class' => 'yii\redis\Connection',
'hostname' => '127.0.0.1',
'port' => 8888,
'database' => 5,
]


下面介绍下Yii框架下要实现这个功能所要用到的redis知识。

Yii框架执行redis命令代码如下:

Yii::$app->wechat_active_time_redis->executeCommand('SET', [$user_id, time(), 'EX', 47 * 60 *60]);


这段代码的含义就是在redis中执行如下命令:set 78952 time(当前时间戳) EX expire(过期时间)。就是在redis中增加一条记录,以user_id为key,以当前时间戳为value,EX表示过期时间单位为秒,最后一个参数为具体过期时间。
redis中的命令可以在如下链接中查看:redis命令





这段代码执行的结果可以在redis中查看到:这就表明,用户id为783239的用户,在时间戳为1515565250的时间触发了这个动作。这条记录会被保存47小时。redis中记录过期后,redis会有两种清除机制。一种是主动清除,就是起一个定时任务,每十秒中扫描一次,查看是否有过期记录,如果有就删除。一种是被动清除,仅当记录被访问的时候,检查是否过期。



要获取reids中所存储的相关记录可以使用keys命令。

Yii::$app->wechat_active_time_redis->executeCommand('KEYS', ['*']);


这段代码就等于执行了如下命令:keys * 

最后介绍一下hset和hget的命令:

比如:hset user 1 25, 三个参数分别为:key, field, value. 可以理解为在redis中创建了一个名字为user的hash表,hash表中存在一对键值对,key为1,value为25,在user这张hash表中可以插入多条记录,比如再执行:hset user 2 26.

同样的使用hget可以选择某个hash表中的某个字段。使用hkeys可以把某个hash表中所有的字段打印出来:



注意:hset不能针对field去设置过期时间,只能根据key,也就是说,时间到了,整个hash表都会被删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: