缓存管理(Cache)

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

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

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

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

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

    文件

    1. import _ "github.com/go-macaron/cache/redis"
    2. //...
    3. m.Use(cache.Cacher(cache.Options{
    4. Adapter: "redis",
    5. // 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:
    6. AdapterConfig: "addr=127.0.0.1:6379,password=macaron",
    7. OccupyMode: false,
    8. }))
    9. //...

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

    Memcache

    1. import _ "github.com/go-macaron/cache/memcache"
    2. //...
    3. m.Use(cache.Cacher(cache.Options{
    4. Adapter: "memcache",
    5. // e.g.: 127.0.0.1:9090;127.0.0.1:9091
    6. }))
    7. //...
    1. CREATE TABLE cache (
    2. data BYTEA,
    3. created INTEGER NOT NULL,
    4. expire INTEGER NOT NULL,
    5. PRIMARY KEY (key)
    6. );

    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. m.Use(cache.Cacher(cache.Options{
    4. Adapter: "mysql",
    5. AdapterConfig: "username:password@protocol(address)/dbname?param=value",
    6. }))
    7. //...
    1. import _ "github.com/go-macaron/cache/ledis"
    2. //...
    3. m.Use(cache.Cacher(cache.Options{
    4. Adapter: "ledis",
    5. AdapterConfig: "data_dir=./app.db,db=0",
    6. //...

    Nodb