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

业务中有一个场景是需要记录公众号中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表都会被删除。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值