Redis Sentinel高可用集群Java客户端

矫情吗;* 2022-05-30 10:39 295阅读 0赞

今天给大家介绍一下如何通过Java来set和get值到Redis Sentinel集群中。

在开始之前我们首先要搭建一个Redis Sentinel集群环境,搭建过程这边我就不多介绍了,不会的可以去看我《Docker下面安装redis sentinel集群》这篇博客,里面已经介绍的很清楚了。

226_method_get-resource_shareToken_2E18E57C861445318FAD517AA89854C0_entryId_188515887

redis集群环境:三个redis服务器,其中6379为master服务器,6380、6381是slave服务器。

Java中我们可以采用ShardedJedis来操作redis集群,这边因为master中既可以存数据也可以取数据,而slave中只能进行读取操作,所以这边我在获取ShardedJedis的时候,会采用两个不同的方法来。一个是masterRedis方法,这个方法中只能用来写操作,一个slaveRedis方法,这个方法只能用来读取操作,下面我们看具体的代码实现。

1.首先需要引入redis相关的依赖,如下所示:

< dependency >

< groupId > redis.clients </ groupId >

< artifactId > jedis </ artifactId >

< version > 2.9.0 </ version >

</ dependency >

< dependency >

< groupId > org.springframework.boot </ groupId >

< artifactId > spring-boot-starter-data-redis </ artifactId >

</ dependency >

< dependency >

< groupId > org.springframework.boot </ groupId >

< artifactId > spring-boot-starter-cache </ artifactId >

</ dependency >

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为:” +result;

}

}

代码解析:masterRedis只能用来set数据到master缓存数据库中,slaveRedis只能用来get缓存中的数据。

这边需要注意的是:RedisConfigure类只能通过@Autowired注释才能获取到配置文件,还有 ShardedJedis masterRedis;中masterRedis名字要和RedisConfigure中的方法一样才可以。

223_method_get-resource_shareToken_2E18E57C861445318FAD517AA89854C0_entryId_188515887

4.浏览器校验是否成功

225_method_get-resource_shareToken_2E18E57C861445318FAD517AA89854C0_entryId_188515887

224_method_get-resource_shareToken_2E18E57C861445318FAD517AA89854C0_entryId_188515887

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

更多文章敬请关注:林老师带你学编程

227_method_get-resource_shareToken_2E18E57C861445318FAD517AA89854C0_entryId_188515887

发表评论

表情:
评论列表 (有 0 条评论,295人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Redis 可用

    JAVA架构 2019-03-22 21:28:55 Redis 的集群主从模型是一种高可用的集群架构。本章主要内容有:高可用集群的搭建,Jedis连接集群,新增集群节点,删