Go Revel - Cache(缓存)
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(缓存)的更多相关文章
- 注释驱动的 Spring cache 缓存介绍
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- 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 ...
- [转]注释驱动的 Spring cache 缓存介绍
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-spring-cache/ 概述 Spring 3.1 引入了激动人心的基于注释(an ...
- paip.cache 缓存架构以及性能提升总结
paip.cache 缓存架构以及性能提升总结 1 缓存架构以及性能(贯穿读出式(LookThrough) 旁路读出式(LookAside) 写穿式(WriteThrough) 回写式 ...
- Cache缓存对象缓存对象
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DemoCache.aspx ...
- 注释驱动的 Spring cache 缓存介绍--转载
概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...
- MemCache缓存和C#自带的Cache缓存
1.MemCache: //初始化 static SockIOPool _pool; // 创建Memcached private static MemcachedClient Create(stri ...
- google guava cache缓存基本使用讲解
代码地址:https://github.com/vikde/demo-guava-cache 一.简介 guava cache是google guava中的一个内存缓存模块,用于将数据缓存到JVM内存 ...
- Django学习之十二:Cache 缓存组件
目录 Django Cache 缓存组件 缓存逻辑伪代码 配置缓存源 可配置参数说明 01. Django的默认缓存 02. 基于Redis的django-redis 03. 自定义cache 04. ...
随机推荐
- ISO9000和CMM
ISO9000和CMM,谁更适合软件开发? ISO9000 和 CMM 是国际上通用的软件质量评估和管理方法.二者有很多相似之处,它们的实施都可以改变软件开发的不规范.文档不齐.维护跟不上.质量漏洞多 ...
- 极客无极限 一行HTML5代码引发的创意大爆炸
摘要:一行HTML5代码能做什么?国外开发者Jose Jesus Perez Aguinaga写了一行HTML5代码的文本编辑器.这件事在分享到Code Wall.Hacker News之后,引起了众 ...
- pycharm-2018.1.6永久激活(本人使用的是centos7)
1. 从官网下载pycharm-2018.1.6, 下的是PyCharm Professional Edition版本的 (水平有限版本太高,激活不了) pycharm官网: https://www. ...
- LSTM(长短期记忆网络)及其tensorflow代码应用
本文主要包括: 一.什么是LSTM 二.LSTM的曲线拟合 三.LSTM的分类问题 四.为什么LSTM有助于消除梯度消失 一.什么是LSTM Long Short Term 网络即为LSTM,是一种 ...
- Python图形编程探索系列-07-程序登录界面设计
设计任务 初步设计程序登录界面,详细分析设计步骤. 程序详细分析 基本框架设计 import tkinter as tk import tkinter.messagebox root = tk.Tk( ...
- Java并发程序设计(十)设计模式与并发之Future模式
设计模式与并发之Future模式 核心思想:异步调用. /** * @author: Tang Jiujia * @version: 2017/9/18 0018 15:22 */ public in ...
- 潭州课堂25班:Ph201805201 爬虫基础 第十五课 js破解 二 (课堂笔记)
PyExecJs使用 PyExecJS是Ruby的ExecJS移植到Python的一个执行JS代码的库. 安装 pip install PyExecJS 例子 >>> import ...
- 常用类及 LeetCode 每日一题
1 日期时间类 在 Java 语言中,是通过时间戳来表示时间的.所谓的时间戳,在 Java 中就是指当前时间距离历元(1970-01-01 00:00:00)的时间间隔,单位是毫秒,所以 Java 中 ...
- linux命令(及解压tar.gz文件)
https://wenku.baidu.com/view/f5805017866fb84ae45c8df3.html 1.压缩命令: 命令格式:tar -zcvf 压缩文件名.tar.gz ...
- CocosCreator小栗子
主要是了解了场景切换的API,见下: 开始场景和结束场景内,按钮挂相同的Btn脚本,主要是切换到场景2中: Btn脚本如下, onLoad:function() { this.node.on('mou ...