Код IT
← Каталог

Memcached - кэширование в оперативной памяти — TypeScript/JavaScript (Node.js, memjs)

Фрагмент из «Memcached - кэширование в оперативной памяти»: TypeScript/JavaScript (Node.js, memjs).

TypeScript main.ts
   import { serialize, deserialize } from 'some-serializer'; // например, msgpack

   export class SessionService {
     async getSession(token: string): Promise<Session | null> {
       const key = `sess:${token}`;
       try {
         const data = await memcached.get(key);
         if (!data) return null;

         return deserialize(data) as Session;
       } catch (err) {
         // Логируем, но не прерываем — попробуем БД (если есть резерв)
         console.warn('Cache miss or error for session', token, err);
         return null;
       }
     }

     async createSession(session: Session): Promise<string> {
       const token = crypto.randomBytes(24).toString('hex');
       const key = `sess:${token}`;
       const serialized = serialize(session);

       // TTL = 24 часа (в секундах)
       await memcached.set(key, serialized, 86400);
       return token;
     }

     async invalidateSession(token: string): Promise<void> {
       await memcached.del(`sess:${token}`).catch(() => {
         // Игнорируем ошибки удаления — сессия и так умрёт по TTL
       });
     }
   }
   import { serialize, deserialize } from 'some-serializer'; // например, msgpack

   export class SessionService {
     async getSession(token: string): Promise<Session | null> {
       const key = `sess:${token}`;
       try {
         const data = await memcached.get(key);
         if (!data) return null;

         return deserialize(data) as Session;
       } catch (err) {
         // Логируем, но не прерываем — попробуем БД (если есть резерв)
         console.warn('Cache miss or error for session', token, err);
         return null;
       }
     }

     async createSession(session: Session): Promise<string> {
       const token = crypto.randomBytes(24).toString('hex');
       const key = `sess:${token}`;
       const serialized = serialize(session);

       // TTL = 24 часа (в секундах)
       await memcached.set(key, serialized, 86400);
       return token;
     }

     async invalidateSession(token: string): Promise<void> {
       await memcached.del(`sess:${token}`).catch(() => {
         // Игнорируем ошибки удаления — сессия и так умрёт по TTL
       });
     }
   }