Быстрый конкурентный in-memory кэш с вытеснением для Go: хранит множество записей в куче и снижает нагрузку на GC.
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
Установите Go версии 1.21 или выше
- 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 обновляется ежедневно.
Похожие проекты
Библиотека утилит для Go: более 700 вспомогательных функций для строк, срезов, дат и времени, сетей, криптографии и многого другого, вдохновлённая lodash.
Хранилище данных в памяти для кэширования, работы со структурами данных и документами, векторного поиска и обмена сообщениями.
In-memory хранилище данных, совместимое по API с Redis и Memcached и задуманное как их прямая замена.
Совместимый с Redis и Valkey внутрипамятный сервер «ключ—значение» на Rust со встроенным полнотекстовым и векторным поиском.
Пул потоков-воркеров для Node.js, который выносит ресурсоёмкие вычисления из основного цикла событий и поддерживает очереди, отмену задач и статистику выполнения.