详解Redis缓存及其问题

前言:笔者最近又学习了一下Redis,看到Redis缓存,便写下这篇文章。

什么是缓存

  • 缓存就是数据交换的缓冲区(称作Cache),是存储数据的临时地方,一般读写性能较高。
  • 作为Web应用,用户肯定是通过浏览器向服务器发送请求,这个时候浏览器就能建立缓存,可以缓存页面静态资源(css、Js、image),缓存到本地,无需每次加载,降低网络延迟,提高网络响应速度。
  • 那浏览器缓存未命中的数据,就会去到TomCat(编写的Java应用),在Tomcat里面,还可以添加应用层缓存,(简单来说,去创建一个Map,把用户从数据库查询的数据放到Map中,以后再来的时候放到Map中读给你,但一般情况下不用)咱用Redis来做应用层的缓存,那是极好的。如果Redis中的缓存未命中,还是会走到数据库中的。
  • 走到数据库之后,也是有缓存的。Mysql是聚簇索引,会根据ID创建索引,给索引数据缓存起来。当去根据索引查询,在内存中快速检索,这的Mysql的数据是保存在了Buffer Pool中,也就是缓冲池。
  • 最终数据去查找,还是要落到磁盘。做一些复杂的排序,表关联。访问CPU和磁盘,这就用到了CPU的多级缓存,乃至磁盘也可以建立多级缓存。

在这里插入图片描述

缓存的好处

  • 缓存的好处

    • 降低后端负载(以前要先去查数据库,数据库要去做磁盘读写,相对来讲效率比较低,导致业务延迟比较高,特别是复杂的SQL业务,给服务器带来比较大的压力)如果有了缓存,请求进了Tomcat以后直接在缓存里查到数据,返回给前端,不用去查数据库,降低后端压力。
  • 提高读写效率,降低响应时间,这种读写一般是磁盘的读写,响应时间较长。如果使用缓存(redis),响应时间在微秒级别,大大缩短响应时间,提高读写效率。 应对更高的并发请求。

缓存的成本

  • 本来数据是保存在数据库的,现在把它缓存了一份放到了内存中,用户查询的时候优先去查询redis,此时如果数据库的数据发生了变化,缓存里的数据还是旧的数据,这时候两者就产生了不一致,如果是比较重要的数据,带来的问题比较严重。这个就是要保证数据的一致性。
  • 代码维护成本提高:要解决一致性,需要一些复杂的业务逻辑。在解决一致性问题,还会出缓存穿透、缓存击穿等问题。 为了解决这些问题,代码的复杂度提升,以后开发维护成本提高。
  • 运维成本:为了避免缓存雪崩这样的问题,要保证缓存的高可用。需要搭建成集群,而缓存集群的维护就需要一些人力和硬件的成本。

有任何想要讨论和学习的问题可联系我:577371067@qq.com 不足之处请大家指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值