Redis 基本概念
什么是 Redis?
Redis 是一个使用 ANSI C 编写的开源、支持网络、基于内存、分布式、可选持久性的键值对存储数据库。它可以作为内存数据库、缓存和消息中间件,其中缓存是它最主要的使用场景。
什么是缓存?
缓存概念
缓存是⼀个高速数据交换的存储器,使用它可以快速的访问和操作数据。
举个通俗的例子。 小明经营着一家饭店,在刚开张的时候由于名气不足,客源少,生意并不是很忙,平时没事的时候就闲着,有客人来了再进厨房安排做菜。随着饭店的日益发展,此时的饭店已经不同往日,有着大量的稳定客源,并且在某些节假日的时候甚至爆满。按照以前的做法,那肯定是行不通了,在用餐高峰期的时候因为备餐慢导致了客户的长时间等待,使得饭店的屡遭投诉。 为解决这一问题,小明想到了一个办法,可以在空闲的时候,提前将热门的菜做完后放入保温柜,等用餐高峰期时再拿出来加热后就可以直接上菜,就规避了短时间内大量客源而导致的备餐慢的问题,通过这一方法,即使在高峰期,也能很好的应对。
这就是缓存的本质,将热点资源(高频读、低频写)提前放入离用户最近、访问速度更快的地方,以提高访问速度。
缓存 VS 数据库
相比于数据库而言,缓存的操作性能更高
- 缓存⼀般都是通过 key-value 查询数据,因为不像数据库⼀样还有查询的条件等因素,所以查询的性能⼀般会比数据库高;
- 缓存的数据是存储在内存中的,而数据库的数据是存储在磁盘中的,因为内存的操作性能远远大于磁盘,因此缓存的查询效率会高很多;
- 缓存更容易做分布式部署(当⼀台服务器变成多台相连的服务器集群),而数据库⼀般比较难实现分布式部署,因此缓存的负载和性能更容易平行扩展和增加。
本地缓存 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等。
-