springboot-集成Redis总结

430 阅读3分钟

目录

 

一、背景

二、操作步骤

1.jar依赖导入

2.配置管理

3.配置文件

4.具体使用

三、总结


一、背景

最近在写springboot系列相关的东西,Redis在目前的互联网开发中几乎是一个绕不过的话题,目前在做的管理系统也用的到。之前的用法是一切都自己封装,spring只发挥容器的作用就好了,随着spring全家桶技术的日渐完善以及目前大众的使用习惯,之前的写法感觉有点跟不上时代,有时还会被嘲笑。但是性能这块是否能扛得住以后再说。今天带大家一起看看如何集成,并对基本使用习惯做一个说明。

二、操作步骤

1.jar依赖导入

        <!--springboot对Redis的支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <!-- jedis客户端引入-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.3.0</version>
        </dependency>

        <!--连接池的引入 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
            <version>2.9.0</version>
        </dependency>

总结:

  • spring-boot-starter-data-redis默认引入lettuce客户端,这里使用jedis客户端,所以屏蔽lettuce依赖
  • 连接池使用pool2,springboot集成了连接池的设置,不需要像以前那样初始化连接池的配置。在配置文件中配置连接池属性就会生效,这一点大家要注意下。

2.配置管理

@Configuration
public class RedisConfiguration {
    @Bean
    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        // 使用Jackson2JsonRedisSerialize 替换默认的jdkSerializeable序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        StringRedisSerializer stringRedisSerializer=new StringRedisSerializer();
        // 设置String类型的value的序列化规则和 key的序列化规则
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        // 设置hash类型的value的序列化规则和 key的序列化规则
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}

总结:

  • 首先我没有开启注解,需要注解的小伙伴们可以开启,@EnableCaching。
  • 我个人不太习惯完全注解化,在实际开发过程中需要对Redis的过程做调试,注解的感觉不方面,还是推荐自己多写写,一家之言仅供参考。
  • 关于系列化,这里仅拿json做一个演示,也支持其他方式。

3.配置文件

#redis配置,使用jedis客户端
#Redis服务器地址
spring.redis.host=localhost
#Redis服务器连接端口
spring.redis.port=6379
#Redis数据库索引(默认为0)
spring.redis.database=0
spring.redis.ssl=false
##以下为连接池属性,如果配置就加载连接池,如果没有配置就是单例模式
#连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-active=50
#连接池中的最大空闲连接
spring.redis.jedis.pool.max-idle=20
#连接池中的最小空闲连接
spring.redis.jedis.pool.min-idle=2
#连接池最大阻塞等待时间(使用负值表示没有限制)(毫秒)
spring.redis.jedis.pool.max-wait=3000
#空闲链接检测线程检测周期。如果为负值,表示不运行检测线程。(单位:毫秒,默认为-layer)
spring.redis.jedis.pool.time-between-eviction-runs=6000
#连接超时时间(毫秒)
spring.redis.timeout=5000

总结:

  • 上面配置是个单实例使用连接池版本
  • 集群版的后面补充
  • 再强调一下,连接池信息有声明就生效,没声明不生效
  • 上面连接池参数不是最优的设置,仅仅拿来说明问题。以后开专题做专门介绍

4.具体使用

@RestController
@RequestMapping("/user")
public class UserController {
    @Autowired
    RedisTemplate redisTemplate;

    @GetMapping(value = {"/haha"})
    public String getUser(){
        User user= new User();
        user.setName("name");
        user.setPassword("password");
        //存储对象
        redisTemplate.opsForValue("bbb",user);
        //取对象,强转之前要先做判null操作,不然报错,我这里就不操作了。
        user= (User) redisTemplate.opsForValue().get("bbb");
        log.info(user.toString());
        return "hahah";
    }
}
  • springboot提供了两个模板,RedisTemplate<Object,Object>StringRedisTemplate,看名知意。
  • 使用RedisTemplate<Object,Object> 需要声明序列化和实例化对象,如上“配置管理”。
  • 一般使用习惯是要封装一个RedisUtil工具类,需要做几次转换(如上)。这里就看出没有直接使用jedis方便。看个人习惯吧!

三、总结

  • springboot集成Redis的方案有好多,至于哪个是最好的,我觉得适合自己的就最好。
  • 使用springboot集成好的,优点是书写时简单了,缺点就是什么也看不到了。