Redis的缓存机制(11)
一、实验目的
(1)掌握Redis缓存的常见数据类型及其命令
(2)掌握Spring Boot项目整合Redis缓存的方法
(3)理解缓存发霉问题及其解决方案
二、实验用的仪器和材料
(1)硬件:PC或Mac一台;8G及以上内存,40G硬盘空间
(2)软件环境:Windows 10/11操作系统或其他支持JVM的操作系统
三、实验的步骤和方法
(1)参照实验手册,编写redis-cli命令。
1.1 定义一个集合,key为users:1, 向集合中添加5个元素: a, b, c, d, e
1.2 定义一个集合,key为users:2, 向集合中添加5个元素:b, c, e, f, g
1.3 求上述两个集合的交集
1.4 使用列表,向key为databases的列表中插入一下几个值:mysql, oracle, mssql, postgresql, mongodb, redis
1.5 获取databases中元素的个数
1.6 从列表中删除最先插入的元素
1.7 从列表中删除最后插入的元素
1.8 获取当前列表的所有元素
1.9 获取当前redis中的所有key
(2)参照实验手册,为在线问答项目增加Redis缓存。
2.1 运行mybatis-plus-demo项目
2.2 在pom.xml中添加redis依赖
2.3 在配置文件中增加redis配置(注意缩进)
2.4 新增config包,在config包下新增RedisConfig类,用于定义序列化和反序列化
2.5 新增util包,在util包下新增RedisUtil类,封装RedisTemplate
2.4 修改service包下的ProblemService类的get方法,使其先读缓存再读数据库
2.5 修改service.bo包下的Problem类,实现Serializable接口
2.6 利用postman发get请求,验证get方法是否将数据写入redis
2.7 利用postman发delete请求,验证删除数据时是否存在缓存发霉问题
2.8 修改service包下的ProblemService类的delete方法和update方法,在删除和修改数据时,删除缓存
2.9 再次验证缓存发霉问题是否得到解决
四、实验结果或结论
缓存发霉问题
发霉问题:缓存数据和数据库数据不一致
解决方案:update、insert、delete会直接删除对应表的缓存
本地缓存的问题:在分布式环境下,会导致缓存发霉问题
本地缓存的问题
应用服务器1: 发select请求,缓存了查询结果
应用服务器2:发update请求,修改了DB数据,同时清除了服务器2上的本地缓存,但服务器1上的缓存没有发生变化
此时就产生了缓存发霉(不一致性)的问题
不要在分布式系统中使用Mybatis二级缓存,应使用分布式缓存解决一致性问题
五、备注或说明
实验过程顺利,能够按时完成实验任务,学习了缓存机制,认识到了缓存发霉的问题,也就是造成数据库内容与缓存不一样的情况,也就说明了我在上一次实验中遇到的问题,就说得通了,数据库内容与我实际操作有不一致性,应该就是缓存机制导致的。