第1种,使用sync.Map 代码示例
import ( "fmt" "sync" "time" ) func main() { var cache sync.Map // 存储数据到缓存 cache.Store("key1", "value1") cache.Store("key2", 20) // 读取数据 if value, ok := cache.Load("key1"); ok { fmt.Println(value) } // 遍历缓存 cache.Range(func(key, value interface{}) bool { fmt.Printf("Key: %v, Value: %v\n", key, value) return true }) // 删除数据 cache.Delete("key1") }
第2种,使用第三方库 github.com/patrickmn/go-cache
import ( "fmt" "time" "github.com/patrickmn/go-cache" ) func main() { c := cache.New(5*time.Minute, 10*time.Minute) // 添加数据到缓存 c.Set("key1", "value1", cache.DefaultExpiration) c.Set("key2", 20, time.Minute) // 获取数据 if value, found := c.Get("key1"); found { fmt.Println(value) } // 遍历缓存 for key, value := range c.Items() { fmt.Printf("Key: %v, Value: %v\n", key, value.Object) } // 删除数据 c.Delete("key1") }
第3种,自己实现简单的缓存结构
import ( "fmt" "time" ) type CacheItem struct { Value interface{} Expiration time.Time } type Cache struct { items map[string]CacheItem } func (c *Cache) Set(key string, value interface{}, expiration time.Duration) { c.items[key] = CacheItem{ Value: value, Expiration: time.Now().Add(expiration), } } func (c *Cache) Get(key string) interface{} { if item, exists := c.items[key]; exists && time.Now().Before(item.Expiration) { return item.Value } return nil } func (c *Cache) Delete(key string) { delete(c.items, key) } func main() { c := &Cache{items: make(map[string]CacheItem)} c.Set("key1", "value1", time.Minute) if value := c.Get("key1"); value!= nil { fmt.Println(value) } }
第4种 Redis 缓存的示例代码
package main import ( "fmt" "github.com/go-redis/redis" ) func main() { // 创建 Redis 客户端 client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", // Redis 服务器地址和端口 Password: "", // 如果有密码,在此设置 DB: 0, // 选择数据库 }) // 测试连接 pong, err := client.Ping().Result() if err!= nil { fmt.Println("连接 Redis 失败:", err) return } fmt.Println("连接成功:", pong) // 设置键值对 err = client.Set("key1", "value1", 0).Err() if err!= nil { fmt.Println("设置值失败:", err) return } // 获取值 value, err := client.Get("key1").Result() if err!= nil { fmt.Println("获取值失败:", err) return } fmt.Println("获取的值:", value) // 关闭 Redis 客户端连接 defer client.Close() }
请注意,在实际应用中,您可能需要处理更多的错误情况,并根据具体的业务需求进行更复杂的操作,如批量操作、数据类型的处理等。同时,如果您的 Redis 服务器不是在本地运行,需要将 Addr 参数修改为实际的服务器地址和端口。
文章出处:在线工具800
