You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何为特定全局缓存键禁用应用缓存前缀?

解决Laravel微服务中全局缓存键取消前缀的问题

方案一:新增专门的全局缓存Store

这是最符合Laravel设计规范的方式,通过配置一个不带前缀的缓存Store,专门处理跨服务共享的全局缓存项。

  1. 修改config/cache.php,新增一个名为global的Store配置:
'global' => [
    'driver' => env('CACHE_DRIVER', 'redis'), // 和主缓存保持相同驱动(比如Redis)
    'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), // 复用主缓存的连接配置
    'prefix' => '', // 关键:设置为空字符串,取消自动前缀
],
  1. 使用时指定该Store进行缓存操作:
// 生成的缓存键就是纯字符串:campaigns:global:discovery:en
Cache::store('global')->remember('campaigns:global:discovery:en', 3600, fn() => 'TEST');

优势:边界清晰,全局缓存和普通缓存完全分离,不会影响其他业务的缓存操作;支持Laravel缓存的所有方法(remember、put、forget等)。

方案二:封装全局缓存工具类

如果不想新增Store,可以直接封装一个工具类,绕过Laravel的前缀处理逻辑,直接调用缓存驱动的底层方法。

  1. 创建app/Helpers/GlobalCache.php工具类:
namespace App\Helpers;

use Illuminate\Support\Facades\Cache;

class GlobalCache
{
    /**
     * 全局缓存的remember方法
     */
    public static function remember(string $key, int|\DateTimeInterface $ttl, callable $callback)
    {
        return Cache::getStore()->remember($key, $ttl, $callback);
    }

    /**
     * 获取全局缓存
     */
    public static function get(string $key, mixed $default = null)
    {
        return Cache::getStore()->get($key, $default);
    }

    /**
     * 设置全局缓存
     */
    public static function put(string $key, mixed $value, int|\DateTimeInterface $ttl)
    {
        return Cache::getStore()->put($key, $value, $ttl);
    }

    /**
     * 删除全局缓存
     */
    public static function forget(string $key)
    {
        return Cache::getStore()->forget($key);
    }
}
  1. 使用时直接调用工具类:
GlobalCache::remember('campaigns:global:discovery:en', 3600, fn() => 'TEST');

优势:调用方式接近原生Cache门面,无需切换Store;适合只需要少数缓存方法的场景。

注意事项

  • 不要修改默认缓存Store的prefix配置,否则会导致所有缓存项都失去前缀,破坏微服务各自的缓存隔离性。
  • 如果使用Redis作为缓存驱动,确保全局缓存Store和各微服务的主缓存使用同一个Redis实例/数据库,才能实现跨服务共享。

内容的提问来源于stack exchange,提问作者Peter Fox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:10:28