beego 的 cache 模块是用来做数据缓存的,目前支持 file、memcache、memory 和 redis 四种引擎,安装方式如下:
go get github.com/astaxie/beego/cache
下面我们来看下四种cache引擎的使用方法吧。
一、memory引擎的cache使用
// 引入包 import "github.com/astaxie/beego/cache" func (c *MemoryCacheController) Get() { // 初始化缓存对象,参数:memory类型cache引擎和memory的过期时间(单位秒),返回值:cache类型的接口(该接口有一系列方法)和错误信息 ac, err := cache.NewCache("memory", `{"interval":"360"}`) if err != nil { fmt.Println("NewCache failed, err:", err) } // Put方法:往缓存里存储数据(key, value, 过期时间) err = ac.Put("name","优选工具", 360) if err != nil { fmt.Println("put name failed err:", err) } err = ac.Put("age",18, 360) if err != nil { fmt.Println("put age failed err:", err) } // Get方法:查询缓存里的一条数据,根据key查询 name := ac.Get("name") age := ac.Get("age") fmt.Println("get name:", name) fmt.Println("get age:", age) // GetMulti方法:查询多条数据(注意:用Get方法获取数据后缓存里的数据就没有了,所以需要重新Put数据才可以用GetMulti方法获取数据) keys := []string{"name","age"} values := ac.GetMulti(keys) fmt.Println("getmulti:",values) // 判断key是否存在(注意:用Get方法获取数据后缓存里的数据就没有了,所以需要重新Put数据才可以判断数据存不存在) fmt.Println("is_exist:",ac.IsExist("name")) // 注意:memory类型的cache:同一个key名字put一次只支持获取一次,第二次获取不到值 // Delete:单个key删除 err1 := ac.Delete("name") if err1 != nil { fmt.Println("delete failed ,err :", err) } name1 := ac.Get("name") age1 := ac.Get("age") fmt.Println("get name:", name1) fmt.Println("get age:", age1) // Clearall:删除所有key err2 := ac.ClearAll() fmt.Println(err2) // Incr:key对应的值(int类型)自加一 ac.Put("age", 18, 360) ac.Incr("age") fmt.Println(ac.Get("age")) // Decr:key对应的值(int类型)自减一 ac.Put("age", 18, 360) ac.Decr("age") ac.Decr("age") fmt.Println(ac.Get("age")) }
二、file引擎的cache使用
// 引入包 import "github.com/astaxie/beego/cache" func (c *FileCacheController) Get() { /* 初始化缓存对象,返回值:cache类型的接口(该接口有一系列方法)和错误信息 参数: CachePath:缓存的文件目录 FileSuffix:文件后缀 DirectoryLevel:目录层级 EmbedExpiry:过期时间,字符串类型 */ ac, err := cache.NewCache("file", `{"CachePath":"./cache_file","FileSuffix":"cache","DirectoryLevel":"2","EmbedExpiry":"120"}`) if err != nil { fmt.Println("NewCache failed, err:", err) } // put方法:往缓存里存数据 ac.Put("name","优选短链接", 120) ac.Put("age",18,120) if ac.IsExist("name") { fmt.Println("get name",ac.Get("name")) } // get方法:单条获取数据 fmt.Println("get name",ac.Get("name")) // GetMulti方法:查询多条数据 keys := []string{"name","age"} values := ac.GetMulti(keys) fmt.Println("getmulti:",values) // delete:删除单个key ac.Delete("name") fmt.Println("get name",ac.Get("name")) // Incr方法:key的值自加一 ac.Incr("age") fmt.Println(ac.Get("age")) // decr方法:key的值自减一 ac.Decr("age") ac.Decr("age") fmt.Println(ac.Get("age")) // ClearAll:file引擎的clearall方法不好用(待验证) err1 := ac.ClearAll() if err1 != nil { fmt.Println("clear all failed, err:", err1) } fmt.Println("clear all:",ac.Get("age")) }
三、memcache引擎的cache使用
// 导入包 import ( "github.com/astaxie/beego/cache" _ "github.com/astaxie/beego/cache/memcache" ) func (c *MemcacheCacheController) Get() { /* 初始化缓存对象,返回值:cache类型的接口(该接口有一系列方法)和错误信息 参数:conn:memcached的连接信息 */ ac, err := cache.NewCache("memcache", `{"conn":"127.0.0.1:11211"}`) if err != nil { fmt.Println("NewCache failed, err:", err) } // put ac.Put("name", "优选二维码", 120) if ac.IsExist("name") { name := ac.Get("name") fmt.Println("get name",name) } // 方法就那几个,自行验证即可 }
四、redis引擎的cache使用
// 导入包 import ( "github.com/astaxie/beego/cache" _ "github.com/astaxie/beego/cache/redis" ) func (c *RedisCacheController) Get() { /* 初始化缓存对象,返回值:cache类型的接口(该接口有一系列方法)和错误信息 参数: key:redis链接的名称(如key设置为:szy,然后往redis里写入key的名字为name,在redis里查询得到:"szy:name",如果不设置key默认key字段的值为:beeCacheRedis) conn:redis连接信息 dbNum:哪个库 password:redis密码 */ ac, err := cache.NewCache("redis", `{"key":"szy","conn":"127.0.0.1:6379","dbNum":"0"}`) if err != nil { fmt.Println("NewCache failed, err:", err) } // 往redis里写数据 err1 := ac.Put("name","devops测试", time.Second * 60) if err1 != nil { fmt.Println("put data failed, err:", err1) } // 从redis里读数据 if ac.IsExist("name") { fmt.Println(ac.Get("name")) } fmt.Println(ac.Get("name")) // 其他方法自行验证 }