Primer proyecto OSS en comunidad sobre cache en memoria.

GoKey 🔑

Concepto del proyecto:

Sistema de base de datos clave valor, distribuido. En forma de cache en memoria.

Especificaciones:

Para conjuntar información documentada y un canal de comunicación para indicaciones y especificaciones sobre el desarrollo del proyecto. En el Discord de la comunidad, específicamente en el canal de texto # 🔑 gokey en su descripción se fijó el acceso al Google Doc donde se está documentando el proyecto.


🔗 Tareas en desarrollo


🔗 Guia de estilos para código Go


🔗 Commits convencionales


🔗 Código de Conducta para Contribuyentes



Licencia MIT

Owner
Gophers LATAM
Comunidad de programadores Golang en Español-Latino.
Gophers LATAM
Comments
  • Proposal for cache interface update

    Proposal for cache interface update

    Actualizo comentarios y propongo cambios en la interfaz base de cache:

    1. Desacoplo los tipos de objeto valor a interface{}. string es un tipo muy restrictivo para representaciones de valores a cachear, aunque si buscamos un punto medio podemos utilizar tambien []byte, que es convertible a string sin overhead y es el el tipo utilizado por las interfases Marshaler/Unmarshaler
    2. Cambio el tipo de TTL por time.Duration. Esto es mas idiomático por parte del lenguaje (los consumidores van a poder configurar valores de forma mas ergonómica) y es probablemente el tipo compatible con las APIs e implementaciones que utilicemos para los mecanismos de espera y evicción internos
  • fix unit tests

    fix unit tests

    Descripcion

    Issue Relacionada

    Motivacion y Contexto

    Como fue probado

    Screenshots / capturas de pantalla (si es necesario)

    Tipo de cambio

    • [x] Bug fix (non-breaking cambios que fixean una issue)
    • [ ] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [ ] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [ ] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [x] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [x] Agregue tests para cubrir mis cambios.
    • [x] Todos los tests existentes pasaron.
    • [x] Checkear que el codigo que estoy subiendo esta linteado:
      • [x] go fmt -s
      • [x] go vet
  • feat: implementacion de la operacion delete

    feat: implementacion de la operacion delete

    Descripcion

    Se implemento la funcion delete para la cache, en donde se verifica si existe la key recibida, en caso existir se elimina de la estructura de datos y en caso contrario se devuelve un error

    Issue Relacionada

    https://github.com/gophers-latam/GoKey/projects/1#card-60712589

    Motivacion y Contexto

    Es parte de las operaciones de la cache, resuelve el problema de poder quitar un elemento de la misma

    Como fue probado

    Aun no se desarrollaron los tests para esta funcionalidad

    Screenshots / capturas de pantalla (si es necesario)

    Tipo de cambio

    • [ ] Bug fix (non-breaking cambios que fixean una issue)
    • [x] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [ ] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [ ] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [ ] Agregue tests para cubrir mis cambios.
    • [ ] Todos los tests existentes pasaron.
    • [ ] Checkear que el codigo que estoy subiendo esta linteado:
      • [x] go fmt -s
      • [x] go vet
  • ci: agregado propuesta de github actions para generar releases automa…

    ci: agregado propuesta de github actions para generar releases automa…

    …tizados

    Descripcion

    Según el tipo de software a construir y al entry point que presenta el mismo. Agregué una propuesta inicial sujeta a cambios de una nueva github actions. Esta versión inicial permite generar para las plataformas definidas un binario del proyecto de forma automatizada.

    Issue Relacionada

    Motivacion y Contexto

    Genera de forma automatizada los binarios según las plataformas definidas en el mismo.

    Como fue probado

    Screenshots / capturas de pantalla (si es necesario)

    Tipo de cambio

    • [ ] Bug fix (non-breaking cambios que fixean una issue)
    • [x] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [ ] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [x] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [x] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [ ] Agregue tests para cubrir mis cambios.
    • [x] Todos los tests existentes pasaron.
    • [ ] Checkear que el codigo que estoy subiendo esta linteado:
      • [ ] go fmt -s
      • [ ] go vet
  • WIP: fix error in cache_test.go file

    WIP: fix error in cache_test.go file

    Descripcion

    Fix the errors in the cache_test.go file

    Issue Relacionada

    N/A

    Motivacion y Contexto

    Fix testing of the project

    Como fue probado

    Run tests from makefile

    Screenshots / capturas de pantalla (si es necesario)

    Tipo de cambio

    • [X] Bug fix (non-breaking cambios que fixean una issue)
    • [ ] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [X] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [X] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [X] Agregue tests para cubrir mis cambios.
    • [X] Todos los tests existentes pasaron.
    • [X] Checkear que el codigo que estoy subiendo esta linteado:
      • [X] go fmt -s
      • [X] go vet
  • Feat concurrencia cache

    Feat concurrencia cache

    Descripcion

    Se agregaron los unit tests para el acceso concurrente a cada una de las functions de la cache

    Issue Relacionada

    https://github.com/gophers-latam/GoKey/projects/1#card-61670981

    Motivacion y Contexto

    El cambio es requerido porque faltaban probar que realmente funcione el control de concurrencia para el acceso a la cache

    Como fue probado

    Fue probado mediante unit tests. Se probo el acceso concurrente a cada una de las operaciones disponibles de la cache mediante el uso de goroutines

    Screenshots / capturas de pantalla (si es necesario)

    Tipo de cambio

    • [ ] Bug fix (non-breaking cambios que fixean una issue)
    • [x] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [ ] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [x] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [x] Agregue tests para cubrir mis cambios.
    • [x] Todos los tests existentes pasaron.
    • [ ] Checkear que el codigo que estoy subiendo esta linteado:
      • [x] go fmt -s
      • [x] go vet
  • Feat concurrencia cache

    Feat concurrencia cache

    Descripcion

    Issue Relacionada

    Motivacion y Contexto

    Como fue probado

    Tipo de cambio

    • [ ] Bug fix (non-breaking cambios que fixean una issue)
    • [x] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [ ] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [x] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [ ] Agregue tests para cubrir mis cambios.
    • [ ] Todos los tests existentes pasaron.
    • [ ] Checkear que el codigo que estoy subiendo esta linteado:
      • [x] go fmt -s
      • [ ] go vet
  • Feat agregar GitHub action

    Feat agregar GitHub action

    Descripcion

    He agregado una github action para realizar los test unitarios de forma automatizada.

    Issue Relacionada

    https://github.com/gophers-latam/GoKey/issues/18#issue-917556244

    Motivacion y Contexto

    Para contribuir en el proyecto considero que seria un aporte provechoso para ver las notificaciones en el canal de discord

    Como fue probado

    Realice todos los test de forma local donde se detectaron 4 test que lanzaban fail luego estuve probando el github action en diferentes escenarios.

    Screenshots / capturas de pantalla (si es necesario)

    Tipo de cambio

    • [ ] Bug fix (non-breaking cambios que fixean una issue)
    • [x] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [x] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [x] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [ ] Agregue tests para cubrir mis cambios.
    • [ ] Todos los tests existentes pasaron.
    • [ ] Checkear que el codigo que estoy subiendo esta linteado:
      • [ ] go fmt -s
      • [ ] go vet
  • Feature: implementación de la operación Exists

    Feature: implementación de la operación Exists

    Descripcion

    Se agrega la operación Exists a las operaciones fundamentales, sólo para checar que una key esté en el registro, y se añade a la interfaz de Operations.

    Issue Relacionada

    Motivacion y Contexto

    Crear una operación menos demandante para usarla en tareas más complejas.

    Como fue probado

    Se incluyen tests para chequear la existencia de una key registrada, no registrada, vacía y expirada.

    Tipo de cambio

    • [ ] Bug fix (non-breaking cambios que fixean una issue)
    • [x] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [x] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [ ] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [x] Agregue tests para cubrir mis cambios.
    • [x] Todos los tests existentes pasaron.
    • [x] Checkear que el codigo que estoy subiendo esta linteado:
      • [ ] go fmt -s
      • [ ] go vet
  • Feat agregar logica api cliente

    Feat agregar logica api cliente

    Descripcion

    Se agrega el file de API para que los clientes puedan crear una instancia de gokey y poder interactuar con el cache de manera sencilla, sin alterar el comportamiento de las operaciones

    Issue Relacionada

    Motivacion y Contexto

    Posibilidad a los clientes de la libreria de usar el cache

    Como fue probado

    Tests de la aplicación

    Screenshots / capturas de pantalla (si es necesario)

    Tipo de cambio

    • [ ] Bug fix (non-breaking cambios que fixean una issue)
    • [ x] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [ ] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [ ] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ x] Mis cambios necesitan cambio de la documentacion.
    • [ x] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [ ] Agregue tests para cubrir mis cambios.
    • [ ] Todos los tests existentes pasaron.
    • [ ] Checkear que el codigo que estoy subiendo esta linteado:
      • [ ] go fmt -s
      • [ ] go vet
  • fix error variable name in delete method

    fix error variable name in delete method

    Descripcion

    Se resolvio un error en el return de la funcion delete

    Issue Relacionada

    No reportada

    Motivacion y Contexto

    Resolver un error

    Como fue probado

    $ make test
    ?       github.com/gophers-latam/GoKey/cmd      [no test files]
    === RUN   TestGenerateMD5HashFromKey
    --- PASS: TestGenerateMD5HashFromKey (0.00s)
    PASS
    ok      github.com/gophers-latam/GoKey/gokey    0.001s
    === RUN   TestCacheUpsert
    --- PASS: TestCacheUpsert (0.00s)
    === RUN   TestCacheGet
    --- PASS: TestCacheGet (0.00s)
    === RUN   TestCacheGetExpiredKey
    --- PASS: TestCacheGetExpiredKey (1.00s)
    === RUN   TestCacheDelete
    --- PASS: TestCacheDelete (0.00s)
    === RUN   TestCacheGetEmptyKey
    --- PASS: TestCacheGetEmptyKey (0.00s)
    === RUN   TestCacheGetUnknownKey
    --- PASS: TestCacheGetUnknownKey (0.00s)
    === RUN   TestUpsertSameKey
    --- PASS: TestUpsertSameKey (0.00s)
    PASS
    ok      github.com/gophers-latam/GoKey/tests    1.002s
    

    Screenshots / capturas de pantalla (si es necesario)

    N?A

    Tipo de cambio

    • [x] Bug fix (non-breaking cambios que fixean una issue)
    • [ ] Nueva feature / funcionalidad (non-breaking cambio que agrega una nueva funcionalidad)
    • [ ] Breaking change (fix o feature que va a causar un cambio en una funcionalidad existente)

    Checklist

    • [x] Estas haciendo el pull request desde un *topic/feature/bugfix branch (lado derecho). Si estas haciendo un pull request desde un fork, no lo hagas desde master!.
    • [x] Estas haciendo el pull request contra master (lado izquierdo). Tambien de que estas usando los ultimos cambios en master.
    • [ ] Mis cambios necesitan cambio de la documentacion.
    • [ ] Actualize la documentacion acordemente.
    • [ ] Modules and dependencias fueron actualizadas acordemente; correr go mod tidy && go mod vendor
    • [ ] Agregue tests para cubrir mis cambios.
    • [x] Todos los tests existentes pasaron.
    • [x] Checkear que el codigo que estoy subiendo esta linteado:
      • [x] go fmt -s
      • [x] go vet
