gredis采用接口化设计,具有强大的灵活性和扩展性。
gredis
https://pkg.go.dev/github.com/gogf/gf/v2/database/gredis#Adapter
// SetAdapter sets custom adapter for current redis client. func (r *Redis) SetAdapter(adapter Adapter) // GetAdapter returns the adapter that is set in current redis client. func (r *Redis) GetAdapter() Adapter
由于gredis组件的接口实现是高阶功能,一般来说开发者也无需替换Redis接口实现。感兴趣的朋友可以自行研究。
Redis
问题:现在我需要给Redis操作进行打点,切入日志、Prometheus业务指标采集。看完文档与源码,在gredis层面只能通过自定义Adapter,在创建redis client的时候添加Hook实现,除了这种还有其他方式吗?
可以参考数据库ORM的Driver实现,"继承"新版本的社区组件Adapter实现,自己覆盖底层的Do方法打点即可,不过可能需要改进下社区组件内部实现把接口对象传递进去(目前内部调用的Do没法覆盖)。
Driver
Adapter
Do
2 Comments
曾佳
问题:现在我需要给Redis操作进行打点,切入日志、Prometheus业务指标采集。看完文档与源码,在gredis层面只能通过自定义Adapter,在创建redis client的时候添加Hook实现,除了这种还有其他方式吗?
郭强
可以参考数据库ORM的
Driver
实现,"继承"新版本的社区组件Adapter
实现,自己覆盖底层的Do
方法打点即可,不过可能需要改进下社区组件内部实现把接口对象传递进去(目前内部调用的Do
没法覆盖)。