Golang Go语言中 超级萌新,求问 go-cache 的问题

发布于 1周前 作者 ionicwang 来自 Go语言

Golang Go语言中 超级萌新,求问 go-cache 的问题
背景:刚过完 go 语法,还没入门那种,现在有个 go-cache 的例子,有 3 个问题请教大家
目的:设置缓存,在缓存未过期时从缓存读取数据,如果读取失败,则将缓存内容写入缓存;最后将内容打印出来。

package main

import (
“fmt”
“time”

github.com/patrickmn/go-cache
)

func main() {
var id cateId = 20
data := id.getCache()
fmt.Println(data)
}

type cateId int

func (id cateId) getCache() string {
cacheName := “cache_20”
//cacheName := “cache_” + string(id)
c := cache.New(30time.Second, 20time.Second)
value, found := c.Get(cacheName)
if found {
return value.(string)
} else {
c.Set(cacheName, “testdata_20”, cache.DefaultExpiration)
return “testdata_200”
//return “testdata_” + string(id) //始终输出 testdata_
}
}

问题 1:编译后执行得到的结果始终是 testdata_200,缓存 30 秒过期,第一次执行得到 testdata_200 正常,为什么第二次执行得到的不是缓存数据 testdata_20 呢?莫非 go-cache 在程序运行结束,缓存也消失了?

问题 2://return “testdata_” + string(id) //始终输出 testdata_,而不是输出 testdata_20 ?在 windows 命令行窗口 20 是个乱码,其他终端下运行直接没有

问题 3:我这样写符合大众习惯吗?毕竟这个写法跟我以前用 PHP/Python 差别挺大的。。

PHP 为例:
$data = $this->_getCache(20);

protected _getCache(cateId)
{
$data = Cache->get(‘cacheName’);
if( !$data ){
$data = ‘一些数据’
Cache->set(‘cacheName’, $data);
}
return $data;
}

先谢谢大家!


更多关于Golang Go语言中 超级萌新,求问 go-cache 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

8 回复
  1. cache 存储在内存,程序退出后内存都释放掉了,key 也不存在了
    添加以下代码可以实现你期望的结果
    data2 := id.getCache()
    fmt.Println(data2)

更多关于Golang Go语言中 超级萌新,求问 go-cache 的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢,已经搞清楚了了,缓存随着运行结束,也会释放掉。
现在加了个 for 循环,让程序一直运行,但是还是一直输出 testdata_200,而不是 testdata_20,就像主贴里一样,很奇怪。
现在 append 了一下,想缓存名字与 id 关联起来,结果 CMD 下执行,输出的就是 testdata_乱码。

既然是萌新就不说了,这个沙雕 cache 库别用,流量大了,你就可以收拾包裹滚蛋了

乱码是因为 string() 并不是把数字转换成对应字符的形式,它的作用是把这个数字当作 UTF-8 值转换到对应的字符
可以用 strconv.Itoa() 或者 fmt.Sprintf()

有先例吗?已经用了,有点害怕。

要啥先例,一个 cache 都去找开源的,找就找了,也看看源码呀,这个裤子的过期操作简直是智障,抓紧换了吧

抱歉,犯了个低级错误,看来还得过几遍语法
再次 append 了,就是无法获取缓存数据

你好,超级萌新!很高兴你对Go语言感兴趣,并且开始探索go-cache这个库。go-cache是一个简单的键值存储库,通常用于内存缓存,非常适合于需要快速访问数据但不需要持久化存储的场景。

常见问题解答

  1. 安装: 你可以通过go get命令来安装go-cache

    go get github.com/patrickmn/go-cache
    
  2. 基本使用: 使用go-cache非常简单,首先需要创建一个新的缓存实例:

    import "github.com/patrickmn/go-cache"
    
    c := cache.New(5*time.Minute, 10*time.Minute)
    

    这里的两个参数分别是项的默认过期时间和清理间隔。

  3. 设置和获取值

    c.Set("key", "value", cache.DefaultExpiration)
    value, found := c.Get("key")
    if found {
        fmt.Println(value)
    }
    
  4. 删除值: 你可以通过Delete方法删除一个键:

    c.Delete("key")
    

建议

  • 文档:建议查阅官方文档获取更多信息和示例。
  • 实践:通过编写小项目或练习来加深理解。

希望这些信息能帮助你更好地理解和使用go-cache!如果有其他问题,欢迎继续提问。

回到顶部