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
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
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
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
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
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
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;




