首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个文件系统缓存导致彼此之间的破坏

多个文件系统缓存导致彼此之间的破坏
EN

Stack Overflow用户
提问于 2014-12-05 20:42:13
回答 1查看 65关注 0票数 1

相对较新,我不知道我是在做一些愚蠢的事情(很可能),还是有一个bug (不太可能,因为我可能在做一些愚蠢的事情)。我有2个文件系统缓存在使用Beego的文件系统缓存。它们是两个独立的文件夹。当我尝试写入每个缓存,然后尝试检索值时,结果会混淆。据我所知,在Init()函数中,MyCache的创建被OtherCache覆盖:

代码语言:javascript
复制
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)
}

结果:

代码语言:javascript
复制
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",而不是“其他缓存”。而且,这个输出的第三行是wrong...value,应该是"myvalue",而不是"othervalue“。

我在这里做错什么了吗?(我的另一个选择是拥有一个文件系统缓存&更改密钥,但是管理两个不同的文件夹要容易得多,如果需要的话可以轻松删除整个缓存.不过,我宁愿知道我在这里做错了什么。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-05 21:23:57

请看一下NewCache函数的实现:

https://github.com/astaxie/beego/blob/master/cache/cache.go#L84

此包只允许每个适配器一个缓存。对同一个适配器的第二个NewCache调用将重新配置并返回相同的对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27324350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档