缓存管理(Cache)

中间件 cache 为 Macaron 实例 提供了缓存管理的功能。

下载安装

  1. go get github.com/go-macaron/cache

使用示例

  1. import (
  2. "github.com/go-macaron/cache"
  3. "gopkg.in/macaron.v1"
  4. )
  5.  
  6. func main() {
  7. m := macaron.Classic()
  8. m.Use(cache.Cacher())
  9.  
  10. m.Get("/", func(c cache.Cache) string {
  11. c.Put("cache", "cache middleware", 120)
  12. return c.Get("cache")
  13. })
  14.  
  15. m.Run()
  16. }

自定义选项

该服务允许接受一个参数来进行自定义选项(cache.Options):

  1. //...
  2. m.Use(cache.Cacher(cache.Options{
  3. // 适配器的名称,默认为 "memory".
  4. Adapter: "memory",
  5. // 适配器的配置,根据适配器而不同
  6. AdapterConfig: "",
  7. // GC 执行时间间隔,默认为 60 秒
  8. Interval: 60,
  9. // 配置分区名称,默认为 "cache"
  10. Section: "cache",
  11. }))
  12. //...

适配器

目前有 8 款内置的适配器,除了 内存文件 提供器外,您都必须显式导入其它适配器的驱动。

以下为适配器的基本用法:

内存

  1. //...
  2. m.Use(cache.Cacher())
  3. //...

文件

  1. //...
  2. m.Use(cache.Cacher(cache.Options{
  3. Adapter: "file",
  4. AdapterConfig: "data/caches",
  5. }))
  6. //...

Redis

特别注意 只能存取 string 和 int 相关类型。

  1. import _ "github.com/go-macaron/cache/redis"
  2.  
  3. //...
  4. m.Use(cache.Cacher(cache.Options{
  5. Adapter: "redis",
  6. // e.g.: network=tcp,addr=127.0.0.1:6379,password=macaron,db=0,pool_size=100,idle_timeout=180,hset_name=MacaronCache,prefix=cache:
  7. AdapterConfig: "addr=127.0.0.1:6379,password=macaron",
  8. OccupyMode: false,
  9. }))
  10. //...

当您使用 Redis 作为缓存器时,可以通过将 OccupyMode 的值设置为 true 来启用独占模式。在该模式下,缓存器将直接占用所选用的整个数据库,而不是通过维护一个索引集合来判断哪些数据是属于您的应用的。当您的缓存数据非常巨大时,该模式可以有效降低应用的 CPU 和内存使用率。

Memcache

  1. import _ "github.com/go-macaron/cache/memcache"
  2.  
  3. //...
  4. m.Use(cache.Cacher(cache.Options{
  5. Adapter: "memcache",
  6. // e.g.: 127.0.0.1:9090;127.0.0.1:9091
  7. AdapterConfig: "127.0.0.1:11211",
  8. }))
  9. //...

PostgreSQL

可以使用以下 SQL 语句创建数据库:

  1. CREATE TABLE cache (
  2. key CHAR(32) NOT NULL,
  3. data BYTEA,
  4. created INTEGER NOT NULL,
  5. expire INTEGER NOT NULL,
  6. PRIMARY KEY (key)
  7. );
  1. import _ "github.com/go-macaron/cache/postgres"
  2.  
  3. //...
  4. m.Use(cache.Cacher(cache.Options{
  5. Adapter: "postgres",
  6. AdapterConfig: "user=a password=b host=localhost port=5432 dbname=c sslmode=disable",
  7. }))
  8. //...

MySQL

可以使用以下 SQL 语句创建数据库:

  1. CREATE TABLE `cache` (
  2. `key` CHAR(32) NOT NULL,
  3. `data` BLOB,
  4. `created` INT(11) UNSIGNED NOT NULL,
  5. `expire` INT(11) UNSIGNED NOT NULL,
  6. PRIMARY KEY (`key`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  1. import _ "github.com/go-macaron/cache/mysql"
  2.  
  3. //...
  4. m.Use(cache.Cacher(cache.Options{
  5. Adapter: "mysql",
  6. AdapterConfig: "username:password@protocol(address)/dbname?param=value",
  7. }))
  8. //...

Ledis

  1. import _ "github.com/go-macaron/cache/ledis"
  2.  
  3. //...
  4. m.Use(cache.Cacher(cache.Options{
  5. Adapter: "ledis",
  6. AdapterConfig: "data_dir=./app.db,db=0",
  7. }))
  8. //...

Nodb

  1. import _ "github.com/go-macaron/cache/nodb"
  2.  
  3. //...
  4. m.Use(cache.Cacher(cache.Options{
  5. Adapter: "nodb",
  6. AdapterConfig: "data/cache.db",
  7. }))
  8. //...