如何在PHP/Laravel中使用Memcached存储与检索数据?
在Laravel中使用Memcached实现缓存操作
先确认配置
首先确保Laravel已经配置好Memcached驱动:
- 在
.env文件中设置CACHE_DRIVER=memcached - 检查
config/cache.php中的memcached配置,确保主机、端口等信息和你的Memcached服务匹配:
'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'options' => [ // 可添加Memcached扩展的额外配置选项 ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => 100, ], ], ],
1. 存储数据
Laravel的Cache facade提供多种存储方式:
- 带过期时间存储:
put方法,第三个参数为有效期分钟数 - 永久存储:
forever方法,除非手动删除否则一直保留 - 仅当键不存在时存储:
add方法,返回布尔值表示存储是否成功
// 存储用户数据,有效期60分钟 $user = User::find(1); Cache::put('user:1', $user, 60); // 永久存储站点全局设置 $settings = SiteSetting::all(); Cache::forever('site_settings', $settings); // 仅当键不存在时存储临时验证码 $isStored = Cache::add('temp_verification_code', '123456', 10); if (!$isStored) { // 键已存在,可提示用户稍后重试 }
2. 检索数据
- 基础检索:
get方法,不存在则返回null - 带默认值检索:第二个参数设置默认值,避免处理
null - 检查键是否存在:
has方法 - 获取并删除:
pull方法,适合一次性使用的缓存数据
// 获取用户缓存,不存在则返回null $cachedUser = Cache::get('user:1'); // 获取站点设置,不存在则返回空数组 $cachedSettings = Cache::get('site_settings', []); // 检查缓存是否存在,不存在则从数据库查询后存储 if (!Cache::has('user:1')) { $user = User::find(1); Cache::put('user:1', $user, 60); } // 获取临时验证码并立即从缓存中删除 $code = Cache::pull('temp_verification_code');
3. 删除与清空缓存
- 删除单个键:
forget方法 - 清空所有缓存:
flush方法(注意:这会清除Memcached中所有数据,生产环境务必谨慎操作)
// 删除指定用户的缓存 Cache::forget('user:1'); // 清空所有缓存(生产环境慎用!会清除所有应用的缓存数据) Cache::flush();
额外技巧:标签缓存
如果需要分组管理缓存(比如批量删除某一类缓存),可以使用标签功能:
// 给用户缓存打上`users`和`profile`标签 Cache::tags(['users', 'profile'])->put('user:1', $user, 60); // 检索带标签的缓存 $cachedUser = Cache::tags(['users', 'profile'])->get('user:1'); // 删除所有`users`标签下的缓存 Cache::tags('users')->flush();
内容的提问来源于stack exchange,提问作者Gaurav Bairwa
相关产品推荐
相关产品推荐

