Spring boot 整合 Redis (redisTemplate) 介绍
Java 编程语言提供了多种连接 Redis 服务的客户端驱动。如下:
- Jedis:是Redis的Java实现客户端,提供了比较全面的Redis命令的支持。
- Redisson:实现了分布式和可扩展的Java数据结构。
- Lettuce:高级Redis客户端,用于线程安全同步,异步和响应使用,支持集群,Sentinel,管道和编码器;主要在一些分布式缓存框架上使用比较多
可伸缩性
- Jedis:使用阻塞的I/O,且其方法调用都是同步的,程序流需要等到sockets处理完I/O才能执行,不支持异步。Jedis客户端实例不是线程安全的,所以需要通过连接池来使用Jedis。
- Redisson:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Redisson的API是线程安全的,所以可以操作单个Redisson连接来完成各种操作。
- Lettuce:基于Netty框架的事件驱动的通信层,其方法调用是异步的。Lettuce的API是线程安全的,所以可以操作单个Lettuce连接来完成各种操作。
一、RedisTemplate 和 StringRedisTemplate
在 Spring boot 项目整合 Redis 中,最主要的 Bean 操作组件就是 RedisTemplate 和 StringRedisTemplate。
1.1、RedisTemplate 类
这个类的名字后缀是Template,如果了解过 Spring 如何连接关系型数据库的,大概不会难猜出这个类是做什么的 ,它跟JdbcTemplate一样封装了对Redis的一些常用的操作。
1.2、StringRedisTemplate 类
跟RedisTemplate功能类似;两者之间的区别主要在于他们使用的序列化类。
- RedisTemplate使用的是 JdkSerializationRedisSerializer。
- StringRedisTemplate使用的是 StringRedisSerializer。
1.3、总结
1、当 redis 数据库里面存储的是【字符串】类型数据,那么使用 StringRedisTemplate 即可。
2、如果 Redis 服务中数据是复杂的【对象类型】,而且你在取出的时候又不想做任何的数据转换,直接从 Redis 里面取出一个对象,那么使用RedisTemplate是更好的选择。
二、代码整合示例
2.1、在 pom 文件中添加 redis 的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring-boot-starter-data-redis有两种实现:lettuce 和 jedis ,然而默认是使用lettuce。
2.2、在配置文件 application.yml 中添加配置项
spring:
redis:
database: 1
host: 127.0.0.1
password: password
port: 6379
timeout: 3000
jedis:
pool:
max-idle: 500
min-idle: 50
max-active: 2000
max-wait: 1000
2.3、设置 Reids 的工具类
@Component
public class RedisSerialUtil {
@Autowired
private RedisTemplate<String,String> redisTemplate;
/**
* 默认过期时长,单位:秒
*/
public static final long DEFAULT_EXPIRE = 60 * 60 * 24;
/**
* 不设置过期时长
*/
public static final long NOT_EXPIRE = -1;
/**
* 普通缓存放入
* @param key 键
* @param value 值
* @return true成功 false失败
*/
public boolean set(String key, String value) {
try {
redisTemplate.opsForValue().set(key,value);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
......
}
然后在需要操作 Redis 服务的类中引用这个类就可以了。