zoukankan      html  css  js  c++  java
  • redis发布订阅实现各类定时业务(优惠券过期,商品不支付自动撤单,自动收货等)

    修改redis配置文件
    找到机器上redis配置文件conf/redis.conf,新增一行  notify-keyspace-events Ex

    最后的Ex代表 监听失效的键值

    修改后效果如下图

    代码效果:

    redis.class.php类:(这里避免命名冲突,故命名Redis2)

     1 <?php
     2 class Redis2
     3 {
     4 private $redis;
     5 
     6 public function __construct($host = '127.0.0.1', $port = 6379)
     7 {
     8 $this->redis = new Redis();
     9 $this->redis->connect($host, $port);
    10 }
    11 
    12 public function setex($key, $time, $val)
    13 {
    14 return $this->redis->setex($key, $time, $val);
    15 }
    16 
    17 public function set($key, $val)
    18 {
    19 return $this->redis->set($key, $val);
    20 }
    21 
    22 public function get($key)
    23 {
    24 return $this->redis->get($key);
    25 }
    26 
    27 public function expire($key = null, $time = 0)
    28 {
    29 return $this->redis->expire($key, $time);
    30 }
    31 
    32 public function psubscribe($patterns = array(), $callback)
    33 {
    34 $this->redis->psubscribe($patterns, $callback);
    35 }
    36 
    37 public function setOption()
    38 {
    39 $this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
    40 }
    41 
    42 }

    psubscribe.php

     1 <?php
     2 require_once './Redis.class.php';
     3 $redis = new \Redis2();
     4 // 解决Redis客户端订阅时候超时情况
     5 $redis->psubscribe(array('__keyevent@0__:expired'), 'keyCallback');
     6 // 回调函数,这里写处理逻辑
     7 function keyCallback($redis, $pattern, $chan, $msg)
     8 {
     9     echo "Pattern: $pattern\n";
    10     echo "Channel: $chan\n";
    11     echo "Payload: $msg\n\n";
    12     //keyCallback为订阅事件后的回调函数,这里写业务处理逻辑,
    13     //比如前面提到的商品不支付自动撤单,这里就可以根据订单id,来实现自动撤单
    14 }

    index.php

    1 <?php
    2 require_once './Redis.class.php';
    3 $redis = new \Redis2();
    4 $order_id = 123;
    5 //设置一个时间为10秒的redis值
    6 $redis->setex('order_id',10,$order_id);
  • 相关阅读:
    Maven仓库详解
    Maven镜像配置
    使用spring的jdbcTemplate-----用JDBC模板查询数据库
    struts2+spring的两种整合方式
    Spring 中设置依赖注入
    Struts_json插件配置参数
    String、StringBuffer与StringBuilder之间区别
    有关collection中的一些数据结构
    MyBatis的foreach语句详解
    struts文件上传拦截器中参数的配置(maximumSize,allowedTypes ,allowedExtensions)问题
  • 原文地址:https://www.cnblogs.com/liu-bear/p/11285147.html
Copyright © 2011-2022 走看看