Caché en memoria rápida, concurrente y con expulsión para Go, que almacena muchísimas entradas en el heap con poca carga para el GC.
dgraph-io/ristretto
Una biblioteca de caché rápida, concurrente y limitada por memoria para Go, con expulsión basada en el costo y admisión TinyLFU.
- Estrellas
- 7,005
- Forks
- 457
- Issues abiertos
- 21
- Último commit
- el mes pasado
¿Qué es?
Ristretto es una biblioteca de caché en memoria para Go, diseñada para cargas de trabajo en las que muchas goroutines leen y escriben en la misma caché y la contención podría convertirse en un cuello de botella. Se creó para servir como caché sin contención dentro de Dgraph.
La expulsión utiliza una política SampledLFU y la admisión, TinyLFU. Juntas, buscan lograr altas tasas de aciertos con una sobrecarga de memoria reducida (unos 12 bits por contador de frecuencia). Cada elemento tiene un costo definido por el usuario, de modo que un elemento grande y valioso puede expulsar varios más pequeños en lugar de contar como una sola entrada. El tamaño de la caché se limita según el costo total, no según el número de elementos.
La API es pequeña: configura NumCounters, MaxCost y BufferItems; después, llama a Set, Get y Del. Las métricas opcionales muestran estadísticas de rendimiento y tasa de aciertos. Ristretto es una biblioteca para un solo proceso, no distribuida. Requiere Go 1.21 o posterior, y el módulo v2 usa genéricos.
Funciones clave
- 01Expulsión basada en el costo, para que los elementos grandes y valiosos puedan desplazar a varios más pequeños.
- 02Expulsión SampledLFU combinada con admisión TinyLFU para lograr altas tasas de aciertos.
- 03Admite el uso seguro y concurrente desde muchas goroutines.
- 04Métricas opcionales de rendimiento y tasa de aciertos.
- 05API genérica de v2 con parámetros de tipo Config[K, V].
Casos de uso
- Almacenar en caché resultados calculados o filas de bases de datos dentro de un servicio Go para evitar repetir trabajo.
- Limitar la memoria de la caché según el costo total de los elementos, en lugar de según el número de entradas.
- Crear motores de almacenamiento integrados o bases de datos que necesiten una caché en el proceso, como Badger y Dgraph.
Inicio rápido
- 1
Instala Go 1.21 o una versión posterior
- 2
Añade Ristretto a tu proyecto con go get
go get github.com/dgraph-io/ristretto/v2
Antes de usarlo
- La API v1 es antigua; v2 usa generics y tiene una interfaz ligeramente distinta, por lo que puede que tengas que modificar el código existente.
- No se garantiza que se almacenen las llamadas a Set para elementos nuevos, ya que pueden descartarse cuando hay contención o debido a la política de admisión.
Temas
Preguntas frecuentes
- ¿Qué es ristretto?
- Una biblioteca de caché rápida, concurrente y limitada por memoria para Go, con expulsión basada en el costo y admisión TinyLFU. Ristretto es una biblioteca de caché en memoria para Go, diseñada para cargas de trabajo en las que muchas goroutines leen y escriben en la misma caché y la contención podría convertirse en un cuello de botella. Se creó para servir como caché sin contención dentro de Dgraph.
- ¿ristretto es gratuito? ¿Qué licencia tiene?
- ristretto es open source bajo la licencia Apache-2.0. Revisa los términos de la licencia antes de usarlo en productos comerciales.
- ¿ristretto sigue mantenido?
- Actualizado en los últimos 6 meses. El último commit de ristretto fue el 21 sept 2026.
- ¿Para qué puedo usar ristretto?
- Almacenar en caché resultados calculados o filas de bases de datos dentro de un servicio Go para evitar repetir trabajo. Limitar la memoria de la caché según el costo total de los elementos, en lugar de según el número de entradas. Crear motores de almacenamiento integrados o bases de datos que necesiten una caché en el proceso, como Badger y Dgraph.
- ¿Cómo se instala ristretto?
- Instala Go 1.21 o una versión posterior Añade Ristretto a tu proyecto con go get: go get github.com/dgraph-io/ristretto/v2
- ¿Dónde consigo ristretto?
- El código fuente y las instrucciones de instalación están en GitHub: https://github.com/dgraph-io/ristretto
Resumen generado por IA a partir del README del proyecto. Las estadísticas de GitHub se actualizan a diario.
Proyectos relacionados
Biblioteca de utilidades para Go con más de 700 funciones reutilizables para cadenas, slices, fechas y horas, redes, criptografía y más, inspirada en lodash.
Almacén de datos en memoria que se usa como caché, servidor de estructuras de datos, almacén de documentos, base de datos vectorial y agente de mensajería.
Almacén de datos en memoria compatible con las API de Redis y Memcached, pensado para reemplazar ambos sin cambios.
Servidor de clave-valor en memoria compatible con Redis y Valkey, escrito en Rust, con búsqueda integrada de texto completo y vectores.
Un pool de threads Worker para Node.js que ejecuta tareas con uso intensivo de CPU fuera del event loop principal, con colas, cancelación y estadísticas de ejecución.