摘要:基于的二次封装,提供种部署模式下的统一接口,使得更换部署模式对业务透明项目地址开发进度部署模式代码完成度测试完成度依赖包单例,,哨兵模式集群模式方法说明订阅命令方法定义普通命令方法定义执行订阅回调方法执行命令回调方法下列方法都是封装了方法
基于 gomodule/redigo 的二次封装,提供 stand-alone sentinel cluster 3种部署模式下的统一接口,使得更换 redis 部署模式对业务透明
项目地址Github:https://github.com/letsfire/r...
开发进度Mode部署模式 | 代码完成度 | 测试完成度 | 依赖包 |
---|---|---|---|
alone 单例,Twemproxy,Codis | 100% | 100% | |
sentinel 哨兵模式 | 100% | 100% | FZambia/sentinel |
cluster 集群模式 | 100% | 100% | mna/redisc |
订阅命令方法定义 type SubFunc func(c redis.PubSubConn) (err error)
普通命令方法定义 type ExecFunc func(c redis.Conn) (res interface{}, err error)
执行订阅回调方法 Sub(fn SubFunc) (err error)
执行命令回调方法 Exec(fn ExecFunc) (interface{}, error)
下列方法都是封装了Exec方法,格式化返回值的类型
Int(fn ExecFunc) (int, error)
Ints(fn ExecFunc) ([]int, error)
IntMap(fn ExecFunc) (map[string]int, error)
Int64(fn ExecFunc) (int64, error)
Int64s(fn ExecFunc) ([]int64, error)
Int64Map(fn ExecFunc) (map[string]int64, error)
Uint64(fn ExecFunc) (uint64, error)
Bool(fn ExecFunc) (bool, error)
String(fn ExecFunc) (string, error)
StringMap(fn ExecFunc) (map[string]string, error)
Strings(fn ExecFunc) ([]string, error)
Bytes(fn ExecFunc) ([]byte, error)
ByteSlices(fn ExecFunc) ([][]byte, error)
Positions(fn ExecFunc) ([]*[2]float64, error)
Float64(fn ExecFunc) (float64, error)
Float64s(fn ExecFunc) ([]float64, error)
Values(fn ExecFunc) ([]interface{}, error)
Alone示例var echoStr = "hello world" var aloneMode = alone.New( alone.Addr("192.168.0.110:6379"), alone.PoolOpts( mode.MaxActive(0), // 最大连接数,默认0无限制 mode.MaxIdle(0), // 最多保持空闲连接数,默认2*runtime.GOMAXPROCS(0) mode.Wait(false), // 连接耗尽时是否等待,默认false mode.IdleTimeout(0), // 空闲连接超时时间,默认0不超时 mode.MaxConnLifetime(0), // 连接的生命周期,默认0不失效 mode.TestOnBorrow(nil), // 空间连接取出后检测是否健康,默认nil ), alone.DialOpts( redis.DialReadTimeout(time.Second), // 读取超时,默认time.Second redis.DialWriteTimeout(time.Second), // 写入超时,默认time.Second redis.DialConnectTimeout(time.Second), // 连接超时,默认500*time.Millisecond redis.DialPassword(""), // 鉴权密码,默认空 redis.DialDatabase(0), // 数据库号,默认0 redis.DialKeepAlive(time.Minute*5), // 默认5*time.Minute redis.DialNetDial(nil), // 自定义dial,默认nil redis.DialUseTLS(false), // 是否用TLS,默认false redis.DialTLSSkipVerify(false), // 服务器证书校验,默认false redis.DialTLSConfig(nil), // 默认nil,详见tls.Config ), ) var instance = redigo.New(aloneMode) res, err := instance.String(func(c redis.Conn) (res interface{}, err error) { return c.Do("ECHO", echoStr) }) if err != nil { log.Fatal(err) } else if res != echoStr { log.Fatalf("unexpected result, expect = %s, but = %s", echoStr, res) }Sentinel示例
var echoStr = "hello world" var sentinelMode = sentinel.New( sentinel.Addrs([]string{"192.168.0.110:26379"}), // 这两项配置和Alone模式完全相同 // sentinel.PoolOpts(...), // sentinel.DialOpts(...), // 连接哨兵配置,用法于sentinel.DialOpts()一致 // 默认未配置的情况则直接使用sentinel.DialOpts()的配置 // sentinel.SentinelDialOpts() ) var instance = redigo.New(sentinelMode) res, err := instance.String(func(c redis.Conn) (res interface{}, err error) { return c.Do("ECHO", echoStr) }) if err != nil { log.Fatal(err) } else if res != echoStr { log.Fatalf("unexpected result, expect = %s, but = %s", echoStr, res) }Cluster示例
var echoStr = "hello world" var clusterMode = cluster.New( cluster.Nodes([]string{ "192.168.0.110:30001", "192.168.0.110:30002", "192.168.0.110:30003", "192.168.0.110:30004", "192.168.0.110:30005", "192.168.0.110:30006", }), // 这两项配置和Alone模式完全相同 // cluster.PoolOpts(...), // cluster.DialOpts(...), ) var instance = redigo.New(clusterMode) res, err := instance.String(func(c redis.Conn) (res interface{}, err error) { return c.Do("ECHO", echoStr) }) if err != nil { log.Fatal(err) } else if res != echoStr { log.Fatalf("unexpected result, expect = %s, but = %s", echoStr, res) }
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37055.html
摘要:哨兵是社区版本推出的原生高可用解决方案,部署架构主要包括两部分集群和数据集群,其中集群是由若干节点组成的分布式集群。自研推荐推荐自研的高可用解决方案,主要体现在配置中心故障探测和的处理机制上,通常需要根据企业业务的实际线上环境来定制化。 最近很多朋友向我咨询关于高可用的方案的优缺点以及如何选择合适的方案线上使用,刚好最近在给宜人贷,光大银行做企业内训的时候也详细讲过,这里我再整理发出来...
摘要:哨兵是社区版本推出的原生高可用解决方案,部署架构主要包括两部分集群和数据集群,其中集群是由若干节点组成的分布式集群。自研推荐推荐自研的高可用解决方案,主要体现在配置中心故障探测和的处理机制上,通常需要根据企业业务的实际线上环境来定制化。 最近很多朋友向我咨询关于高可用的方案的优缺点以及如何选择合适的方案线上使用,刚好最近在给宜人贷,光大银行做企业内训的时候也详细讲过,这里我再整理发出来...
摘要:类似代码实现如下从缓存中获取数据缓存为空从存储中获取如果存储数据为空,需要设置一个过期时间秒缓存非空布隆过滤器拦截就类似于一个,用于快速判某个元素是否存在于集合中,其典型的应用场景就是快速判断一个是否存在于某容器,不存在就直接返回。 欢迎关注公众号:【爱编码】如果有需要后台回复2019赠送1T的学习资料哦!! showImg(https://upload-images.jianshu....
时间:2017年08月02日星期三 说明:基于CentOS7-64bit。在单台Linux主机上搭建Redis伪集群哨兵模式。 步骤一:安装Redis 1.下载Redis安装包 Redis官网:https://redis.io/ 下载地址:https://redis.io/download 2.上传Redis安装包 使用ftp工具,将下载好的Redis安装包上传到linux服务器 步骤二:配置文件...
阅读 656·2021-09-22 15:18
阅读 979·2021-09-09 09:33
阅读 2616·2019-08-30 10:56
阅读 1058·2019-08-29 16:30
阅读 1335·2019-08-29 13:02
阅读 1325·2019-08-26 13:55
阅读 1509·2019-08-26 13:41
阅读 1801·2019-08-26 11:56