Acelera tus proyectos de Golang sin la molestia de configurar una base de datos cada vez que comienzas un nuevo proyecto. ¿Estás cansado de configurar bases de datos desde cero? ¿Sólo para afrontar nuevos problemas? No busques más. En este blog analizaremos la biblioteca de almacenamiento en caché de Golang con soporte para TTL, persistencia del disco y tipo de datos hash.
GoSwift.
import ( "fmt" "github.com/leoantony72/goswift" ) func main(){ cache := goswift.NewCache() // Value 0 indicates no expiry cache.Set("key", "value", 0) val, err := cache.Get("key") if err !=nil{ fmt.Println(err) return } fmt.Println("key", val) }
// Update value // @Update(key string, val interface{}) error err = cache.Update("key","value2") if err != nil{ fmt.Println(err) return }
// Delete command // @Del(key string) cache.Del("key") // Exist command // @Exists(key string) bool value = cache.Exists("key") fmt.Println(value) // returns false
// Set Value with Expiry // @Set(key string, val interface{}, exp int) // Here expiry is set to 1sec cache.Set("key","value",1000) // Hset command // @Hset(key, field string, value interface{}, exp int) // in this case the "key" expires in 1sec cache.Hset("key","name","value",1000) cache.Hset("key","age",18,1000)
// Hset command // @Hset(key, field string, value interface{}, exp int) // in this case the "key" expires in 1sec cache.Hset("key","name","value",1000) cache.Hset("key","age",18,1000) // HMset command // @HMset(key string, d interface{}, exp int) error // Set a Hash by passing a Struct/Map // ---by passing a struct--- type Person struct{ Name string Age int Place string } person1 := &Person{Name:"bob",Age:18,Place:"NYC"} err = cache.HMset("key",person1) if err != nil{ fmt.Println(err) return } // ---by passing a map--- person2 := map[string]interface{Name:"john",Age:18,Place:"NYC"} err = cache.HMset("key",person2) if err != nil{ fmt.Println(err) return } // Hget command // @HGet(key, field string) (interface{}, error) // get individual fields in Hash data,err := cache.HGet("key","field") if err != nil{ fmt.Println(err) return } fmt.Println(data) // HgetAll command // @HGetAll(key string) (map[string]interface{}, error) // gets all the fields with value in a hash key // retuns a map[string]interface{} data,err = cache.HGetAll("key") if err != nil{ fmt.Println(err) return }
opt := goswift.CacheOptions{ EnableSnapshots: true, SnapshotInterval: time.Second*5, } c := goswift.NewCache(opt)
Esto tomará una instantánea de los datos cada 5 segundos y la guardará en un archivo Snapshot.data. De forma predeterminada, las instantáneas están deshabilitadas y, si no se proporciona SnapshotInterval, el valor predeterminado es 5 segundos.
NOTA: Si EnableSnapshot es falso, los datos guardados en el archivo no se importarán
const ( ErrKeyNotFound = "key does not Exists" ErrFieldNotFound = "field does not Exists" ErrNotHashvalue = "not a Hash value/table" ErrHmsetDataType = "invalid data type, Expected Struct/Map" )
Estos son los errores comunes que pueden ocurrir al escribir el código. Estas variables le proporcionan un método de comparación de errores claro y sencillo para determinar errores.
data,err := cache.Get("key") if err != nil { if err.Error() == goswift.ErrKeyNotFound { //do something } }
Cada 3 segundos se llama a la función **sweaper ** para borrar los valores caducados de la tabla hash. Mantenemos un montón mínimo que apunta al mapa hash. El elemento superior será la clave con el TTL más pequeño. atravesamos el árbol hasta que TTL sea mayor que la hora actual.
¡¡No te recomendaría que uses esto en producción!!, pero siéntete libre de usarlo en tu pequeño proyecto paralelo. Pruébelo y, si encuentra un error, cree un problema en el repositorio de GitHub.
Correo electrónico: [email protected]
Github: https://github.com/leoantony72
Repositorio: https://github.com/leoantony72/goswift
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3