[学习笔记] Redis数据库之整合SpringBoot

# 学习 # · 2021-10-17

Jedis

1、Jedis:是Redis官方推荐的Java连接开发工具,使用Java操作Redis中间件。

2、Jedis使用:

  • a、新建Maven项目,导入Jedis依赖。
  • <!-- Jedis依赖 -->
    <dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.3.0</version>
    </dependency>
  • b、新建测试类,编写测试代码。
  • public class JedisTest {
        public static void main(String[] args) {
            // new Jedis对象
            Jedis jedis = new Jedis("127.0.0.1", 6379);
    
            // 执行ping,测试连接,成功返回PONG
            System.out.println(jedis.ping());
    
            // 开启事务
            Transaction multi = jedis.multi();
    
            // set key-value
            jedis.set("name", "hello");
    
            // 执行事务
            multi.exec();
    
            // get key-value
            System.out.println(jedis.get("name"));
    
            // 关闭jedis连接
            jedis.close();
        }
    }

整合SpringBoot

1、SpringBoot操作Redis:

  • a、新建SpringBoot项目,导入相关依赖。
  • <!-- SpringBoot-Redis依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
  • b、在application.properties配置相关属性:
  • # 配置项参考:org.springframework.boot.autoconfigure.data.redis.RedisProperties
    # Redis配置
    spring.redis.host=127.0.0.1
    spring.redis.port=6379

    c、测试连接:

    @Autowired  // 注入RedisTemplate用于操作Redis
    RedisTemplate redisTemplate;
    
    @Test
    void contextLoads() {
        // 实现set/get key-value
        redisTemplate.opsForValue().set("name", "hello");
        System.out.println(redisTemplate.opsForValue().get("name"));
    }

    d、在redis客户端查看测试结果:

2、SpringBoot2.x后,spring-boot-starter-data-redis底层原来使用的Jedis被替换成lettuce。

  • a、jedis:实现上是直连redis server,多线程环境下非线程安全,除非使用连接池,为每个 redis实例增加物理连接。
  • b、lettuce:是一种可伸缩,线程安全,完全非阻塞的Redis客户端,多个线程可以共享一个RedisConnection,它利用Netty NIO框架来高效地管理多个连接,从而提供了异步和同步数据访问方式,用于构建非阻塞的反应性应用程序。

自定义RedisTemplate

1、RedisTemplete:

@Configuration
public class RedisConfig {
    @Bean
    @SuppressWarnings("all")
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {

        RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
        template.setConnectionFactory(factory);

        // Json序列化配置
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        // String 的序列化
        StringRedisSerializer stringRedisSerializer = new
        StringRedisSerializer();

        // key采用String的序列化方式
        template.setKeySerializer(stringRedisSerializer);

        // hash的key也采用String的序列化方式
        template.setHashKeySerializer(stringRedisSerializer);

        // value序列化方式采用jackson
        template.setValueSerializer(jackson2JsonRedisSerializer);

        // hash的value序列化方式采用jackson
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();

        return template;
    }
}

2、调用自定义RedisTemplate:

@Autowired
@Qualifier("redisTemplate")
RedisTemplate redisTemplate;
如无特殊说明,本博所有文章均为博主原创。

如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/317/

评论