Redis客户端由gredis组件实现,底层采用了链接池设计。
Redis
gredis
为了保证通用性和扩展性,gredis组件采用了命令通道的方式执行Redis操作。当您不知道命令通道的参数如何传递时,可以参考终端命令行的参数传递。也就是说,所有的操作都和命令行的参数传递保持一致。
使用方式:
import "github.com/gogf/gf/v2/database/gredis"
接口文档:
https://pkg.go.dev/github.com/gogf/gf/v2/database/gredis
简要介绍:
gredis使用了连接池来进行Redis连接管理,通过Config配置对象或者Set*方法可以对连接池的属性进行管理,通过Stats方法可以获取连接池的统计信息。我们最常用的是Do方法,执行同步指令,通过向Redis Server发送对应的Redis API命令,来使用Redis Server的服务。Do方法最大的特点是内部自行从连接池中获取连接对象,使用完毕后自动丢回连接池中,开发者无需手动调用Close方法,方便使用。
Config
Set*
Stats
Do
Redis Server
Redis API
Close
gredis.Redis客户端对象提供了一个Close方法,该方法用于关闭Redis客户端(同时关闭客户端的连接池),而不是连接对象,开发者基本不会用到,非高级玩家请不要使用。
gredis.Redis
gredis具有以下显著特性:
OpenTelemetry
可以提供一个方法获取pool吗?方便该包(https://github.com/silenceper/wechat)的redisCache的使用
gredis_redis_conn.go 中调 utils_reflect.go 的
OriginTypeAndKind 时 value.(reflect.Type) 的转换如果 vlaue 会报错。
v2.0的redis怎么设置key的过期时间啊请问。这样报错:
g.Redis().Do(ctx, "EXPIRE", time.Hour)
哥,你的key呢?
key
大多数程序员都喜欢直接使用类似 go-redis 这样友好的api来操作redis,虽然你这种和redis命令行保持一致的操作方式保持了通用性,但实际上使用起来很不方便,我觉的 api 的易用性是很关键的,既然2.0使用了go-redis做为底层的实现库,只要把go-redis的client对象暴露出去给用户使用,至少提供了一种可选的方式,也不破坏gf内部本身的设计。
请问pipline怎么实现?
强哥,亮哥。看下我基于go-redis/v8封装的一个redis工具类。不知道是否能够贡献到goframe框架中,https://github.com/FTLLOVE/redis,写的不好的地方,希望强哥给点建议,希望给goframe尽一些微薄之力 郭强 海亮
很感谢,我看了你的代码,代码整体结构挺不错的。不过这里有几点需要考虑一下,也是我们为什么不直接暴露第三方的go-redis相关类型。
go-redis
redigo
redis.*Cmd
UniversalClient
非常欢迎参与贡献,后续细节我们可以一起再具体聊聊,可以加一下我微信吗?
强哥,我有你的微信,我先改进一下,回头我找您,么么哒
强哥, 就差个mongodb了. 啥时候也整合进来.
10 Comments
智刚
可以提供一个方法获取pool吗?方便该包(https://github.com/silenceper/wechat)的redisCache的使用
FireTiger
gredis_redis_conn.go 中调 utils_reflect.go 的
牛嘿
v2.0的redis怎么设置key的过期时间啊请问。这样报错:
郭强
哥,你的
key
呢?arden
大多数程序员都喜欢直接使用类似 go-redis 这样友好的api来操作redis,虽然你这种和redis命令行保持一致的操作方式保持了通用性,但实际上使用起来很不方便,我觉的 api 的易用性是很关键的,既然2.0使用了go-redis做为底层的实现库,只要把go-redis的client对象暴露出去给用户使用,至少提供了一种可选的方式,也不破坏gf内部本身的设计。
亮亮
请问pipline怎么实现?
豆芽菜
强哥,亮哥。看下我基于go-redis/v8封装的一个redis工具类。不知道是否能够贡献到goframe框架中,https://github.com/FTLLOVE/redis,写的不好的地方,希望强哥给点建议,希望给goframe尽一些微薄之力 郭强 海亮
郭强
很感谢,我看了你的代码,代码整体结构挺不错的。不过这里有几点需要考虑一下,也是我们为什么不直接暴露第三方的
go-redis
相关类型。redigo
,后面切换为了go-redis
,也不能完全保证后续不会再做调整。因此组件需要做一层接口,屏蔽底层实现细节,后续实现不管如何变化,开发者的调用接口不会改变。go-redis
的任何对象类型都应该做屏蔽,不能直接返回给组件的调用者。同时,由于框架已经有非常不错的运行时泛型,可以在适当接口返回该类型(不要返回redis.*Cmd
类型),以便开发者灵活做类型转换。Redis
接口层的结构化输入输出是很有必要的,这块主要是接口封装的工作量。go-redis
有个UniversalClient
挺不错,所以这里可以考虑不用单独判断,以便简化开发者的使用。非常欢迎参与贡献,后续细节我们可以一起再具体聊聊,可以加一下我微信吗?
豆芽菜
强哥,我有你的微信,我先改进一下,回头我找您,么么哒
小陈
强哥, 就差个mongodb了. 啥时候也整合进来.