求教,如何在GatewayWorker安裝河使用Redis組件呢,看了下Workman教程里面的Redis章節(jié)是空白的,而Workman/Redis 內(nèi)容貌似和單純使用Redis不太一樣。
我只想在多客戶端進(jìn)程上共享數(shù)據(jù),其他功能也用不到。感謝!
裝個(gè)redis擴(kuò)展,然后onWorkerStart里實(shí)例化下后面就直接用了。
class Events
{
/**
* 新建一個(gè)類的靜態(tài)成員,用來保存redis實(shí)例
*/
public static $redis = null;
/**
* 進(jìn)程啟動(dòng)后初始化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');
}
}
感謝,已經(jīng)正常裝上并使用Redis了。
但有個(gè)新問題,貌似Redis只能存儲(chǔ)string,那如果遇到那種自定義類型的多維數(shù)組怎么更靈活來多線程同步數(shù)據(jù)呢?
網(wǎng)上有說用json_encode來序列化,但是使用decode反向操作的時(shí)候,數(shù)組中的Object對(duì)象就無效了。
求助各位高人指點(diǎn)一二,感謝!
比如靜態(tài)數(shù)組的數(shù)據(jù)是這樣的:
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數(shù)據(jù):
self::$tableList=json_decode(self::$redis->get('tableList'));
//這時(shí)候使用 self::$tableList[0]->xxx()就失效了
}
}