对于 Goravel

Goravel 是一个性能齐备、具备良好扩大能力的 Web 应用程序框架。 作为一个起始脚手架帮忙 Golang 开发者疾速构建本人的利用。
我的项目地址:https://github.com/goravel/goravel
欢送 star 与 issues :)

缓存模块

介绍

Goravel 提供了可拓展的缓存模块。该模块能够应用 facades.Cache 进行操作。

配置

config/cache.php 中进行所有自定义配置。容许配置不同的缓存驱动,默认应用 redis,你也能够自定义驱动,能够进入配置文件进行查看。

可用的缓存驱动

名称形容
redisRedis 驱动
custom自定义驱动

缓存应用

从缓存中获取数据

value := facades.Cache.Get("goravel", func() interface{} {    return "default"})

你能够传递一个 func 作为默认值。如果指定的数据在缓存中不存在,将返回 func 的后果。传递闭包的办法容许你从数据库或其余内部服务中获取默认值。留神闭包构造 func() interface{}

value := facades.Cache.Get("goravel", func() interface{} {    return "default"})

查看缓存项是否存在

value := facades.Cache.Has("goravel")

获取和存储

有时你可能想从缓存中获取一个数据,而当申请的缓存项不存在时,程序能为你存储一个默认值。

value, err := facades.Cache.Remember("goravel", 5 * time.Second, func() interface{} {    return "goravel"})

如果缓存中不存在你想要的数据时,则传递给 Remember 办法的闭包将被执行,而后将其后果返回并搁置到缓存中。

你能够应用 RememberForever 办法从缓存中获取数据或者永恒存储它:

value, err := facades.Cache.RememberForever("goravel", func() interface{} {    return "default"})

获取和删除

value := facades.Cache.Pull("goravel", "default")

在缓存中存储数据

err := facades.Cache.Put("goravel", "value", 5 * time.Second)

如果缓存的过期工夫设置为 0, 则缓存将永恒无效:

err := facades.Cache.Put("goravel", "value", 0)

只存储没有的数据

Add 办法将只存储缓存中不存在的数据。如果存储胜利,将返回 true ,否则返回 false

res := facades.Cache.Add("goravel", "value", 5 * time.Second)

数据永恒存储

Forever 办法可用于将数据长久化存储到缓存中。因为这些数据不会过期,所以必须通过 Forget 办法从缓存中手动删除它们:

res := facades.Cache.Forever("goravel", "value")

从缓存中删除数据

res := facades.Cache.Forget("goravel")

你能够应用 Flush 办法清空所有的缓存:

res := facades.Cache.Flush()

增加自定义缓存驱动

配置

如果你想定义一个齐全自定义的驱动,能够在 config/cache.php 配置文件中指定 custom 驱动类型。

而后蕴含一个 via 选项,实现一个 framework\contracts\cache\Store 构造:

//config/cache.php"stores": map[string]interface{}{    "redis": map[string]interface{}{        "driver": "redis",        "connection": "default",    },    "custom": map[string]interface{}{        "driver": "custom",        "via": Logger{},//自定义驱动    },},

编写驱动

实现 framework\contracts\cache\Store 接口,并配置到 config/cache.go 即可。文件能够对立贮存到 app/extensions 文件夹中(可批改)。

//framework\contracts\cache\Storepackage cacheimport "time"type Store interface {    //Get Retrieve an item from the cache by key.    Get(key string, defaults interface{}) interface{}    //Has Determine if an item exists in the cache.    Has(key string) bool    //Put Store an item in the cache for a given number of seconds.    Put(key string, value interface{}, seconds time.Duration) error    //Pull Retrieve an item from the cache and delete it.    Pull(key string, defaults interface{}) interface{}    //Add Store an item in the cache if the key does not exist.    Add(key string, value interface{}, seconds time.Duration) bool    //Remember Get an item from the cache, or execute the given Closure and store the result.    Remember(key string, ttl time.Duration, callback func() interface{}) (interface{}, error)    //RememberForever Get an item from the cache, or execute the given Closure and store the result forever.    RememberForever(key string, callback func() interface{}) (interface{}, error)    //Forever Store an item in the cache indefinitely.    Forever(key string, value interface{}) bool    //Forget Remove an item from the cache.    Forget(key string) bool    //Flush Remove all items from the cache.    Flush() bool}