Acelere seus projetos Golang sem o incômodo de configurar um banco de dados sempre que iniciar um novo projeto. Cansado de configurar bancos de dados do zero? Apenas para enfrentar novos problemas? Não procure mais Neste blog, examinaremos a biblioteca de cache Golang com suporte para TTL, disk Persistence e Hash Data type.
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)
Isso tirará um instantâneo dos dados a cada 5 segundos e os salvará em um arquivo Snapshot.data. Por padrão, os instantâneos estão desabilitados e se o SnapshotInterval não for fornecido, o valor padrão é 5 segundos.
NOTA: Se EnableSnapshot for falso, os dados salvos no arquivo não serão importados
const ( ErrKeyNotFound = "key does not Exists" ErrFieldNotFound = "field does not Exists" ErrNotHashvalue = "not a Hash value/table" ErrHmsetDataType = "invalid data type, Expected Struct/Map" )
Estes são os erros comuns que podem ocorrer ao escrever o código. Essas variáveis fornecem um método de comparação de erros claro e fácil para determinar erros.
data,err := cache.Get("key") if err != nil { if err.Error() == goswift.ErrKeyNotFound { //do something } }
A cada 3 segundos, a função **sweeper **é chamada para limpar os valores expirados da tabela hash. Mantemos um heap mínimo que aponta para o mapa hash. O elemento superior será a chave com o menor TTL. percorremos a árvore até que o TTL seja maior que a hora atual.
Eu não aconselharia você a usar isso na produção!!, mas sinta-se à vontade para usá-lo em seu pequeno projeto paralelo. Experimente e se você encontrar um bug, crie um problema no repositório GitHub.
E-mail: [email protected]
Github: https://github.com/leoantony72
Repositório: https://github.com/leoantony72/goswift
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3