[学习笔记] 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/
如若转载,请注明出处:一木林多 - https://www.l5v.cn/archives/317/
评论