分分钟钟搞定Docker下面的redis sentinel集群

网友投稿 235 2022-10-21

分分钟钟搞定Docker下面的redis sentinel集群

redis集群环境:三个redis服务器,其中6379为master服务器,6380、6381是slave服务器。 Java中我们可以采用ShardedJedis来操作redis集群,这边因为master中既可以存数据也可以取数据,而slave中只能进行读取操作,所以这边我在获取ShardedJedis的时候,会采用两个不同的方法来。一个是masterRedis方法,这个方法中只能用来写操作,一个slaveRedis方法,这个方法只能用来读取操作,下面我们看具体的代码实现。 1.首先需要引入redis相关的依赖,如下所示: < ​dependency​

> < ​groupId​

> redis.clients

> < ​artifactId​

> jedis

> < ​version​

> 2.9.0

>

> < ​dependency​

> < ​groupId​

> org.springframework.boot

> < ​artifactId​

> spring-boot-starter-data-redis

>

> < ​dependency​

> < ​groupId​

> org.springframework.boot

> < ​artifactId​

> spring-boot-starter-cache

>

> 2.配置ShardedJedis来操作redis缓存数据库 @Configuration ​public class ​

RedisConfigure { @Value ( ​"${redisIp}"​

) ​public ​

String ​redisIp​

;

@Value ( ​"${masterRedisPort}"​

) ​public int ​

​masterRedisPort​

;

@Value ( ​"${slaveRedisPort}"​

) ​public ​

String ​slaveRedisPortStr​

;

@Value ( ​"${redisMaxWaitMillis}"​

) ​public int ​

​redisMaxWaitMillis​

;

@Value ( ​"${redisMaxIdle}"​

) ​public int ​

​redisMaxIdle​

;

@Value ( ​"${redisMaxTotal}"​

) ​public int ​

​redisMaxTotal​

;

​/**​

​ * 缓存数据库,可以进行设置key​

​ *​

​ * ​

​​@return ​​

​Jedis​

​ */​

@Bean ​public ​

ShardedJedis masterRedis() { List shards = ​new ​

ArrayList(); shards.add( ​new ​

JedisShardInfo( ​redisIp​

, ​masterRedisPort​

)); JedisPoolConfig config = ​new ​

JedisPoolConfig(); config.setMaxIdle( ​redisMaxIdle​

); config.setMaxTotal( ​redisMaxTotal​

); config.setMaxWaitMillis( ​redisMaxWaitMillis​

); ShardedJedisPool pool = ​new ​

ShardedJedisPool(config, shards); ​return ​

pool.getResource(); } ​/**​

​ * slave缓存数据库,只能读取key值​

​ *​

​ * ​

​​@return​​

​*/​

@Bean ​public ​

ShardedJedis slaveRedis() { List shards = ​new ​

ArrayList(); String[] slaveRedisPorts = ​slaveRedisPortStr​

.split( ​","​

); ​for ​

(String slaveRedisPort : slaveRedisPorts) { shards.add( ​new ​

JedisShardInfo( ​redisIp​

, Integer. ​valueOf​

(slaveRedisPort))); } shards.add( ​new ​

JedisShardInfo( ​redisIp​

, ​masterRedisPort​

)); JedisPoolConfig config = ​new ​

JedisPoolConfig(); config.setMaxIdle( ​redisMaxIdle​

); config.setMaxTotal( ​redisMaxTotal​

); config.setMaxWaitMillis( ​redisMaxWaitMillis​

); ShardedJedisPool pool = ​new ​

ShardedJedisPool(config, shards); ​return ​

pool.getResource(); } } ​这边需要注意的是:​

我这边返回的是ShardedJedis对象,而且通过这种方式返回的只有一个实例,不管多个实体类中调用都不会重新执行masterRedis和slaveRedis这两个方法,它只会在启动的时候执行一次。这边如果不小心返回的是ShardedJedisPool对象,在多次执行之后就会报错,这点需要注意。 ​还有一点需要注意的是​

:我这边的redis地址和端口都是通过配置读取来获取的,因为这样就不会写死在代码中了,灵活性更大。 ​配置文件内容如下:​

​redisIp​

= ​211.159.165.227​

​slaveRedisPort​

= ​6380,6381​

​masterRedisPort​

= ​6379​

​redisMaxIdle​

= ​10​

​redisMaxTotal​

= ​30​

​redisMaxWaitMillis​

= ​3000​

3.controller控制类中进行redis数据存储和读取操作,具体代码如下: @Controller @RequestMapping ( ​"/jedis"​

) ​public class ​

RedisController { @Autowired ShardedJedis ​masterRedis​

; @Autowired ShardedJedis ​slaveRedis​

; @RequestMapping ( ​"set"​

) @ResponseBody ​public ​

String setKey(String key,String value){ String result= ​masterRedis​

.set(key,value); ​return ​

​"设置的key为:"​

+key+ ​"设置的value为:"​

+value+ ​"存储执行的结果为:"​

+result; } @RequestMapping ( ​"get"​

) @ResponseBody ​public ​

String getKey(String key){ String result= ​slaveRedis​

.get(key); ​return ​

​"读取的key为:"​

+key+ ​"读取到的value为:"​

经过检测:200次set数据请求/s+200次get数据请求/s 毫无压力,服务器性能没有受到任何的影响。后期可以通过loadrunner来正规的测试一下这种配置下的性能极限是多少。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:使用Docker容器搭建MySql主从复制
下一篇:SpringBoot开发详解之Controller接收参数及参数校验
相关文章

 发表评论

暂时没有评论,来抢沙发吧~