跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • go 超级萌新,求问 go-cache 的问题
未分類
22 9 月 2020

go 超级萌新,求问 go-cache 的问题

go 超级萌新,求问 go-cache 的问题

資深大佬 : hbolive 2

背景:刚过完 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(30*time.Second, 20*time.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;
}

先谢谢大家!

大佬有話說 (7)

  • 資深大佬 : rimutuyuan

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

  • 主 資深大佬 : hbolive

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

  • 資深大佬 : xkeyideal

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

  • 資深大佬 : CoolSpring

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

  • 資深大佬 : scukmh

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

  • 資深大佬 : xkeyideal

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

  • 主 資深大佬 : hbolive

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

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具