Я успешно подтвердил, что ключи существуют с помощью Redis -cli из терминала.
В моем PHP-приложении я генерирую ключи кэша, используя следующий код
Код: Выделить всё
private static function generateCacheKey($prefix, $identifier = null) {
$dbName = self::$dbName;
$appDbName = self::$useAppDB ? self::$dbNameApp : 'ks';
$deploymentSalt = defined('KYTE_DEPLOYMENT_SALT') ? KYTE_DEPLOYMENT_SALT : 'default_kyte_salt';
$key = "{$deploymentSalt}:{$dbName}:{$appDbName}:{$prefix}";
if ($identifier) {
$key .= ":{$identifier}";
}
return $key;
}
Код: Выделить всё
public static function select($table, $id = null, $condition = null, $join = null) {
$cacheKey = self::generateCacheKey("select:$table", md5("$id:$condition:" . json_encode($join)));
$cachedResult = self::$redis ? self::$redis->get($cacheKey) : null;
if ($cachedResult) {
return json_decode($cachedResult, true);
}
/* if no cache was found, rest of the select query function */
// after successfully retrieving data from DB, create a new cache to store
if (self::$redis) {
if (self::$redisTTL > 0) {
self::$redis->set($cacheKey, json_encode($data), self::$redisTTL);
} else {
self::$redis->set($cacheKey, json_encode($data));
}
}
return $data;
}
Код: Выделить всё
self::invalidateCache($table);
Проблема в том, что я не могу найти шаблоны с помощью клавиш или сканирования, хотя я подтвердил их существование с помощью redis-cli и шаблон, который выводится в журнал ошибок. Что я мог здесь упустить?
Вот код инвалидатеКэш
Код: Выделить всё
private static function invalidateCache($table) {
if (self::$redis) {
try {
$pattern = self::generateCacheKey("select:$table", "*");
error_log("Generated pattern: $pattern");
// Fetch all matching keys using KEYS command
$keys = self::$redis->keys($pattern);
if (!empty($keys)) {
error_log("Keys found for pattern {$pattern}: " . print_r($keys, true));
foreach ($keys as $key) {
self::$redis->del($key);
}
} else {
error_log("No keys matched the pattern {$pattern}");
}
} catch (\Exception $e) {
error_log("Redis error while invalidating cache for table $table: " . $e->getMessage());
}
} else {
error_log("Redis is not initialized.");
}
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... can-or-key