请教GatewayWorker使用Redis 说明

skygw

求教,如何在GatewayWorker安装河使用Redis组件呢,看了下Workman教程里面的Redis章节是空白的,而Workman/Redis 内容貌似和单纯使用Redis不太一样。
我只想在多客户端进程上共享数据,其他功能也用不到。感谢!

1648 2 0
2个回答

walkor 打赏

装个redis扩展,然后onWorkerStart里实例化下后面就直接用了。

class Events
{
    /**
     * 新建一个类的静态成员,用来保存redis实例
     */
    public static $redis = null;

    /**
     * 进程启动后初始化redis连接
     */
    public static function onWorkerStart($worker)
    {
        self::$redis = new Redis();
        self::$redis->connect('127.0.0.1', 6379);
    }

   public static function onMessage($client_id, $message)
   {
       self::$redis->get('test');
   }

}
  • skygw 2022-11-02

    感谢感谢

  • skygw 2022-11-02

    另外再请教下,哪里可以安装这个Redis扩展呢,一楼链接里的下回来不知道放在哪里

  • walkor 2022-11-02

    百度下php 安装redis扩展,很多教程

  • skygw 2022-11-05

    感谢,已经正常装上并使用Redis了。
    但有个新问题,貌似Redis只能存储string,那如果遇到那种自定义类型的多维数组怎么更灵活来多线程同步数据呢?
    网上有说用json_encode来序列化,但是使用decode反向操作的时候,数组中的Object对象就无效了。
    求助各位高人指点一二,感谢!

  • skygw 2022-11-05

    比如静态数组的数据是这样的:
    class Events{
    public static $tableList;
    public static $redis;

    public static function onWorkerStart($businessWorker){
    self::$redis = new Redis();
    self::$redis->connect('127.0.0.1',6379);

    //初始化tableList
    for($i=0;$i<10;$i++){
    self::$tableList[]=new XXX();
    }

    //存入Redis
    self::$redis->set('tableList',json_encode(self::$tableList));

    //取出Redis数据:
    self::$tableList=json_decode(self::$redis->get('tableList'));

    //这时候使用 self::$tableList[0]->xxx()就失效了
    }

    }

  • Gin 2022-11-05

    用 serialize unserialize

  • skygw 2022-11-05

    感谢楼上的朋友,学习了。

年代过于久远,无法发表回答
×
🔝