Go 中使用 memcache 存储对象

之于B/S端用http连接,像mysql,redis,memcache 这种服务端之间的交流,通常直接采用TCP通信。而对于缓存的内存存储,过期时间是必备,进行必要的对象序列化编码也不可缺。本文用memcache存储,采用标准库中的json编解码,当然你也可用gob。

memcache

  • 安装服务端memcache
  • 引入相关go客户端

Go中使用memcache存储对象

对象序列化

标准库json编解码直接拿来用,省心

 func DecodeData(raw []byte) (dog Dog, err error) {
     err = json.Unmarshal(raw, &dog)
     return dog, err
 }

 func EncodeData(dog Dog) []byte {
     enc, err := json.Marshal(dog)
     if err != nil {
         fmt.Println("Error encoding Action to JSON", err)
     }
     return enc
 }

缓存命中

  • 建立连接
  • 缓存命中检查
  • 构建缓存实例
 func main() {
     //  连接服务
     mc := memcache.New("127.0.0.1:11211")
     // 尝试拉取缓存
     fetchItem, err := mc.Get("dog")
     // 检查缓存是否命中
     if err != memcache.ErrCacheMiss {
         if err != nil {
             fmt.Println("Error fetching from memcache", err)
         } else {
             fmt.Println("Cache hit!")
             dog, err := DecodeData(fetchItem.Value)
             if err != nil {
                 fmt.Println("Error decoding data from memcache", err)
             } else {
                 fmt.Println("Dog name is:", dog.Name)
             }
         }
     }
    // 创建待缓存对象实例
     spot := Dog{Name: "Spot", Color: "brown"}
    // 构建memcache item实例以备入库
     setItem := memcache.Item{
         Key:        "dog",
         Value:      EncodeData(spot),
         Expiration: 300,
     }
    // 进入内存缓存
     err = mc.Set(&setItem)
     if err != nil {
         fmt.Println("Error setting memcache item", err)
     }

测试

Go 中使用 memcache 存储对象

本作品采用《CC 协议》,转载必须注明作者和本文链接
pardon110
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
开发者 @ 社科大
文章
133
粉丝
24
喜欢
101
收藏
56
排名:105
访问:8.9 万
私信
所有博文
社区赞助商