PHP Redis может устанавливать значение ключа, но не может найти ключи с помощью сканирования или ключа.Php

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 PHP Redis может устанавливать значение ключа, но не может найти ключи с помощью сканирования или ключа.

Сообщение Anonymous »

У меня есть PHP-приложение, которое может успешно подключаться к бессерверной конечной точке Redis на AWS с помощью TLS. Я также могу успешно установить и получить кеш из Redis, однако я не могу найти ключи, чтобы сделать хранилище кеша недействительным.
Я успешно подтвердил, что ключи существуют с помощью 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;
}
Я могу успешно сохранить значение в Redis следующим образом:

Код: Выделить всё

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.");
}
}
Пакет PHP redis был установлен с помощью Pecl. Я использую Redis v7.1 на AWS.


Подробнее здесь: https://stackoverflow.com/questions/785 ... can-or-key
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»