Dec 28, 2022
Package cache is a middleware that provides the cache management for Flamego.

cache Package cache is a middleware that provides the cache management for Flamego. Installation The minimum requirement of Go is 1.16. go get github.

Nov 9, 2022
A mem cache base on other populator cache, add following feacture

memcache a mem cache base on other populator cache, add following feacture add lazy load(using expired data, and load it asynchronous) add singlefligh

Oct 28, 2021
Cache - A simple cache implementation

Cache A simple cache implementation LRU Cache An in memory cache implementation

Jan 25, 2022
Gin-cache - Gin cache middleware with golang

Gin-cache - Gin cache middleware with golang

Nov 28, 2022
LevelDB style LRU cache for Go, support non GC object.

Go语言QQ群: 102319854, 1055927514 凹语言(凹读音“Wa”)(The Wa Programming Language): https://github.com/wa-lang/wa LRU Cache Install go get github.com/chai2010/c

Jul 5, 2020
groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases.

groupcache Summary groupcache is a distributed caching and cache-filling library, intended as a replacement for a pool of memcached nodes in many case

Dec 31, 2022
☔️ A complete Go cache library that brings you multiple ways of managing your caches
☔️ A complete Go cache library that brings you multiple ways of managing your caches

Gocache Guess what is Gocache? a Go cache library. This is an extendable cache library that brings you a lot of features for caching data. Overview He

