<?php
/**
* Created by PhpStorm.
* User: able.yang
* Date: 2019/5/18
* Time: 11:23 AM
*/
class RedisHa
{
protected static $name = 'redis_ha';
protected static $connections = [];
protected static function init()
{
$hosts = explode(',', env('REDIS_HA_HOSTS'));
$databases = explode(',', env('REDIS_HA_DATABASES'));
foreach ($hosts as $index => $host) {
$redisManage = new \Illuminate\Redis\RedisManager(config('database.redis.client'), [
'default' => [
'host' => $host,
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => $databases[$index],
]
]);
self::$connections[$index] = $redisManage->connection();
}
}
public static function count()
{
if (empty(self::$connections)) {
self::init();
}
return count(self::$connections);
}
public static function connection($index)
{
if (empty(self::$connections)) {
self::init();
}
if (!isset(self::$connections[$index]))
throw new Exception('未找到redis连接');
return self::$connections[$index];
}
public static function __callStatic($method, $parameters)
{
if (empty(self::$connections)) {
self::init();
}
$result = [];
foreach (self::$connections as $connection) {
$result[] = $connection->{$method}(...$parameters);
}
return $result;
}
}
这里应该有个全局分配redis的方法,即加密后的int数值整出所有redsi服务器的数量
$index= crc32($openid) % count(explode(',', array($redis_host)));
代码中调用
#$index 指定redis连接键
$hash_set = Redis::connection($index)->hset('hash:key', 1204752,json_encode(['name'=>'小锦鲤']));
使用这个扩展类之后,所有对redis的操作返回都会是一个数组。详细信息自行运行调试。