Repolode
dgraph-io

dgraph-io/ristretto

Uma biblioteca de cache rápida, concorrente e limitada por memória para Go, com remoção baseada em custo e admissão TinyLFU.

Estrelas
7,005
Forks
457
Issues abertas
21
Último commit
mês passado

O que é?

Ristretto é uma biblioteca de cache em memória para Go, desenvolvida para cargas de trabalho em que muitas goroutines leem e escrevem no mesmo cache e a contenção poderia se tornar um gargalo. Ela foi criada para funcionar como um cache sem contenção dentro do Dgraph.

A remoção usa uma política SampledLFU e a admissão usa TinyLFU. Em conjunto, elas buscam uma alta taxa de acertos com baixo overhead de memória (cerca de 12 bits por contador de frequência). Cada item tem um custo definido pelo usuário, então um item grande e valioso pode remover vários itens menores, em vez de contar como uma única entrada. O tamanho do cache é limitado pelo custo total, não pela quantidade de itens.

A API é pequena: configure NumCounters, MaxCost e BufferItems e, em seguida, chame Set, Get e Del. Métricas opcionais mostram estatísticas de throughput e taxa de acertos. Ristretto é uma biblioteca para um único processo, não distribuída. Ela requer Go 1.21 ou posterior, e o módulo v2 usa generics.

Recursos principais

  • 01Remoção baseada em custo, permitindo que itens grandes e valiosos substituam vários itens menores.
  • 02Remoção SampledLFU combinada com admissão TinyLFU para obter altas taxas de acerto.
  • 03Seguro para uso concorrente por muitas goroutines.
  • 04Métricas opcionais de throughput e taxa de acertos.
  • 05API genérica na v2, com parâmetros de tipo Config[K, V].

Casos de uso

  • Armazenar em cache resultados computados ou linhas de banco de dados dentro de um serviço Go para reduzir trabalho repetido.
  • Limitar o uso de memória do cache pelo custo total dos itens, em vez da quantidade de entradas.
  • Criar mecanismos de armazenamento ou bancos de dados incorporados que precisam de um cache no próprio processo, como Badger e Dgraph.

Início rápido

  1. 1

    Instale o Go 1.21 ou superior

  2. 2

    Adicione o Ristretto ao seu projeto com go get

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

Antes de usar

  • A API v1 é antiga; a v2 usa generics e tem uma interface um pouco diferente, então pode ser necessário alterar o código existente.
  • Não há garantia de que as chamadas a Set para novos itens sejam armazenadas, pois elas podem ser descartadas em situações de contenção ou pela política de admissão.

Tópicos

Perguntas frequentes

O que é ristretto?
Uma biblioteca de cache rápida, concorrente e limitada por memória para Go, com remoção baseada em custo e admissão TinyLFU. Ristretto é uma biblioteca de cache em memória para Go, desenvolvida para cargas de trabalho em que muitas goroutines leem e escrevem no mesmo cache e a contenção poderia se tornar um gargalo. Ela foi criada para funcionar como um cache sem contenção dentro do Dgraph.
ristretto é gratuito? Qual é a licença?
ristretto é open source sob a licença Apache-2.0. Confira os termos da licença antes de usá-lo em produtos comerciais.
ristretto ainda é mantido?
Atualizado nos últimos 6 meses. O último commit de ristretto foi em 21 de set. de 2026.
Para que posso usar ristretto?
Armazenar em cache resultados computados ou linhas de banco de dados dentro de um serviço Go para reduzir trabalho repetido. Limitar o uso de memória do cache pelo custo total dos itens, em vez da quantidade de entradas. Criar mecanismos de armazenamento ou bancos de dados incorporados que precisam de um cache no próprio processo, como Badger e Dgraph.
Como instalar ristretto?
Instale o Go 1.21 ou superior Adicione o Ristretto ao seu projeto com go get: go get github.com/dgraph-io/ristretto/v2
Onde consigo ristretto?
O código-fonte e as instruções de instalação estão no GitHub: https://github.com/dgraph-io/ristretto

Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.

Projetos relacionados