新しいプロジェクトを開始するたびにデータベースをセットアップする手間をかけずに、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 とディスク永続性を備えた高性能キャッシュを実現するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。