Browse Source

修复使用文件做缓存时无法反序列化的BUG

lifei6671 7 years ago
parent
commit
b732cbbdc8
2 changed files with 19 additions and 5 deletions
  1. 14 3
      cache/cache.go
  2. 5 2
      models/Blog.go

+ 14 - 3
cache/cache.go

@@ -4,7 +4,6 @@ import (
 	"github.com/astaxie/beego/cache"
 	"github.com/astaxie/beego/cache"
 	"time"
 	"time"
 	"encoding/gob"
 	"encoding/gob"
-	"fmt"
 	"bytes"
 	"bytes"
 	"errors"
 	"errors"
 	"github.com/astaxie/beego"
 	"github.com/astaxie/beego"
@@ -27,11 +26,23 @@ func Get(key string,e interface{}) error {
 		err := decoder.Decode(e)
 		err := decoder.Decode(e)
 
 
 		if err != nil {
 		if err != nil {
-			fmt.Println("反序列化对象失败 ->", err)
+			beego.Error("反序列化对象失败 ->", err)
 		}
 		}
 		return err
 		return err
+	}else if s,ok := val.(string); ok && s != "" {
+
+		buf := bytes.NewBufferString(s)
+
+		decoder := gob.NewDecoder(buf)
+
+		err := decoder.Decode(e)
+
+		if err != nil {
+		beego.Error("反序列化对象失败 ->", err)
+	}
+		return err
 	}
 	}
-	return errors.New("value is not []byte")
+	return errors.New("value is not []byte or string")
 }
 }
 
 
 func GetMulti(keys []string) []interface{} {
 func GetMulti(keys []string) []interface{} {

+ 5 - 2
models/Blog.go

@@ -104,11 +104,14 @@ func (b *Blog) Find(blogId int) (*Blog,error) {
 func (b *Blog) FindFromCache(blogId int) (blog *Blog,err error) {
 func (b *Blog) FindFromCache(blogId int) (blog *Blog,err error) {
 	key := fmt.Sprintf("blog-id-%d",blogId);
 	key := fmt.Sprintf("blog-id-%d",blogId);
 	var temp Blog
 	var temp Blog
-	if err := cache.Get(key,&temp); err == nil {
+	err = cache.Get(key,&temp);
+	if  err == nil {
 		b = &temp
 		b = &temp
 		b.Link()
 		b.Link()
-		beego.Info("从缓存读取文章成功 ->", key)
+		beego.Debug("从缓存读取文章成功 ->", key)
 		return b,nil
 		return b,nil
+	}else {
+		beego.Error("读取缓存失败 ->",err)
 	}
 	}
 
 
 	blog,err = b.Find(blogId)
 	blog,err = b.Find(blogId)