laravel使用redis集群,用户redis分配解决办法,以及处理redis集群中的数据

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_31648761/article/details/90317672
<?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的操作返回都会是一个数组。详细信息自行运行调试。

展开阅读全文

没有更多推荐了,返回首页