SpringBoot 2.0 学习(九)集成redis缓存技术
NoSql数据库
NoSql 不是字面意思,没有sql,而是Not only sql,意思是不仅仅只有sql,常用的主流数据库都是关系型数据库,比如Oracle,Mysql,Sql Server等,但是这些数据库操作数据起来过于复杂且庞大,并发量会比较高,用户等待的时间可能会比较长,为了有更好的用户体验,非关系型数据库应运而生,Redis是目前使用的非常多的一款非关系型数据库。
Redis介绍
Redis特征很明显,它不像数据库对表的字段要求那么高,它很灵活,存和取都很方便,操作和数据模型简单。通过节点弹性操作,所以可扩展性很高。
Redis是目前业界使用最广泛的内存数据存储。相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化。除此之外,Redis还提供一些类数据库的特性,比如事务,HA,主从库。可以说Redis兼具了缓存系统和数据库的一些特性,因此有着丰富的应用场景。
整合步骤
第一步:添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- 2.0以上高版本redis的lettuce需要commons-pool2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.6.0</version>
</dependency>
第二步:配置文件
springboot的配置文件除了可以使用application.properties,还可以使用application.yml这种形式,后者对格式的要求比较高,具体大家可以网上搜索相关文档,今天换做后面一种方式添加配置文件。
spring:
redis:
database: 1
host: 127.0.0.1
jedis:
pool:
#最大连接数据库连接数,设 0 为没有限制
max-active: 8
#最大等待连接中的数量,设 0 为没有限制
max-idle: 8
#最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
max-wait: -1ms
#最小等待连接中的数量,设 0 为没有限制
min-idle: 0
lettuce:
pool:
max-active: 8
max-idle: 8
max-wait: -1ms
min-idle: 0
shutdown-timeout: 100ms
password: ''
port: 6379
第三步:自定义序列化器配置
@Configuration
public class RedisConfig{
/**
* @param redisConnectionFactory
* @return 自定义redisTemplate,自带的bean没有序列化器
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
//设置key的序列化器
redisTemplate.setKeySerializer(new StringRedisSerializer());
//重写Redis序列化方式,使用Json方式
GenericJackson2JsonRedisSerializer jackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
// 设置值(value)的序列化采用FastJsonRedisSerializer。
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
return redisTemplate;
}
}
第四步:存储和访问redis数据
这里实体类User就不写了,StringRedisTemplate,存储字符串类型,RedisTemplate, 存储对象类型。如果key是a:b这种形式,在RedisManage可视化界面上显示的为层级结构
@RestController
@RequestMapping("/redis")
public class RedisController {
private String testString = "testString";
private String objectKey = "objectKey";
@Autowired
private RedisTemplate<String, Object> redisTemplate; //处理对象类型
@Autowired
private StringRedisTemplate stringRedisTemplate; //处理字符串类型
@GetMapping("/add")
public String add() {
//1,添加一个Value为String
stringRedisTemplate.opsForValue().set(testString, "测试存储字符串类型");
//2,添加一个Value为对象
User user = new User();
user.setId(1);
user.setUserName("张三");
user.setPassword("123456");
user.setRedisKey(objectKey);
redisTemplate.opsForValue().set("Object:user:"+user.getRedisKey(), user);
return "添加成功";
}
@GetMapping("/getUser")
public User findUserByKey() {
User user = (User) redisTemplate.opsForValue().get("Object:user:"+objectKey);
return user;
}
@GetMapping("/getString")
public String findString() {
String s = stringRedisTemplate.opsForValue().get(testString);
return s;
}
@GetMapping("/delete")
public String deleteByKey(){
//1,删除string类型
stringRedisTemplate.delete(testString);
//2,删除user对象
redisTemplate.delete(objectKey);
return "删除成功";
}
}
第五步:可视化组件查看缓存信息
访问下面对应的地址
查看redis中数据的变化