Redis集群模式的java客户端的配置和使用

当前主流的Redis部署成集群方案有以下几种:

  • 客户端分片
  • 国内开源Codis
  • Twitter开源的Twemproxy
  • Redis官方 Cluster集群模式(服务端sharding)

这里只讲解官方的去中心化的cluster集群模式。

当redis的服务器集群搭建好了,对于Java客户端的调用(这里只针对使用了Springboot 的项目的客户端的配置),该怎么配置和显示的调用呢?

对于springboot的用户,使用redis的客户端还是比较方便的,首先第一步是要选择redis的java客户端,redis的java客户端又好几种,官方推荐的有三种:Jedis、Redisson和lettuce

jedis是最简单好用的,功能相对较少,Redisson相对高级点,支持分布式事务,lettuce基于netty,并发能力更强点,但是使用相对复杂,有点学习成本。因此,这里只介绍使用jedis的客户端的配置。

1、 依赖配置(pom文件)

   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2、property文件的配置

spring.redis.cluster.max-redirects=3
#一般集群模式是采用经典的3主3从,则需要将所有的节点都配置上,jedis自动做分片和路由
spring.redis.cluster.nodes=127.0.0.1:6379,127.0.0.2:6379,127.0.0.3:6379,127.0.0.4:6379,127.0.0.5:6379,127.0.0.6:6379
spring.redis.timeout=5000ms
spring.redis.jedis.pool.max-active=8
spring.redis.jedis.pool.max-idle=8
spring.redis.jedis.pool.max-wait=-1
spring.redis.jedis.pool.min-idle=0
spring.redis.database=0
#如果有配置密码,这里必须要写上密码值
spring.redis.password=

3、配置springboot内置的RedisTemplate类的序列化和反序列化方式

这里需要写一个配置类:

@Configuration
@EnableCaching
public class RedisConfiguration {
    
    

    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    
    
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(redisConnectionFactory);
        return template;
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    
    
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        //这里选择使用阿里的fastjson作为序列化和反序列化的方式
        FastJsonRedisSerializer fastJsonRedisSerializer =  new FastJsonRedisSerializer(Object.class);
        template.setValueSerializer(fastJsonRedisSerializer);
        template.setHashValueSerializer(fastJsonRedisSerializer);

        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();

        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);
        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);
        // value序列化方式采用fastjson
        template.setValueSerializer(fastJsonRedisSerializer);
        // hash的value序列化方式采用fastjson
        template.setHashValueSerializer(fastJsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

4、在需要使用redis的地方,先注入RedisTemplate

    @Autowired
    private RedisTemplate redisTemplate;

然后,在需要使用的时候,使用RedisTemplate 自带的api,则可以实现curd的操作:

eg:

redisTemplate.hasKey(token);

RedisTemplate的api包含以下方法,可参考下:

在这里插入图片描述
在这里插入图片描述

如果觉得Redistemplate的api不够用或者不好用,可以自定义覆盖这些api则可以,这里不做详细介绍,自行上网上查例子。

猜你喜欢

转载自blog.csdn.net/weixin_46589575/article/details/113616892
今日推荐