相对较新的Go和我无法弄清楚我是否做了一些愚蠢的事情(很可能)或者是否有一个错误(不太可能,因为我可能做了一些愚蠢的事情)。我使用Beego's filesystem cache有2个文件系统缓存。它们是两个独立的文件夹。当我尝试写入每个缓存时,然后尝试检索结果混淆的值。据我所知,MyCache的创建被Init()函数中的OtherCache覆盖:
package main
import (
"github.com/astaxie/beego/cache"
"log"
)
var (
MyCache cache.Cache
OtherCache cache.Cache
err error
)
func Init() {
if MyCache, err = cache.NewCache("file", `{"CachePath":".cache/mycache","FileSuffix":".cache","DirectoryLevel":1,"EmbedExpiry":10}`); err != nil {
log.Println(err)
}
if OtherCache, err = cache.NewCache("file", `{"CachePath":".cache/othercache","FileSuffix":".cache","DirectoryLevel":1,"EmbedExpiry":10}`); err != nil {
log.Println(err)
}
}
func checkCache(c cache.Cache, k string) string {
b := c.Get(k)
return b.(string)
}
func writeCache(c cache.Cache, k string, v string) {
if err := c.Put(k, v, 10); err != nil {
log.Println(err)
}
}
func main() {
log.SetFlags(log.Lshortfile)
Init()
log.Println(MyCache)
log.Println(OtherCache)
// write to MyCache
mykey := "mykey"
myvalue := "myvalue"
writeCache(MyCache, mykey, myvalue)
// write to OtherCache
othervalue := "othervalue"
writeCache(OtherCache, mykey, othervalue)
// Get MyCache value
myv := checkCache(MyCache, mykey)
log.Println("MyCache:", myv, myv == myvalue)
// Get OtherCache value
otherv := checkCache(OtherCache, mykey)
log.Println("OtherCache:", otherv, otherv == othervalue)
}
结果:
tester.go:34: &{/home/desktop-admin/Desktop/eclipse/go/src/testfolder/tester/.cache/othercache .cache 2 0}
tester.go:35: &{/home/desktop-admin/Desktop/eclipse/go/src/testfolder/tester/.cache/othercache .cache 2 0}
tester.go:47: MyCache: othervalue false
tester.go:51: OtherCache: othervalue true
此输出的第一行应指向“mycache”,而不是“othercache”。此外,此输出的第三行是错误的...值应为“myvalue”,而不是“othervalue”。
我在这里做错了吗? (我的另一个选择是拥有1个文件系统缓存并更改密钥,但管理2个不同的文件夹更容易,并且如果需要,可以轻松删除整个缓存....我宁愿知道我做错了什么但是,这里)
答案 0 :(得分:0)
看一下NewCache函数的实现:
https://github.com/astaxie/beego/blob/master/cache/cache.go#L84
此程序包仅允许每个适配器使用一个缓存。对同一适配器的第二次NewCache调用将重新配置并返回相同的对象。