Jan 1, 2023
fastcache - fast thread-safe inmemory cache for big number of entries in Go

Fast thread-safe inmemory cache for big number of entries in Go. Minimizes GC overhead

Dec 27, 2022
An in-memory cache library for golang. It supports multiple eviction policies: LRU, LFU, ARC

GCache Cache library for golang. It supports expirable Cache, LFU, LRU and ARC. Features Supports expirable Cache, LFU, LRU and ARC. Goroutine safe. S

May 31, 2021
Efficient cache for gigabytes of data written in Go.

BigCache Fast, concurrent, evicting in-memory cache written to keep big number of entries without impact on performance. BigCache keeps entries on hea

Dec 30, 2022
An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications.

go-cache go-cache is an in-memory key:value store/cache similar to memcached that is suitable for applications running on a single machine. Its major

Dec 29, 2022
LFU Redis implements LFU Cache algorithm using Redis as data storage

LFU Redis cache library for Golang LFU Redis implements LFU Cache algorithm using Redis as data storage LFU Redis Package gives you control over Cache

Nov 10, 2022
gdcache is a pure non-intrusive distributed cache library implemented by golang
gdcache is a pure non-intrusive distributed cache library implemented by golang

gdcache is a pure non-intrusive distributed cache library implemented by golang, you can use it to implement your own distributed cache

Sep 26, 2022
entcache - An experimental cache driver for ent with variety of storage options
 entcache - An experimental cache driver for ent with variety of storage options

entcache An experimental cache driver for ent with variety of storage options, such as: A context.Context-based cache. Usually, attached to an HTTP re

Dec 28, 2022
Cachy is a simple and lightweight in-memory cache api.
Cachy is a simple and lightweight in-memory cache api.

cachy Table of Contents cachy Table of Contents Description Features Structure Configurability settings.json default values for backup_file_path Run o

Apr 24, 2022
A REST-API service that works as an in memory key-value store with go-minimal-cache library.

A REST-API service that works as an in memory key-value store with go-minimal-cache library.

Aug 25, 2022
Cache list, count with filter param golang, using struct, hashkey

Dumbcache Cache list, count with filter param golang, using struct, hashkey Structure we hash your request object to md5 hashing and add a prefix coun

Nov 1, 2021