基本介绍

缓存组件同时提供了gcacheRedis缓存适配实现。Redis缓存在多节点保证缓存的数据一致性时非常有用,特别是Session共享、数据库查询缓存等场景中。

使用示例

func ExampleCache_SetAdapter() {
	var (
		err         error
		ctx         = gctx.New()
		cache       = gcache.New()
		redisConfig = &gredis.Config{
			Address: "127.0.0.1:6379",
			Db:      9,
		}
		cacheKey   = `key`
		cacheValue = `value`
	)
	// Create redis client object.
	redis, err := gredis.New(redisConfig)
	if err != nil {
		panic(err)
	}
	// Create redis cache adapter and set it to cache object.
	cache.SetAdapter(gcache.NewAdapterRedis(redis))

	// Set and Get using cache object.
	err = cache.Set(ctx, cacheKey, cacheValue, time.Second)
	if err != nil {
		panic(err)
	}
	fmt.Println(cache.MustGet(ctx, cacheKey).String())

	// Get using redis client.
	fmt.Println(redis.MustDo(ctx, "GET", cacheKey).String())

	// Output:
	// value
	// value
}

注意事项

关于Clear/Size等方法

首先,相同的gredis.Config总是会连接到相同的redis db中,而由于Redis本身没有数据分组功能,所以当多个gcache.Cache对象连接到同个redis db时,将会共享整个redis db,而不会单独开辟一个分组用来存储当前gcache.Cache对象中的内容。因此当使用ClearSize这类操作时,将会对整个redis db进行操作,而不是与内存缓存一样的仅操作当前gcache.Cache对象中的内容,存在一定的反直觉,请务必谨慎使用。

建议使用不同的redis db区分业务缓存类型

另外,建议大家在使用Redis缓存时,单独配置不同的db来使用,而不是和其他的业务数据共用一个db




Content Menu

  • No labels

9 Comments

  1. 如果使用redis哨兵模式的话,应该怎么配置

  2. goframe使用redis缓存时,能支持哨兵模式吗

    1. 底层使用的是go-redis组件,该组件是支持哨兵模式的,具体请参考下go-redis的说明,特别是配置:https://github.com/go-redis/redis

  3. 大佬   v1.16.8 后面会支持基于redis的缓存么~

  4. 这个是不是不支持redis集群?

    1. 如果设置的AdapterRedis集群那就支持集群,框架社区包redis的实现是支持Redis集群的。

  5. 用示例报  redis adapter is not set, missing configuration or adapter register? possible reference: https://github.com/gogf/gf/tree/master/contrib/nosql/redis
       1).  github.com/gogf/gf/v2/database/gredis.New
    版本是:GoFrame CLI Tool v2.5.1, https://goframe.org
    GoFrame Version: v2.5.1 in current go.mod

    1. 遇到同样的报错,我的解决方法是:在报错的包内添加引用redis( _ "github.com/gogf/gf/contrib/nosql/redis/v2" ),就这样解决了,也不知道是什么原因,main包中明明引用了一遍。望大佬解释一下😂


      1. 应该是go 1.21的缘故,从这个版本开始import初始化顺序变了。