专栏目录
Java后端学习日记(一):第一个Springboot应用——Hello World!
Java后端学习日记(二):POJO的基本概念,编写,转化和简化
Java后端学习日记(三):Springboot整合Mybatis-Plus
Java后端学习日记(四):Springboot 2.X 整合Redis作为数据缓存
Java后端学习日记(五):Springboot使用@ControllerAdvice捕获和处理异常
前言
上一期中我们整合了Mybatis-Plus,对数据库进行CRUD,这一期我们来讲讲数据缓存
如果能用内存查找代替磁盘IO查找,那么效率就会高快几十到上百倍
常用的内存型数据库有Memcached,Redis和mongoDB,本文我们选择Redis进行整合
导航
为什么需要数据缓存
作为一个服务端,用户访问服务端时,大部分的请求都是查找请求,而增删改只是小部分请求。如果因为查找请求而频繁地访问数据库,对数据库来说是一种重担:
- 从数据库获取数据是一种磁盘IO操作,速度较慢
- 查找请求量过大,容易引起数据库宕机
拿一个场景作为例子:
当电商举办活动,一个商品(假设商品id为3)热卖中,很多用户点击这个商品想要获取这个商品的信息,如果没有缓存的情况下,就会有大量的
# TB_COMMODITY 为商品表
SELECT * FROM TB_COMMODITY WHERE ID=3;
并发访问数据库,且不说磁盘IO效率低下,大量的连接请求会使数据库无力处理其它请求,造成数据库宕机
所以说数据缓存在面对大量用户请求的时候是必不可少的
为什么选用Redis
Redis 是当前互联网世界最为流行的 NoSQL(Not Only SQL)数据库。NoSQL 在互联网系统中的作用很大,因为它可以在很大程度上提高互联网系统的性能。
Redis 具备一定持久层的功能,也可以作为一种缓存工具。对于 NoSQL 数据库而言,作为持久层,它存储的数据是半结构化的,这就意味着计算机在读入内存中有更少的规则,读入速度更快。
Redis的更多介绍自行百度
Redis支持的数据结构众多,性能好,支持持久化,具有原子性(单线程),用户还多…总而言之,redis,yes!
初学Redis可以将Redis先当成一个外置的HashMap^_^,存储键值对
Springboot 2.X 整合 Redis
1. 安装 Redis
见菜鸟教程
2. 在 pom.xml 中引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 排除lettuce -->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
说明:Spring Boot starter(spring-boot-starter-data-redis)默认使用 lettuce。使用jedis时,需要排除该依赖关系,并包含Jedis。
3. 在 application.yml 中配置
#配置redis
spring:
redis:
host:localhost
password:
port:6379
Redis默认密码为空,如需配置密码,则将redis.conf 或Redis Windows的 redis.windows.conf中的# requirepass foobared
这一行的井号去掉,再将foobared
改为你要设置的密码即可
4. 配置RedisUtil工具类操作Redis
org.springframework.data.redis.core.RedisTemplate
提供了丰富的api供程序员进行Redis的操作,但相对来说较为复杂,其中:
redisTemplate.opsForValue();//操作字符串
redisTemplate.opsForHash();//操作hash
redisTemplate.opsForList();//操作list
redisTemplate.opsForSet();//操作set
redisTemplate.opsForZSet()