Laravel 编程中,基于 Redis 多库设计,实现多种缓存仓配置
Environment
- Lumen 5.5
- Predis 1.1
- Redis 5.0.3
Process
1、Redis 在设计上,也保留库这个概念,一般默认库索引为0,通过命令 “select [index]” 可以切换不同的库。在根目录文件下,配置 config/database.php 多个 Redis 库。
'redis' => [
'client' => 'predis',
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => 60,
],
'db1' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
'read_write_timeout' => 60,
],
'db2_usercache' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 2,
'read_write_timeout' => 60,
],
],
2、在根目录文件下,配置 config/cache.php 多个缓存仓,分别以不同的 Redis 库作为驱动。
'stores' => [
'redis' => [
'driver' => 'redis',
'connection' => env('CACHE_REDIS_CONNECTION', 'default'),
],
'redis2' => [
'driver' => 'redis',
'connection' => env('CACHE_REDIS2_CONNECTION', 'db2_usercache'),
],
],
3、根据不同的缓存需求,选择使用相对应的缓存仓。
Cache::store('redis2')->remember('cappu:user:'.$apiToken, 120, function () use ( $apiToken ) {
return DB::connection('cappu')->table('m_users')->where('api_token', $apiToken)->select('*')->first();
});
Cache::store('redis')->remember('cappu:goods:sku:'.$sku, 360, function () use ( $sku ) {
return DB::connection('cappu')
->table('m_goods')
->select('*')
->where('sku', $sku)
->where('status', 1)
->where('is_hidden', 0)
->first();
});
Conclusion
在一些开发需求情景里,会产生不同程度的缓存需求。
有一些缓存是永久性的。
有一些缓存是有时限性的,失效后会销毁。
而笔者最近遇到的情况,有一部分缓存是允许擦除的,另一部分则不允许。而且代码已经写到尾声,在方法里逐个删除释放,这是不切实际的。那最好的办法还是一次性把需要擦徐的缓存直接清空。这时候,很明显的,最好的处理办法,就是将两类缓存分开存储。
当然,这些直接用 Redis 就不用配置这么多了。只是 Laraval 已经封装好的 Cache 类库提供的方法真的很方便,就很容易信赖它了。
转载本文,请注明出处、作者。