本站资源收集于互联网,不提供软件存储服务,每天免费更新优质的软件以及学习资源!

LaravelRedis连接:同一个配置_多个实例是否真的共享?

网络教程 app 1℃

LaravelRedis连接同一个配置_多个实例是否真的共享

laravel redis连接:同一个配置,多个实例是否共享?

本文探讨Laravel框架下Redis连接的共享与独立性问题。在使用Laravel和Redis时,开发者可能会发现,即使通过配置文件获取相同的连接配置,多个实例之间仍然存在关联,一个实例的操作会影响其他实例。

问题描述:

在Laravel 5.4.17环境(使用Predis 1.1.7驱动,PHP 5.6.13,Redis server 2.6.10),通过Redis::connection(‘config1’)获取名为’config1’的Redis连接。代码如下:

‘config1’ => [ ‘host’ => ‘xx’, ‘password’ => ‘xx’, ‘port’ => ‘xx’, ‘database’ => 2],$a = Redis::connection(‘config1’);$b = Redis::connection(‘config1’);$b->select(3);$a->set(‘test1’, 1); // ‘test1’ 存储在数据库3,而非预期的数据库2

预期$b->select(3)仅影响$b,但实际上$a也被切换到数据库3。

问题分析:

Laravel框架的Illuminate\Support\Facades\Redis通过getFacadeAccessor方法返回Redis字符串,最终由Illuminate\Redis\RedisManager类管理连接。RedisManager类的connection方法会在第一次解析后缓存相同名称的连接。后续请求相同名称的连接时,直接返回缓存实例,而非创建新的实例。因此,$a和$b指向同一个Redis连接实例,$b->select(3)改变了数据库选择,自然影响$a。

解决方案:

为了避免共享连接实例,应避免使用缓存的实例。 Laravel的resolve方法可以创建新的连接,确保连接的独立性。直接克隆对象(clone)不可靠,因为Redis连接对象可能阻止克隆或导致其他问题。因此,使用resolve创建新连接是最可靠的方案。

通过resolve方法创建独立的Redis连接实例,可以有效避免多个实例之间数据干扰的问题,从而确保应用程序的正确性和稳定性。

以上就是Laravel Redis连接:同一个配置,多个实例是否真的共享?的详细内容,更多请关注范的资源库其它相关文章!

转载请注明:范的资源库 » LaravelRedis连接:同一个配置_多个实例是否真的共享?

喜欢 (0)