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

6 篇文章 0 订阅
4 篇文章 0 订阅
<?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的操作返回都会是一个数组。详细信息自行运行调试。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值