Laravel配置双Memcached服务器(会话/缓存分离)报错求助
Laravel配置双Memcached分别存储Session和Cache的问题解决
方案可行性说明
这个方案完全可行,Laravel支持通过多缓存存储实例实现Session和Cache分离使用不同的Memcached服务器,你当前的错误是因为Session驱动的配置方式不正确。
错误原因
你在.env中设置SESSION_DRIVER=memcachedz2,Laravel会将其识别为Session驱动类型,但Laravel原生并不存在名为memcachedz2的Session驱动,因此抛出Driver [memcachedz2] not supported错误。
解决步骤
1. 保留缓存配置(config/cache.php)
你在config/cache.php中定义的两个Memcached存储实例是正确的,无需修改:
'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'options' => [ // Memcached::OPT_CONNECT_TIMEOUT => 2000, ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => 100, ], ], ], 'memcachedz2' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'options' => [ // Memcached::OPT_CONNECT_TIMEOUT => 2000, ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST1', '127.0.0.1'), 'port' => env('MEMCACHED_PORT1', 11211), 'weight' => 100, ], ], ],
2. 调整Session配置
需要让Session使用cache驱动,并指定使用你定义的memcachedz2缓存实例:
方式一:通过.env配置
修改.env文件中的Session相关配置:
CACHE_DRIVER=memcached CACHE_PREFIX=areviwez_cache SESSION_DRIVER=cache SESSION_CACHE_STORE=memcachedz2 MEMCACHED_HOST=35.192.75.119 MEMCACHED_PORT=11211 MEMCACHED_HOST1=127.0.0.1 MEMCACHED_PORT1=11211
方式二:直接修改config/session.php
打开config/session.php,修改driver和store参数:
'driver' => env('SESSION_DRIVER', 'cache'), 'store' => env('SESSION_CACHE_STORE', 'memcachedz2'),
3. 生效配置
执行以下命令清除配置缓存,确保新配置生效:
php artisan config:clear
验证方法
- 可以分别向Cache和Session存入测试数据:
// 存入Cache(使用memcached实例) Cache::put('test_cache', 'cache_value', 60); // 存入Session(使用memcachedz2实例) session(['test_session' => 'session_value']); - 登录对应的Memcached服务器,使用
stats items等命令查看数据是否分别存储到了对应的服务器中。
内容的提问来源于stack exchange,提问作者Ahmadz Issa
相关产品推荐
相关产品推荐

