revel在服务器端提供了`cache`库用以低延迟的存储临时数据。它缓存那些需要经常访问数据库但是变化不频繁的数据,也可以实现用户会话的存储。

##有效期

一下三种方法为缓存元素设置过期时间:

1、 一个`time.Duration`值

2、`cache.DEFAULT`值, 应用程序范围的过期时间(默认为1小时)

3、`cache.FOREVER`值, 永不过期

注意,调用者不能过度以来缓存中的数据,因为这些数据不具备持久保持的能力,并且重启缓存时,这些数据都将被清空。

##序列化

缓存器的`getters`与`setters`会自动转换数据为调用者期望的类型:

1、如果数据是`[]byte`类类型,则不会再进行序列化

2、如果数据是任意整数类型,则以ASCII存储

3、否则,都以`encoding/gob`编码存储

##实现方式

缓存可以配置为下列实现之一:

1、一个`memcached`主机列表

2、一个基于内存的实现

##配置

在`app.conf`中以下列方式配置:

1、`cache.expires` - 能被`time.ParseDuration`处理的过期时间(默认为1小时)

2、`cache.memcached` - 布尔值,是否启用`memcached`(默认不启用)

3、`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)

最新文章

  1. 【基于WPF+OneNote+Oracle的中文图片识别系统阶段总结】之篇三:批量处理后的txt文件入库处理
  2. SQL Server调优系列进阶篇(查询语句运行几个指标值监测)
  3. jvm1
  4. 重设mysql的root密码,MAC OSX
  5. NOIP2003 加分二叉树
  6. iOS UISearchBar学习笔记
  7. SQLSERVER 的联接查询写法
  8. android app 集成 信鸽推送
  9. java_web学习(2)Servlet
  10. 通过HPS控制FPGA端的GPIO
  11. Oracle联机日志损坏解决办法
  12. win 10 dpi 缩放
  13. 第15章 使用EntityFramework Core进行配置和操作数据 - Identity Server 4 中文文档(v1.0.0)
  14. docker国内镜像源
  15. netmap配置
  16. 基于Eureka的服务治理
  17. 总是有个yumBackend.py阻止我用yum进行更新
  18. error:0906D064:PEM routines:PEM_read_bio:bad base64 decode
  19. Opencv threshold
  20. python excel处理

热门文章

  1. Java开发人员必须掌握的两个Linux魔法工具(四)
  2. Python开发之pip使用详解
  3. 算法进阶面试题03——构造数组的MaxTree、最大子矩阵的大小、2017京东环形烽火台问题、介绍Morris遍历并实现前序/中序/后序
  4. .net Core2.2 WebApi通过OAuth2.0实现微信登录
  5. ajax批量删除功能的实现源代码
  6. unity3d 给游戏添加音源 Unity3d adds a sound source to the game
  7. python——描述符
  8. BZOJ4374 : Little Elephant and Boxes
  9. BZOJ4714 : 旋转排列
  10. python 条件语句和基础数据类型