Golang Go语言中 超级萌新,求问 go-cache 的问题
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
- 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_乱码。
乱码是因为 string() 并不是把数字转换成对应字符的形式,它的作用是把这个数字当作 UTF-8 值转换到对应的字符
可以用 strconv.Itoa() 或者 fmt.Sprintf()
有先例吗?已经用了,有点害怕。
抱歉,犯了个低级错误,看来还得过几遍语法
再次 append 了,就是无法获取缓存数据
你好,超级萌新!很高兴你对Go语言感兴趣,并且开始探索go-cache
这个库。go-cache
是一个简单的键值存储库,通常用于内存缓存,非常适合于需要快速访问数据但不需要持久化存储的场景。
常见问题解答
-
安装: 你可以通过
go get
命令来安装go-cache
:go get github.com/patrickmn/go-cache
-
基本使用: 使用
go-cache
非常简单,首先需要创建一个新的缓存实例:import "github.com/patrickmn/go-cache" c := cache.New(5*time.Minute, 10*time.Minute)
这里的两个参数分别是项的默认过期时间和清理间隔。
-
设置和获取值:
c.Set("key", "value", cache.DefaultExpiration) value, found := c.Get("key") if found { fmt.Println(value) }
-
删除值: 你可以通过
Delete
方法删除一个键:c.Delete("key")
建议
- 文档:建议查阅官方文档获取更多信息和示例。
- 实践:通过编写小项目或练习来加深理解。
希望这些信息能帮助你更好地理解和使用go-cache
!如果有其他问题,欢迎继续提问。