"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > टीटीएल और डिस्क पर्सिस्टेंस के साथ हाई-परफॉर्मेंस कैश पर जाएं

टीटीएल और डिस्क पर्सिस्टेंस के साथ हाई-परफॉर्मेंस कैश पर जाएं

2024-08-15 को प्रकाशित
ब्राउज़ करें:672

Go High-Performance Cache with TTL and Disk Persistence

1 परिचय

हर बार जब आप कोई नया प्रोजेक्ट शुरू करते हैं तो डेटाबेस स्थापित करने की परेशानी के बिना अपने गोलांग प्रोजेक्ट में तेजी लाएं। शुरू से ही डेटाबेस कॉन्फ़िगर करने से थक गए? केवल नई समस्याओं का सामना करने के लिए? आगे न देखें इस ब्लॉग में हम TTL, डिस्क पर्सिस्टेंस और हैश डेटा प्रकार के समर्थन के साथ गोलांग कैशिंग लाइब्रेरी पर गौर करेंगे।

गोस्विफ्ट

2. पूर्वावश्यकता

  • गोलंग का बुनियादी ज्ञान
  • एक सामान्य कैश कैसे काम करता है इसका ज्ञान

3.विशेषताएं

  1. सेट करें और कमांड प्राप्त करें
  2. अद्यतन आदेश
  3. डेल कमांड
  4. कमांड मौजूद है
  5. टीटीएल के लिए समर्थन
  6. डिस्क सेव के लिए समर्थन(स्नैपशॉट)
  7. हैश डेटा प्रकार का समर्थन करें (Hset, Hget, HgetAll, HMset)
  8. सुरक्षित लॉकिंग

सेट करें और आदेश प्राप्त करें

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, Hget, HgetAll, HMset)

// 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 सेकंड में डेटा का एक स्नैपशॉट लेगा और इसे एक स्नैपशॉट.डेटा फ़ाइल में सहेजेगा। डिफ़ॉल्ट रूप से स्नैपशॉट अक्षम हैं और यदि स्नैपशॉट अंतराल प्रदान नहीं किया गया है तो डिफ़ॉल्ट मान 5 सेकंड है।

नोट: यदि EnableSnapshot गलत है, तो फ़ाइल में सहेजा गया डेटा आयात नहीं किया जाएगा

त्रुटि प्रबंधन

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 सेकंड में **स्वीपर **फ़ंक्शन को हैश तालिका से समाप्त हो चुके मानों को हटाने के लिए कॉल किया जाता है। हम एक न्यूनतम ढेर बनाए रखते हैं जो हैश मैप की ओर इशारा करता है। शीर्ष तत्व सबसे छोटी टीटीएल वाली कुंजी होगी। हम पेड़ के पार तब तक चलते हैं जब तक टीटीएल वर्तमान समय से अधिक नहीं हो जाता।

सारांश

मैं आपको इसे उत्पादन में उपयोग करने की सलाह नहीं दूंगा!!, लेकिन बेझिझक इसे अपने छोटे साइड प्रोजेक्ट में उपयोग करें। इसे आज़माएं और यदि आपको कोई बग मिलता है तो GitHub रेपो पर एक समस्या बनाएं।

ईमेल:[email protected]
जीथब: https://github.com/leoantony72
रेपो: https://github.com/leoantony72/goswift

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/leoantony72/go-high-performance-cache-with-ttl-and-disk-persistence-4a4m?1 यदि कोई उल्लंघन है, तो कृपया [email protected] पर संपर्क करें इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3