一、缓存
1.1、什么是缓存
内存就是计算机内存中的一段数据。
1.2、内存中的数据特点
- 读写快
- 断电数据丢失
1.3、缓存解决了什么问题
- 提高了网站的吞吐量和运行效率
- 减轻了数据库的访问压力
1.4、哪些数据适合加缓存
使用缓存时,一定是数据库中的数据极少发生改变,更多用于查询这种情况。例如收获地址:省市县村
1.5、本地缓存和分布式缓存
- 本地缓存:存储在应用服务器内存中的数据称之为本地缓存(local cache)
- 分布式缓存:存储在当前应用服务器内存之外的数据称之为分布式缓存(distribute cache)
- 集群:将同一种服务的多个节点放在一起共同为系统提供服务的过程称之为集群
- 分布式:由多个不同的服务集群共同对系统提供服务,那么这个系统就被称之为分布式系统(distribute system)
二、缓存优化
2.1、Key优化
当前使用Redis作为分布式缓存的情况下,默认生成的hashKey太长,如下:怎么样对Key进行优化,使生成的Key简洁一些?
-1179870921:3186541116:org.star.mapper.EmployeeMapper.getDetail:0:2147483647:select e.id,e.name,d.department_name from employee e,department d where e.department_id = d.id and e.id = ?:2:SqlSessionFactoryBean
2.2、MD5的特点
- 一切文件字符串再经过MD5加密后,都会生成32位的16进制字符串
- 不同内容的文件经过MD5加密后,加密结果一定不一致
- 相同内容的文件经过多次MD5加密后,结果始终一样
2.3、解决方案
在Redis整合MyBatis的过程中,建议将Key使用MD5进行优化处理。
三、面试相关
3.1、什么是缓存穿透(击穿)
客户端查询了一个数据库中没有的记录,导致缓存在这种情况下无法利用,称之为缓存穿透(缓存击穿)。
3.2、MyBatis是如何解决缓存穿透的
将数据库中没有查询到的结果,也进行缓存。
3.3、什么是缓存雪崩
在系统运行的某一时刻,突然系统中的缓存全部失效,恰好在这一时刻涌来了大量的客户请求,导致所有模块缓存无法利用,进而引起大量请求涌向数据库查询的极端情况,导致数据库阻塞或者挂起。
解决方案:
(1)缓存永久存储【不推荐】
(2)针对于不同的业务数据,设置不同的超时时间
3.4、项目中有没有遇到?如何解决
没有用到。项目中我们使用的是MyBatis框架作为持久层,MyBatis已经解决了缓存穿透的问题。