大家好,今天我们简单说一下缓存。什么是缓存?它在系统设计中的地位如何?假设在计算机应用中,我们通常将数据存储在数据库中,而一般数据库中的数据也存储在硬盘中。硬盘的读写毕竟速度是有限的。当某些数据特别热的时候,比如12306,查询北京到广州的车次。这些数据经常被用户访问,所以我们可以将其存储在更快的内存中。缓存的本质是解决不同存储介质之间的速度差异问题。是一个经典的空间换时间解决方案。换句话说,使用缓存是为了让系统更快。不过,这也需要一个前提。如果你的业务需要多读少写,比如电商系统中的产品系统,产品描述和产品属性是非常典型的读多写少的场景。1、缓存一定是好东西吗?缓存会有一定的副作用吗?答案是肯定的。首先,缓存可能不会让你的程序变快,相反,它可能会让它变慢。因为访问内存非常快,但是还是会消耗很多,尤其是当你的缓存不是本地而是分布式的时候,至少需要一个网络RT。所以,如果你的缓存的命中率很低,那么缓存的作用就会大打折扣,不但没有加快程序的访问速度,反而会让程序变慢。2.其次,缓存可能会让你读到错误的数据。比较官方的回答是数据的一致性会下降。出现这种数据的主要原因是缓存操作不能保证100%成功。例如,我们正在维护一个电子商务系统。华为Mate30Pro原价6999元。后来,您决定推出促销活动,将价格改为6699元。你设置新价格后,数据库已经更新了,但是缓存可能还是旧的,更糟糕??的是,如果你使用本地缓存,可能有的机器更新成功,有的机器更新失败。这样一来,用户进入不同的页面可能会看到不同的价格,引起用户的投诉,所以我们在使用缓存的时候,通常会设置一个过期时间,以减少缓存失效带来的影响。3、最后,缓存可能会给运维带来麻烦。如果我们不使用缓存,当我们在页面或应用程序上看到数据错误时,通常是数据库问题。但是引入缓存之后,我们需要增加一个过程,就是检查是否是缓存的问题。如果缓存在本地,那么可能有的机器有问题,有的机器是好的。这给我们的调查增加了很多难度。如果缓存是分布式的,也可能存在不一致的情况,同时缓存机的带宽和内存需要大量的运维成本。一般来说,缓存也是一把双刃剑。我们需要识别业务场景,合理选择合适的缓存,最大限度地发挥缓存的作用。欢迎大家关注我,一起学习,一起进步。您的支持是我继续聊天的动力。
