Repolode
dgraph-io

dgraph-io/ristretto

Быстрая конкурентная библиотека кеширования для Go с ограничением по памяти, вытеснением по стоимости и допуском записей с помощью TinyLFU.

Звёзды
7,005
Форки
457
Открытые issues
21
Последний коммит
в прошлом месяце

Что это?

Ristretto — библиотека для кеширования в памяти на Go, рассчитанная на сценарии, где множество горутин читают из одного кеша и записывают в него, а конкуренция за доступ иначе стала бы узким местом. Её создали как кеш без конкуренции за доступ для Dgraph.

Для вытеснения используется политика SampledLFU, а для допуска записей — TinyLFU. Вместе они обеспечивают высокую долю попаданий при небольших накладных расходах на память (около 12 бит на счётчик частоты). Для каждого элемента задаётся пользовательская стоимость, поэтому крупный ценный элемент может вытеснить несколько меньших, а не учитываться как одна запись. Размер кеша ограничивается суммарной стоимостью элементов, а не их количеством.

API компактен: задайте NumCounters, MaxCost и BufferItems, а затем вызывайте Set, Get и Del. Необязательные метрики показывают статистику пропускной способности и доли попаданий. Ristretto — библиотека для одного процесса, она не является распределённой. Для работы требуется Go 1.21 или новее, а в модуле v2 используются generics.

Ключевые возможности

  • 01Вытеснение по стоимости: крупные ценные элементы могут вытеснять несколько меньших.
  • 02Вытеснение SampledLFU в сочетании с допуском TinyLFU для высокой доли попаданий.
  • 03Безопасная совместная работа множества горутин.
  • 04Необязательные метрики пропускной способности и доли попаданий.
  • 05Generic API версии v2 с параметрами типа Config[K, V].

Сценарии использования

  • Кеширование результатов вычислений или строк базы данных внутри Go-сервиса, чтобы сократить повторную работу.
  • Ограничение памяти кеша по суммарной стоимости элементов, а не по количеству записей.
  • Создание встраиваемых движков хранения данных или баз данных, которым нужен кеш в процессе, как в Badger и Dgraph.

Быстрый старт

  1. 1

    Установите Go версии 1.21 или выше

  2. 2

    Добавьте Ristretto в проект с помощью go get

    go get github.com/dgraph-io/ristretto/v2

Что важно знать

  • API v1 устарел; в v2 используются generics и немного другой интерфейс, поэтому существующий код может потребовать изменений.
  • Вызовы Set для новых элементов не гарантированно сохраняются: они могут быть отброшены при конкуренции или в соответствии с политикой допуска.

Темы

Частые вопросы

Что такое ristretto?
Быстрая конкурентная библиотека кеширования для Go с ограничением по памяти, вытеснением по стоимости и допуском записей с помощью TinyLFU. Ristretto — библиотека для кеширования в памяти на Go, рассчитанная на сценарии, где множество горутин читают из одного кеша и записывают в него, а конкуренция за доступ иначе стала бы узким местом. Её создали как кеш без конкуренции за доступ для Dgraph.
ristretto можно использовать бесплатно? Какая у него лицензия?
ristretto распространяется с открытым исходным кодом под лицензией Apache-2.0. Перед использованием в коммерческих продуктах проверьте условия лицензии.
ristretto всё ещё поддерживается?
Обновлялся за последние 6 месяцев. Последний коммит в ristretto — 21 сент. 2026 г..
Для чего можно использовать ristretto?
Кеширование результатов вычислений или строк базы данных внутри Go-сервиса, чтобы сократить повторную работу. Ограничение памяти кеша по суммарной стоимости элементов, а не по количеству записей. Создание встраиваемых движков хранения данных или баз данных, которым нужен кеш в процессе, как в Badger и Dgraph.
Как установить ristretto?
Установите Go версии 1.21 или выше Добавьте Ristretto в проект с помощью go get: go get github.com/dgraph-io/ristretto/v2
Где скачать ristretto?
Исходный код и инструкции по установке — на GitHub: https://github.com/dgraph-io/ristretto

Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.

Похожие проекты