基本介绍

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

使用示例

  1. func ExampleCache_SetAdapter() {
  2. var (
  3. err error
  4. ctx = gctx.New()
  5. cache = gcache.New()
  6. redisConfig = &gredis.Config{
  7. Address: "127.0.0.1:6379",
  8. Db: 9,
  9. }
  10. cacheKey = `key`
  11. cacheValue = `value`
  12. )
  13. // Create redis client object.
  14. redis, err := gredis.New(redisConfig)
  15. if err != nil {
  16. panic(err)
  17. }
  18. // Create redis cache adapter and set it to cache object.
  19. cache.SetAdapter(gcache.NewAdapterRedis(redis))
  20. // Set and Get using cache object.
  21. err = cache.Set(ctx, cacheKey, cacheValue, time.Second)
  22. if err != nil {
  23. panic(err)
  24. }
  25. fmt.Println(cache.MustGet(ctx, cacheKey).String())
  26. // Get using redis client.
  27. fmt.Println(redis.MustDo(ctx, "GET", cacheKey).String())
  28. // Output:
  29. // value
  30. // value
  31. }

注意事项

关于 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