什么是缓存?为什么要使用Redis?


什么是缓存?

缓存是⼀个高速数据交换的存储器,使用它可以快速的访问和操作数据。

举个通俗的例子。
小明经营着一家饭店,在刚开张的时候由于名气不足,客源少,生意并不是很忙,平时没事的时候就闲着,有客人来了再进厨房安排做菜。随着饭店的日益发展,此时的饭店已经不同往日,有着大量的稳定客源,并且在某些节假日的时候甚至爆满。按照以前的做法,那肯定是行不通了,在用餐高峰期的时候因为备餐慢导致了客户的长时间等待,使得饭店的屡遭投诉。
为解决这一问题,小明想到了一个办法,可以在空闲的时候,提前将热门的菜做完后放入保温柜,等用餐高峰期时再拿出来加热后就可以直接上菜,就规避了短时间内大量客源而导致的备餐慢的问题,通过这一方法,即使在高峰期,也能很好的应对。

这就是缓存的本质,将热点资源(高频读、低频写)提前放入离用户最近、访问速度更快的地方,以提高访问速度。


缓存 VS 数据库

相比于数据库而言,缓存的操作性能更高

  1. 缓存⼀般都是通过 key-value 查询数据,因为不像数据库⼀样还有查询的条件等因素,所以查询的性能⼀般会比数据库高;
  2. 缓存的数据是存储在内存中的,而数据库的数据是存储在磁盘中的,因为内存的操作性能远远大于磁盘,因此缓存的查询效率会高很多;
  3. 缓存更容易做分布式部署(当⼀台服务器变成多台相连的服务器集群),而数据库⼀般比较难实现分布式部署,因此缓存的负载和性能更容易平行扩展和增加。

本地缓存 VS 分布式缓存

根据缓存是否与应用进程属于同一进程(单机与多机),又分为本地缓存和分布式缓存

本地缓存

本地缓存也叫做单机缓存,即将服务部署到一台服务器上,所以本地缓存只适用于当前系统
在这里插入图片描述
举个例子,这个就如同每个学校的校规,根据学校的宗旨以教学理念不同,每个学校的校规都不一样,对于A学校的学生来说,B学校的校规毫无意义,也就是说每个学校的校规只适用与那个学校

所以本地缓存只适用于当前系统

优缺点

  • 访问速度快,但无法进行大数据存储
  • 集群的数据更新问题
  • 数据随应用进程的重启而丢失

分布式缓存

分布式缓存也叫做多机缓存,即将服务部署到多台服务器上,并且通过负载分发将用户的请求按照⼀定的规则分发到不同服务器。
在这里插入图片描述
而分布式缓存就如同教育局定下来的教学规范,无论是任何学校都必须遵守这个规范。

所以分布式缓存适用与所有的系统。

优缺点

  • 支持大数据量存储,不受应用进程重启影响
  • 数据集中存储,保证数据一致性
  • 数据读写分离,高性能,高可用
  • 数据跨网络传输,性能低于本地缓存

Memcached VS Redis

在市面上流行的分布式缓存中间件有两种,分别是Redis和Memcached,我们该如何对他们进行一个选择呢?
存储方式

  • Memcached把所有数据存在内存当中,数据大小不能超过内存大小,并且断电后数据会丢失。(不支持持久化,导致容灾能力弱)
  • Redis有部分存储在硬盘中,保证了数据的持久性。(持久化策略)

数据类型

  • Memcached对数据类型的支持较为简单,有时需要将数据拿到客户端来进行类似的修改再set回去,增加了网络IO的次数和数据体积
  • Redis具有复杂的数据类型,并且这些复杂类型的操作和get/set一样高效

存储值大小

  • Redis最大可以达到512mb
  • Memcached最大只有1mb

性能对于

  • Redis使用单核,在存储小数据时Redis有着明显的优势
  • Memcached使用多核,虽然在存储小数据的时候性能不及Redis,但是在存储大数据的时候Memcached要远远强于Redis

虽然从上面的结论以及当前流行程度来看,Redis都遥遥领先,但是在某些场景下,Memcached的作用也会高于Redis(例如海量数据查询),所以还需要根据具体使用场景来进行选择

适用场景

  • Redis除了作为NoSQL数据库使用外,还能用做消息队列、数据堆栈和数据缓存等;
  • Memcached适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等。

猜你喜欢

转载自blog.csdn.net/qq_35423154/article/details/108538251