V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liguoshu
V2EX  ›  PHP

laravel 中的 Cache::tags()->put();缓存的键名问题

  •  
  •   liguoshu · 2019-11-06 15:00:49 +08:00 · 4267 次点击
    这是一个创建于 1876 天前的主题,其中的信息可能已经有所发展或是发生改变。

    $cacheName = self::CACHE_ACTIVITY.'_'.$bannerId .$size . $page; //键名 CACHE_ACTIVITY_131201

       if (Cache::tags([self::CACHE_ACTIVITY])->has($cacheName))  
            return Cache::tags([self::CACHE_ACTIVITY])->get($cacheName);  //这里是获取
            
    Cache::tags([self::CACHE_ACTIVITY])->put($cacheName,$res,config('biz.cache_activity_detail'));//不存在时存数据
    

    使用 tags 时(不使用 tags 没有这种情况),除了前缀还莫名的拼接了中间一段字符串 存储后的键名为:bosigou_cache:d06a81fc3f9472465c38fd83d93c33b071c084bf:CACHE_ACTIVITY_131201 而我需要的是:bosigou_cache:CACHE_ACTIVITY_131201 这种,想问一下各位大佬,为啥会增加中间这一段字符串

    4 条回复    2019-11-06 22:42:13 +08:00
    javalaw2010
        1
    javalaw2010  
       2019-11-06 16:21:59 +08:00
    没看源码,无责任猜测一下,中间那段 hash 应该是 tag 的 hash,如果框架要按照 tag 做什么操作,比如清空该 tag 下的所有 cahce,可以直接以 bosigou_cache:{$hash}:*的方式直接清空
    javalaw2010
        2
    javalaw2010  
       2019-11-06 16:53:25 +08:00
    刚刚跑去看了下源码,在 RedisTaggedCache 里面 pushKeys 方法可以看到这部分的实现:
    ```php
    protected function pushKeys($namespace, $key, $reference)
    {
    $fullKey = $this->store->getPrefix().sha1($namespace).':'.$key;

    foreach (explode('|', $namespace) as $segment) {
    $this->store->connection()->sadd($this->referenceKey($segment, $reference), $fullKey);
    }
    }
    ```
    框架会为每个 tag 分配一个 tagId,然后多个 tag 的 ID 以“|”字符 implode 成 namespace,生成 namespace 的方法注释是:
    Get a unique namespace that changes when any of the tags are flushed.所以这么做的理由应该跟上面猜测的一致
    liguoshu
        3
    liguoshu  
    OP
       2019-11-06 22:42:00 +08:00 via iPhone
    @javalaw2010 我也看了底层,我的想法是在同一台服务器的不同框架里,去删除这个键。感觉是很麻烦。现在直接调用 API 清除。😂
    liguoshu
        4
    liguoshu  
    OP
       2019-11-06 22:42:13 +08:00 via iPhone
    @javalaw2010 谢谢老哥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3010 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:58 · PVG 21:58 · LAX 05:58 · JFK 08:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.