10、Redis中分布式缓存实现
1.什么是缓存(Cache)
定义:就是在计算机内存中一段数据
2.内存中数据特点
- 读写快
- 断电立即丢失
3.缓存解决了什么问题
- 提高网站吞吐量,提高网站运行效率。
- 核心解决问题:缓存的存在时用来减轻数据库访问压力。
4.本地缓存和分布式缓存区别
本地缓存:存在应用服务器内存中数据称之为本地缓存(local cache)
分布式缓存:存储在当前应用服务器之外数据称之为分布式缓存(distribute cache)
集群:将同一种服务的多个节点放在一起共同对系统提供服务过程称之为集群
分布式:有多个不同服务集群共同对系统提供服务这个系统称之为分布式系统(distribute system)
5.利用mybatis自身本地缓存结合redis实现分布式缓存
- mybatis中应用级缓存(二级缓存) SqlSessionFactory 级别缓存,所有会话共享
- 如果开启(二级缓存)
<!--在对应的mapper文件加入cache标签 本地缓存-->
<cache/>
- 查看Cache标签缓存实现
org.apache.ibatis.cache.impl.PerpetualCache 实现
-
自定义RedisCache实现
- 通过mybatis默认cache源码得知,可以使用自定义Cache类 implements Cache接口,并对里面方法进行实现
public class RedisCache implements Cache{ }- 使用RedisCache实现
<cache type = "cn.edu.njtech.cache.RedisCache"
6.在mybatis的缓存中解决关联关系时更新缓存信息问题
<cache-ref namespace="cn.edu.njtech.dao.UserDAO"/>
7.面试相关概念
- 什么是缓存穿透 击穿
定义:客户端查询了一个数据库中没有的数据记录导致缓存在这种情况下无法利用,称之为缓存穿透,或者是缓存击穿
mybatis在cache解决了缓存穿透:将数据库中没有查询到的结果也进行了缓存。
- 什么缓存雪崩
定义:在系统运行的某一时刻,突然系统中缓存全部失效,恰好在这一时刻涌来大量客户请求,导致所有模块缓存无法利用,大量请求向数据库导致极端情况,数据库阻塞或挂起。
解决方法:
1. 缓存永久存储【不推荐】
2. 针对于不同业务一定要设置不同超时时间