Go Revel - Cache(缓存)

revel在服务器端提供了`cache`库用以低延迟的存储临时数据。它缓存那些须要常常访问数据库可是变化不频繁的数据,也能够实现用户会话的存储。 ##有效期 一下三种方法为缓存元素设置过时时间: 一、 一个`time.Duration`值 二、`cache.DEFAULT`值, 应用程序范围的过时时间(默认为1小时) 三、`cache.FOREVER`值, 永不过时 注意,调用者不能过分以来缓存中的数据,由于这些数据不具有持久保持的能力,而且重启缓存时,这些数据都将被清空。 ##序列化 缓存器的`getters`与`setters`会自动转换数据为调用者指望的类型: 一、若是数据是`[]byte`类类型,则不会再进行序列化 二、若是数据是任意整数类型,则以ASCII存储 三、不然,都以`encoding/gob`编码存储 ##实现方式 缓存能够配置为下列实现之一: 一、一个`memcached`主机列表 二、一个基于内存的实现 ##配置 在`app.conf`中如下列方式配置: 一、`cache.expires` - 能被`time.ParseDuration`处理的过时时间(默认为1小时) 二、`cache.memcached` - 布尔值,是否启用`memcached`(默认不启用) 三、`cache.hosts` - 以`,`逗号分割的主机列表,只有当`memcached`启用时才有效。 ##使用示例 下面示例包含了经常使用的操做,要注意的是,若是不须要取得返回结果来对请求作进一步处理的话,那么最好在一个`goroutine`中去处理缓存。 import ( "github.com/robfig/revel" "github.com/robfig/revel/cache" ) func (c App) ShowProduct(id string) revel.Result { var product Product if err := cache.Get("product_"+id, &product); err != nil { product = loadProduct(id) go cache.Set("product_"+id, product, 30*time.Minute) } return c.Render(product) } func (c App) AddProduct(name string, price int) revel.Result { product := NewProduct(name, price) product.Save() return c.Redirect("/products/%d", product.id) } func (c App) EditProduct(id, name string, price int) revel.Result { product := loadProduct(id) product.name = name product.price = price go cache.Set("product_"+id, product, 30*time.Minute) return c.Redirect("/products/%d", id) } func (c App) DeleteProduct(id string) revel.Result { product := loadProduct(id) product.Delete() go cache.Delete("product_"+id) return c.Redirect("/products") } ##存储会话 `Cache`缓存器具备全局的key空间 - 使用它存储会话,调用着应当使用会话的UUID来做为key。 cache.Set(c.Session.Id(), products) // 在后续的请求中 err := cache.Get(c.Session.Id(), &products)
相关文章
相关标签/搜索