SpringBoot整合Redis

SpringBoot整合Redis

  1. 引入Spring整合Redis的jar包
    spring-boot-starter-data-redis默认会使用Lettuce来操作Redis,而一般情况下开发中会使用Jedis,所以在代码中将Lettuce排除,并引入Jedis的依赖
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-data-redisartifactId>
    <exclusions>
        <exclusion>
            <groupId>io.lettucegroupId>
            <artifactId>lettuce-coreartifactId>
        exclusion>
    exclusions>
dependency>
<dependency>
    <groupId>redis.clientsgroupId>
    <artifactId>jedisartifactId>
    <version>2.9.0version>
dependency>
  1. 在配置文件中加入Spring整合Redis的相关配置
# 配置Spring连接池的属性
spring:
  redis:
    jedis:
      pool:
        max-active: 10
        min-idle: 5
        max-idle: 10
        max-wait: 2000ms
    # 配置Redis服务器属性
    port: 6370
    host: 127.0.0.1
    # Redis超时时间
    timeout: 1000ms

SpringBoot自动装配机制会读取这些配置来自动注入关于Redis的对象,SpringBoot会自动生成RedisConnectionFactory,RedisTemplate, StringRedisTemplate等常用Redis对象,我们可以直接使用这些对象来对Redis进行相关操作

  1. 测试操作Redis的相关对象
    1. 测试StringRedisTemplate
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    
    @Test
    public void testStringRedisTemplate() {
        stringRedisTemplate.opsForValue().set("hello", "world");
        System.out.println(stringRedisTemplate.opsForValue().get("hello"));
        stringRedisTemplate.opsForSet().add("set", "val1", "val2");
        System.out.println(stringRedisTemplate.opsForSet().members("set"));
    }
    
    1. 测试RedisTemplate
      StringRedisTemplate只能操作字符串,有些时候我们需要将对象序列化都Redis中,这时候就需要RedisTemplate,
      既然需要序列化对象,肯定需要序列化器,Spring默认实现了几个序列化器,如图:
      SpringBoot整合Redis_第1张图片
      RestTemplate默认使用JdkSerializationRedisSerializer, 这个序列化器会将值序列成一个比较奇怪的值,比如,会将"key1"序列化成如下形式:
      在这里插入图片描述
      为了能更好能更好的的阅读,我们可以使用自定义的序列化器
      自定义序列化器

      • 导入jackson的相关依赖
        	<dependency>
        	   <groupId>com.fasterxml.jackson.coregroupId>
        	    <artifactId>jackson-databindartifactId>
        	    <version>2.9.6version>
        	dependency>
        
      1. 使用Jackson2JsonRedisSerializer作为序列化器
        @Configuration
        public class RedisConfig {
        
            @Bean
            public RedisTemplate<Object, User> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
                RedisTemplate<Object, User> redisTemplate = new RedisTemplate<>();
                redisTemplate.setConnectionFactory(redisConnectionFactory);
                Jackson2JsonRedisSerializer<User> serializer = new Jackson2JsonRedisSerializer<>(User.class);
                redisTemplate.setDefaultSerializer(serializer);
                return redisTemplate;
            }
        }
        
      2. 测试接结果
        @Autowired
        private RedisTemplate<Object, User> redisTemplate;
        @Test
        public void test() {
            User user = new User(1, "你好");
            redisTemplate.opsForValue().set("key2", user);
            System.out.println(redisTemplate.opsForValue().get("key2"));
        }
        
        在这里插入图片描述

你可能感兴趣的:(Java,Spring,SpringBoot)