前言
Redis非关系型数据库已经是很常见的工具了,项目中用到的也很多,这篇文章系统的分析下使用过程中可能会遇到的问题
一、缓存
缓存是数据交换的缓冲区,是存贮数据的临时地方,一般读写性能较高。
我们项目中引用的Redis目的就是达到降低后端负载,降低响应时间,但是相应的也要考虑数据一致性方面的问题,引入后的项目层次大致为下图,起到了中间缓冲层的作用
二、数据安全问题
从图中一个查看用户填写问卷列表查询的流程,可以看出来加了缓冲之后,缓存的数据是要与数据库的数据保持一致的,这里就会出现数据不一致的情况(比如数据库更新,则缓存亦须更新)
三、解决方案
数据在数据库中发生更新时,主动更新缓存中的数据即可,就是要求调用者在更新数据库的同时更新缓存
在操作数据库和缓存的时候注意以下几点
1.每次更新数据库都要更新缓存吗?
每次更新数据库后都更新缓存的话,无效写操作过多,所以更新数据库的时候选择直接让缓存失效,等到下次查询时再更新缓存
2.怎么保证一致性?
单体项目的话,操作数据库和缓存的逻辑放在一个事务中即可
分布式项目可以利用分布式事务方案
3.更新缓存和数据库的先后顺序如何确定
先操作数据库再删除缓存的安全性更好一点
-------------------------------------------- 一月的第四周 -----------------------------------------------------