새 프로젝트를 시작할 때마다 데이터베이스를 설정하는 번거로움 없이 Golang 프로젝트를 가속화하세요. 처음부터 데이터베이스를 구성하는 데 지치셨나요? 새로운 문제에 직면하게 될까요? 더 이상 보지 마세요. 이 블로그에서는 TTL, 디스크 지속성 및 해시 데이터 유형
을 지원하는 Golang 캐싱 라이브러리를 살펴볼 것입니다.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 저장소에 문제를 제기해 주세요.
이메일: leoantony102@gmail.com
Github: https://github.com/leoantony72
저장소: https://github.com/leoantony72/goswift
위 내용은 TTL 및 디스크 지속성을 갖춘 Go 고성능 캐시의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!