前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[开源] Goravel(Golang Web 框架) - 新增 Cache 模块

[开源] Goravel(Golang Web 框架) - 新增 Cache 模块

原创
作者头像
韩同学的简单逻辑
修改2021-12-30 10:19:31
8000
修改2021-12-30 10:19:31
举报
文章被收录于专栏:GoravelGoravel

关于 Goravel

Goravel 是一个功能完备、具有良好扩展能力的 Web 应用程序框架。 作为一个起始脚手架帮助 Golang 开发者快速构建自己的应用。

项目地址:https://github.com/goravel/goravel

欢迎 star 与 issues :)

缓存模块

介绍

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

配置

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

可用的缓存驱动

名称

描述

redis

Redis 驱动

custom

自定义驱动

缓存使用

从缓存中获取数据

代码语言:txt
复制
value := facades.Cache.Get("goravel", func() interface{} {
	return "default"
})

你可以传递一个 func 作为默认值。如果指定的数据在缓存中不存在,将返回 func 的结果。传递闭包的方法允许你从数据库或其他外部服务中获取默认值。注意闭包结构 func() interface{}

代码语言:txt
复制
value := facades.Cache.Get("goravel", func() interface{} {
	return "default"
})

检查缓存项是否存在

代码语言:txt
复制
value := facades.Cache.Has("goravel")

获取和存储

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

代码语言:txt
复制
value, err := facades.Cache.Remember("goravel", 5 * time.Second, func() interface{} {
	return "goravel"
})

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

你可以使用 RememberForever 方法从缓存中获取数据或者永久存储它:

代码语言:txt
复制
value, err := facades.Cache.RememberForever("goravel", func() interface{} {
	return "default"
})

获取和删除

代码语言:txt
复制
value := facades.Cache.Pull("goravel", "default")

在缓存中存储数据

代码语言:txt
复制
err := facades.Cache.Put("goravel", "value", 5 * time.Second)

如果缓存的过期时间设置为 0, 则缓存将永久有效:

代码语言:txt
复制
err := facades.Cache.Put("goravel", "value", 0)

只存储没有的数据

Add 方法将只存储缓存中不存在的数据。如果存储成功,将返回 true ,否则返回 false

代码语言:txt
复制
res := facades.Cache.Add("goravel", "value", 5 * time.Second)

数据永久存储

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

代码语言:txt
复制
res := facades.Cache.Forever("goravel", "value")

从缓存中删除数据

代码语言:txt
复制
res := facades.Cache.Forget("goravel")

你可以使用 Flush 方法清空所有的缓存:

代码语言:txt
复制
res := facades.Cache.Flush()

添加自定义缓存驱动

配置

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

然后包含一个 via 选项,实现一个 framework\contracts\cache\Store 结构:

代码语言:txt
复制
//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 文件夹中(可修改)。

代码语言:txt
复制
//framework\contracts\cache\Store
package cache

import "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
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于 Goravel
  • 缓存模块
    • 介绍
      • 配置
        • 可用的缓存驱动
          • 缓存使用
            • 从缓存中获取数据
            • 检查缓存项是否存在
            • 获取和存储
            • 获取和删除
            • 在缓存中存储数据
            • 只存储没有的数据
            • 数据永久存储
            • 从缓存中删除数据
          • 添加自定义缓存驱动
            • 配置
            • 编写驱动
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档