A lightweight in-memory key-value store for Go with:
- Generic key & value types
- Per-key TTL (expiration)
- Thread-safe access (RWMutex)
- Persistence with
gob(atomic writes with temp + rename) - Simple file management (
Load,Persist,DeleteFile)
go get github.com/Serajian/cache-db@latestDefine Database
package main
import (
"fmt"
"time"
"github.com/Serajian/cache-db.git/database"
)
func main() {
// Create a DB with string keys and string values.
// Default TTL = 2 seconds, data persisted under ./data directory.
db := database.NewDatabase[string, string](2*time.Second, "./data")
// Set a key with default TTL
db.Set("foo", "bar")
// Persist to disk
if err := db.Persist("test.gob"); err != nil {
panic(err)
}
// Load into a fresh DB
db2 := database.NewDatabase[string, string](0, "./data")
if err := db2.Load("test.gob"); err != nil {
panic(err)
}
// Retrieve
if v, ok := db2.Get("foo"); ok {
fmt.Println("Loaded value:", v)
}
// TTL expiry check
time.Sleep(3*time.Second)
if _, ok := db2.Get("foo"); !ok {
fmt.Println("foo expired as expected")
}
// Delete file
if err := db2.DeleteFile("test.gob"); err != nil {
panic(err)
}
}