umbot
    Preparing search index...

    Class MemorySessionStorage<T>

    Хранилище userData в памяти процесса — аналог MemorySessionStorage у grammY.

    Используется ядром, когда включён isLocalStorage, платформа не поддерживает локальное хранилище (Telegram, VK, MAX, Viber), а DB-адаптер не подключён.

    Ограничения — те же, что у любой сессии в памяти:

    • данные теряются при перезапуске процесса;
    • данные не разделяются между процессами (кластер, несколько реплик, serverless).

    Объём ограничен maxSize (вытесняется запись, дольше всех не обновлявшаяся) и ttl. Таймеров нет: устаревшие записи удаляются при чтении и при записи. Порядок вставки в Map совпадает с порядком истечения (ttl один на всё хранилище, запись перемещается в конец), поэтому очистка — O(1) амортизированно.

    const storage = new MemorySessionStorage<{ step?: string }>({ maxSize: 2 });
    storage.set('telegram:1', { step: 'ask_name' });
    storage.get('telegram:1'); // { step: 'ask_name' }

    Type Parameters

    • T
    Index

    Constructors

    Accessors

    Methods

    Constructors

    Accessors

    • get size(): number

      Текущее количество записей (включая ещё не удалённые устаревшие).

      Returns number

      Количество записей

    • get ttl(): number

      Время жизни записи в миллисекундах (0 — без ограничения).

      Returns number

      TTL хранилища

    Methods

    • Удаляет запись.

      Parameters

      • key: string

        Ключ записи

      Returns boolean

      true, если запись существовала

    • Возвращает данные по ключу.

      Parameters

      • key: string

        Ключ записи (платформа + id пользователя)

      Returns T | undefined

      Сохранённые данные или undefined, если записи нет или она устарела

      const data = storage.get('telegram:42') ?? {};
      
    • Сохраняет данные по ключу и продлевает время их жизни.

      Parameters

      • key: string

        Ключ записи (платформа + id пользователя)

      • value: T

        Данные пользователя

      Returns void

      storage.set('telegram:42', { oldIntentName: 'ask_name' });