There is no problem not worth solving, and no technology not worth learning!

In Laravel 6, when the expiration time is set, the label identifier key (tag:.$name.:key) and the standard reference key (:standard_ref) is not automatically expired

过期时间设置为 120 秒,当 2 分钟之后,再次刷新 Redis,只有 key object_local_database_object_local_cache:8900c8427a4e5d7ac70fed24623811c3b5330ddf:theme_editor_session:qVnbtdW6HjsG5clEw6j6ygedgjrP4A9EDIsY 已经被自动删除掉

1. Now store the cached data that is tagged, and have 1 tag: Theme_Editor_qvnbtdw6hjsg5clew6j6ygedgjrp4a9edisy


        return Cache::tags([
                ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId]
            )
            ->put(ThemePreviewInterface::THEME_EDITOR_SESSION_PREFIX . $sessionId, json_encode($data), ThemePreviewInterface::TTL);


After running the program, a total of 3 keys are generated, as shown in Figure 1

运行程序以后,总计生成了 3 个 key
Figure 1

object_local_database_object_local_cache:tag:theme_editor_qVnbtdW6HjsG5clEw6j6ygedgjrP4A9EDIsY:key

object_local_database_object_local_cache:63316a53e72ae936365540:standard_ref

object_local_database_object_local_cache:8900c8427a4e5d7ac70fed24623811c3b5330ddf:theme_editor_session:qVnbtdW6HjsG5clEw6j6ygedgjrP4A9EDIsY


3. The expiration time is set to 120 seconds, after 2 minutes, refresh the redis again, only the key Object_local_database_object_local_cache:8900C8427A4E5D7AC70FED246238 11c3b5330ddf:theme_editor_session:qvnbtdw6hjsg5clew6j6ygedgjrp4a9edisy has been automatically deleted. as shown in Figure 2

过期时间设置为 120 秒,当 2 分钟之后,再次刷新 Redis,只有 key object_local_database_object_local_cache:8900c8427a4e5d7ac70fed24623811c3b5330ddf:theme_editor_session:qVnbtdW6HjsG5clEw6j6ygedgjrP4A9EDIsY 已经被自动删除掉
Figure 2

4. It is equivalent to the remaining 2 redundant keys, all of which are related to labels. Decides to set the expiration time for both redundant keys when writing to the cache. Because it is Laravel’s redis cache used. The decision to set the expiration time based on Redis is implemented.


        Cache::tags([
                ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId]
            )
            ->put(ThemePreviewInterface::THEME_EDITOR_SESSION_PREFIX . $sessionId, json_encode($data), ThemePreviewInterface::TTL);
        $names = Cache::tags(ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId)->getTags()->getNames();
        var_dump($names);
        foreach ($names as $name) {
            var_dump(Cache::getPrefix() . Cache::tags(ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId)->getTags()->tagKey($name));
            var_dump(Redis::connection('cache')->command('expire', [Cache::getPrefix() . Cache::tags(ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId)->getTags()->tagKey($name), ThemePreviewInterface::TTL]));
            var_dump(Cache::getPrefix() . Cache::tags(ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId)->getTags()->tagId($name) . ':' . RedisTaggedCache::REFERENCE_KEY_STANDARD);
            var_dump(Redis::connection('cache')->command('expire', [Cache::getPrefix() . Cache::tags(ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId)->getTags()->tagId($name) . ':' . RedisTaggedCache::REFERENCE_KEY_STANDARD, ThemePreviewInterface::TTL]));
        }
        // var_dump(Cache::tags(ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId)->getTags()->getNames());
        // var_dump(Cache::getPrefix());
        exit;


5. The printing result is as follows. as shown in Figure 3

打印结果如下
Figure 3

array(1) {
  [0]=>
  string(49) "theme_editor_I37HieXlW2yzmNqWTwGsMoRu3vjivgpaGJ1T"
}
string(93) "object_local_cache:tag:theme_editor_I37HieXlW2yzmNqWTwGsMoRu3vjivgpaGJ1T:key"
bool(true)
string(71) "object_local_cache:63326932d41fb365623106:standard_ref"
bool(true)



6, 3 keys are generated in Redis, as shown in Figure 4

Redis 中生成了 3 个 key
Figure 4

object_local_database_object_local_cache:tag:theme_editor_I37HieXlW2yzmNqWTwGsMoRu3vjivgpaGJ1T:key
object_local_database_object_local_cache:63326932d41fb365623106:standard_ref
object_local_database_object_local_cache:59840c6d708feb22c6540bd14dbeb0c34bf4bbc4:theme_editor_session:I37HieXlW2yzmNqWTwGsMoRu3vjivgpaGJ1T


7. Since the expiration time is set to 120 seconds, after 2 minutes has passed, the data in Redis has been reduced from 12 to 9. The 3 keys that were previously generated have been automatically deleted. as shown in Figure 5

由于过期时间设置 120 秒,当 2 分钟过去后,Redis 中的数据从 12 条减少至 9 条。之前生成的 3 个 key 已经自动被删除
Figure 5

8. The final implementation code is as follows


        $name = ThemePreviewInterface::TAG_THEME_EDITOR . '_' . $sessionId;
        $tags = Cache::tags($name);
        $result = $tags->put(ThemePreviewInterface::THEME_EDITOR_SESSION_PREFIX . $sessionId, json_encode($data), ThemePreviewInterface::TTL);
        if ($result) {
            Redis::connection('cache')->expire(Cache::getPrefix() . $tags->getTags()->tagKey($name), ThemePreviewInterface::TTL);
            Redis::connection('cache')->expire(Cache::getPrefix() . $tags->getTags()->tagId($name) . ':' . RedisTaggedCache::REFERENCE_KEY_STANDARD, ThemePreviewInterface::TTL);
        }

        return $result;


PHP / Laravel / Yii2 Legacy Project Maintenance & Long-Term Technical Support

If your PHP / Laravel / Yii2 project is already in production but needs bug fixing, API troubleshooting, performance optimization, developer handover support, or long-term maintenance, feel free to contact me for remote technical support.

Ideal For:
✅ PHP legacy systems without active maintenance
✅ Laravel / Yii2 project bug fixes
✅ Admin panel feature iterations
✅ RESTful API troubleshooting
✅ MySQL / Redis / Nginx performance issues
✅ Long-term remote part-time maintenance

We can start with a small task:
✅ Production error troubleshooting
✅ API issue analysis
✅ Slow query and performance bottleneck diagnosis
✅ Initial code structure review
✅ Deployment environment and log inspection

If you would like to discuss your project, please contact me and mention: PHP Maintenance Consultation.

Contact Me:
Telegram: @shuijingwan
WeChat: 13980074657
Email: shuijingwanwq@gmail.com

评论

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.