Ошибка кэширования NestJS и KeyV: не удалось получить кешированные данные из RedisJavascript

Форум по Javascript
Ответить
Anonymous
 Ошибка кэширования NestJS и KeyV: не удалось получить кешированные данные из Redis

Сообщение Anonymous »

У меня есть два приложения в Spring boot и NestJS. Приложение загрузки Spring хранит данные сеанса в Redis. Сущность сеанса имеет следующие свойства: id, jwtId, accountId, validFrom, validUntill. Просто простая сущность с несколькими свойствами. Метод сохранения при загрузке Spring выглядит следующим образом:

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

@Cacheable(key = "'cache_user_id_' + #session.id", cacheNames = "doubleCachingCache")
public Optional save(@Nonnull Session session) {
return Optional.of(sessionRepository.save(session));
}
Когда я вхожу в Redis через терминал, я вижу идентификаторы кешей (см. снимок экрана), поэтому проблем со стороны загрузки Spring нет.
Изображение

Теперь я хочу получить данные, хранящиеся в Redis, из Приложение NestJS использует идентификаторы, и именно здесь у меня возникла проблема.
На самом деле я следовал документу NestJS Redis, в частности разделу, посвященному использованию альтернативных хранилищ кэша. У меня та же конфигурация, что и в документации, но я не могу получить данные из Redis с идентификатором кеша.
Вот фрагменты кода в NestJS. Для ясности большая часть кода опущена.
// Модуль Redis

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

import {CacheModule} from "@nestjs/cache-manager";
import KeyvRedis from "@keyv/redis"

@Module({
imports: [
CacheModule.registerAsync({
useFactory: async () => {
return {
stores: [
new KeyvRedis('redis://localhost:6379'),
],
};
},
}),

],
providers: [],
exports: []
})
export class RedisModule {}
// Общий модуль

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

import { CACHE_MANAGER } from "@nestjs/cache-manager";
import {Inject, Injectable } from "@nestjs/common";
import { Cache } from "cache-manager";

@Injectable()
export class CacheService {

constructor(@Inject(CACHE_MANAGER) private readonly cache: Cache) {}

async get(key: string) {

return await this.cache.get(key);
}

async set(key: string, value: object) {
await this.cache.set(key, value,  0);
}

delete(key: string) {
this.cache.del(key);
}

}

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

@Module({
imports: [
CacheModule.register({isGlobal: true}),
RedisModule,
],
providers: [
CacheService,
],
exports: [
CacheService
],
})
export class SharedModule {

}
// Модуль приложения

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

@Controller()
export class AppController {

constructor(private cacheService: CacheService) {}

@Get("redis-cache")
getDataFromRedis() {
// The id is the first id in the screenshot
const dataFromRedis = this.cacheService.get("doubleCachingCache::cache_user_id_34929554-55c0-43cc-8d1f-9c4937df1b76");
// This line displays undefined to the console though the data is in Redis
console.log(dataFromRedis);
}

}

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

@Module({
imports: [
SharedModule,
],
providers: [

],
controllers: [
AppController
],
})
export class AppModule {

}
Я не могу получить данные из Redis из приложения NestJS.
Я также пытался сохранить данные в Redis из приложения NestJS, но это также не сработало, потому что когда я вхожу в консоль Redis, я не вижу никакого нового идентификатора.

Подробнее здесь: https://stackoverflow.com/questions/798 ... from-redis
Ответить

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

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

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

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

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