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)

Go Revel - Cache(缓存)的更多相关文章

  1. 注释驱动的 Spring cache 缓存介绍

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  2. Windows Azure Cloud Service (43) 使用Azure In-Role Cache缓存(2)Dedicated Role

    <Windows Azure Platform 系列文章目录> Update 2016-01-12 https://azure.microsoft.com/zh-cn/documentat ...

  3. [转]注释驱动的 Spring cache 缓存介绍

    原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...

  4. paip.cache 缓存架构以及性能提升总结

    paip.cache 缓存架构以及性能提升总结 1         缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...

  5. Cache缓存对象缓存对象

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoCache.aspx ...

  6. 注释驱动的 Spring cache 缓存介绍--转载

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  7. MemCache缓存和C#自带的Cache缓存

    1.MemCache: //初始化 static SockIOPool _pool; // 创建Memcached private static MemcachedClient Create(stri ...

  8. google guava cache缓存基本使用讲解

    代码地址:https://github.com/vikde/demo-guava-cache 一.简介 guava cache是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存 ...

  9. Django学习之十二:Cache 缓存组件

    目录 Django Cache 缓存组件 缓存逻辑伪代码 配置缓存源 可配置参数说明 01. Django的默认缓存 02. 基于Redis的django-redis 03. 自定义cache 04. ...

随机推荐

  1. treap(树堆)

    一棵treap是一棵修改了结点顺序的二叉查找树,如图,显示一个例子,通常树内的每个结点x都有一个关键字值key[x],另外,还要为结点分配priority[x],它是一个独立选取的随机数. 假设所有的 ...

  2. 前端性能优化 —— 减少HTTP请求

    简要:对于影响页面呈选 的因素有3个地方:服务器连接数据库并计算返回数据 , http请求以及数据(文件)经过网络传输 , 文件在浏览器中计算渲染呈选: 其中大约80%的时间都耗在了http请求上,所 ...

  3. window7 更改电脑黑屏时间

    无废话--------------------Window7 更改电脑黑屏时间,步骤如下: 1.进入‘控制面板’,通过开始页面或通过计算机我的电脑中的打开‘控制面板’都可以打开. 2.系统与安全类别下 ...

  4. Linux学习笔记15—RPM包的安装OR源码包的安装

    RPM安装命令1. 安装一个rpm包rpm –ivh 包名“-i” : 安装的意思“-v” : 可视化“-h” : 显示安装进度另外在安装一个rpm包时常用的附带参数有:--force : 强制安装, ...

  5. linux 启动 Oracle 实例

    启动数据库实例,分为两步:第一步,启动监听:第二步,启动数据库实例. 一.如何启动数据库实例 1.进入到sqlplus启动实例 --“切换到oracle用户” su - oracle --“打开监听” ...

  6. tomcat支持https的server.xml配置

    访问地址:https://127.0.0.1/testWeb/mySevlet?url=123&action=aaa server.xml: <?xml version='1.0' en ...

  7. 微信小程序- 提示不在以下合法域名列表中

    第一次开发微信小程序时在访问后台数据时总是提示 提示上面问题主要有两个原因: 1.为配置安全合法域名列表: 微信小程序在开发时需要在官网配置固定的数据来源网站: 登录小程序平台中->设置: 图中 ...

  8. Nginx反向代理WebSocket

    http { upstream websocket { server 192.168.1.1:8010; } server { listen 8020; location / { proxy_pass ...

  9. 原创:vsphere概念深入系列三:vSphere命令行管理

    假设无法近距离接触物理主机,只能远程命令行管理,. 以下命令行可以起到点作用. 首先需要安装vSphere CLI工具. 启动后界面: 1.查看datastore内容 所有命令行工具都可以加上-ser ...

  10. JDK自带jvisualvm监控工具

    定位 工具位于jdk\bin目录下(双击运行): 可以本地或者远程调试,本地调试会自动加载,远程调试需要配置.下面以Tomcat为例. 概述 监视 线程 抽样器 Java 堆 百度经验参考:https ...