缓存的概念
缓存是介入应用程序和物理数据之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高应用的运行性能。
缓存内的数据对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻会同步缓存数据和物理数据源的数据。
比如我们通常是直接查询MySQL数据库,那么在高并发情况下,大量查询MySQL数据库会导致数据库性能变慢。
因此我们在应用层与MySQL之间搭建一个Cache层,让请求先访问Cache,这样能大大的降低数据库的压力,提高性能
。
分布式缓存
简单来说,缓存系统能跨进程我们就称为分布式缓存
在分布式系统开发中,系统与系统之间都是属于进程级别,缓存系统也能跨进程叫分布式缓存,市面上分布式技术有Memcached
和Redis
这两种,二者区别大致如下:
性能
- Redis是单核的
- Memcahed是多核的
内存空间和数据大小
- Memcached : 可以修改最大内存大小,进行LRU算法进行淘汰
- Redis : 不仅可以修改最大内存,因为redis的缓存是存储内存上的,一些数据可以通过VM的特性突破物理空间的限制。(可以理解:外挂一个磁盘当做数据存储源使用)
操作比较
- Memcacehd : 操作比较单一,只有一种数据类型String,用来缓存。
- Redis : 支持比较丰富的数据类型,(String、哈希、集合、有序集合等),比如做一些签到、附近的人都可以(用bitmap、geo实现),减少服务端的操作,减少IO读写。
可靠性
- Memcacehd :不支持持久化 ,断电重启数据就丢失,只能做缓存使用(需要重新从关系型数据库获取)
- Redis : 支持持久化 (RDB、AOF的2种机制) ,从持久化的数据磁盘加载并保存到缓存上,能处理单点故障、设置主从、集群、哨兵等机制。