Ускорьте реализацию своих проектов на Golang без необходимости настраивать базу данных каждый раз, когда вы начинаете новый проект. Устали настраивать базы данных с нуля? Только чтобы столкнуться с новыми проблемами? Не ищите дальше. В этом блоге мы рассмотрим библиотеку кэширования Golang с поддержкой TTL, постоянства диска и типа хэш-данных.
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)
При этом каждые 5 секунд будет делаться снимок данных и сохраняться в файл Snapshot.data. По умолчанию снимки отключены, и если SnapshotInterval не указан, значение по умолчанию составляет 5 секунд.
ПРИМЕЧАНИЕ: Если EnableSnapshot имеет значение false, данные, сохраненные в файле, не будут импортированы
const ( ErrKeyNotFound = "key does not Exists" ErrFieldNotFound = "field does not Exists" ErrNotHashvalue = "not a Hash value/table" ErrHmsetDataType = "invalid data type, Expected Struct/Map" )
Это распространенные ошибки, которые могут возникнуть при написании кода. Эти переменные предоставляют вам понятный и простой метод сравнения ошибок для определения ошибок.
data,err := cache.Get("key") if err != nil { if err.Error() == goswift.ErrKeyNotFound { //do something } }
Каждые 3 секунды вызывается функция **sweaper ** для очистки просроченных значений из хеш-таблицы. Мы поддерживаем минимальную кучу, которая указывает на хеш-карту. Верхним элементом будет ключ с наименьшим TTL. мы проходим по дереву до тех пор, пока TTL не станет больше текущего времени.
Я бы не советовал вам использовать это в производстве!!, но не стесняйтесь использовать его в своем небольшом побочном проекте. Попробуйте, и если вы обнаружите ошибку, сообщите о ней в репозитории GitHub.
Электронная почта: [email protected]
Гитхаб: https://github.com/leoantony72
Репо: https://github.com/leoantony72/goswift
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3