Spring boot集成redis

一、Spring boot引入redis依赖

        Spring boot对redis的支持很好,只需在pom.xml文件中加入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

        进入spring-boot-starter-data-redis,最下面可以看到redis所引用的依赖,由以前的jedis变成了lettuce

        jedis和lettuce主要的区别如下:

        jedis和lettuce都是redis的客户端

        jedis是直接连接Redis server,多线程环境下,是非线程安全的。每个线程都去拿自己的jedis实例,当连接数量增多时,资源消耗比较大。

        lettuce的连接是基于Netty的,连接实例可以在多个线程之间共享,当多线程使用同一连接实例时,是线程安全的。

        所以,在spring boot新版本中,集成的redis客户端,已经修改为lettuce。

二、配置文件配置

        写这一块,是想学习下怎么通过查看spring-boot-autoconfigure包,了解引入工具包怎么在文件中配置属性,而不是通过百度来查找。

        如上图,点开spring的自动配置包的spring.factories文件,搜索redis,可以看到redis自动配置的类,点开。

         按上面截图,点开RedisProperties类,如下面的截图,定义里在application文件里配置redis连接属性的前缀以及属性名。

        所有在spring boot的application文件中如下配置,就可以被源码中redisTemplate识别。

#配置rediszuowe
spring.redis.host=127.0.0.1
spring.redis.port=6379

三、自定义封装redisTemplate

        用上面的方法,自动注入原生的redisTemplate来操作redis数据的存储,存储到数据库中的数据,会因为序列化的问题,不方便直接用redis客户端查看,只能通过代码中redisTemplate查询出来(同样的序列化方式反序列化出来),主要原因是原生的redisTemplate选择的是jdk的序列化方式,如下代码截图。

        所以需要自定义redisTemplate,重新指定序列方式,方便数据存储到redis后,方便redis客户端查看。一般key使用String的序列化方式,value使用jackson的json结构序列化方式。

@Configuration
public class RedisConfig {

    /**
     * 创建redisTemplate,key选择String的序列化,value选择json的序列化
     * @param factory
     * @return
     */

    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory){
        RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(factory);

        //设置json序列化
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance);
        //String的序列化
        StringRedisSerializer stringRedisSerializer=new StringRedisSerializer();

        //key选择String的序列化
        redisTemplate.setKeySerializer(stringRedisSerializer);
        //value选择jackson序列化
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        //hashKey采用String的序列化
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        //hashValue采用jackson序列化
        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();

        return redisTemplate;

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值