使用redis缓存数据需要注意的问题以及个人的一些思考和理解
之前我有博客也尝试过使用redis,在实际的项目中确实作用挺大的。至少对于数据的频繁读取来说都起着至关重要的作用。
但是随着技术的学习,慢慢的业务要复杂起来,以后也许会用到redis集群,所以在这边查询了一些资料,做了一些思考和理解。
如果有问题,请提出,虚心接受,认真学习。
一般的redis逻辑
请求过来,redis里面有没有?有就给用户
没有查询数据库
数据库里面有没有?没有告诉用户没有
有就查询出来,给用户,并且存放到redis
redis缓存会出现什么问题?
redis缓存数据库的数据,有一点就显得特别重要,那就是数据一致性的问题。
单个数据库在多线程操作的时候如果不是数据库锁的限制会出现很多数据不一致的问题,ACID这里我就不多说了。
redis缓存也会有这样的问题,就是数据库的数据更新到redis是会有时间差的,这样的时间差就会导致数据不一致。
比如一件商品价格在数据库里面是500,然后redis也是500,但是突然数据库修改成了600,如果所有用户都是读入数据库的话,数据库会加锁,然后避免用户读出之前那个500,但是redis的更新怎么说都是有时间差的,所以用户就有可能读取到500这个数据。
这就是数据不一致的问题。
redis适合缓存怎么样的数据?
这里的数据分为两块,第一是数据库的数据,第二是页面的一些静态数据。
这里说的是数据库的数据。
页面的一些静态数据不适合存放在缓存中。
然后对于上面提出的数据不一致的问题,所以缓存的数据也有要求。
不要缓存那些对于数据一致性要求很高的数据。
如果这个数据存在被修改的可能性,那么最好不要存缓存,要么,就不要放数据库,只放缓存。
那些对于数据一致性不高的数据,都是可以放的。
强调一点是,如果这个数据放了,但是对于这个数据的操作不是修改,而是只有删除的话,也是可以存放缓存的,因为在实际操作中,如果一个删除操作被执行的时候,缓存可以先进行删除,这样就能确保没有用户能够读取到删除之后的数据,然后再对数据库进行删除。
redis集群
redis集群,这边我给出的建议是使用redis的主从复制功能,这个功能和mysql的主从复制是一个道理,都能很好的确保数据的一致性。
具体redis集群的配置以及实验我会在后面新的博客中给出的。
总结一下:具体的使用过程中,使用redis的超时可以对数据进行一些持久化管理,对于一些数据一致性不高的数据进行缓存,使得读取速度提高,使用redis集群时可以是用主从复制功能,Redis集群没有中心节点,并且带有复制和故障转移特性,这可以避免单个节点成为性能瓶颈,或者因为某个节点下线而导致整个集群下线。
本人的经验也不多,希望有经验的师傅们能提供多一些的建议。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?