缓存的意义主要用于解决数据库访问压力,提升数据返回速度。
见下图;
从上图我们可以清晰的明白缓存的意义。
那么缓存可以解决什么问题呢?
所谓本地缓存即应用自身直接开辟使用的内存空间。
一般来说,为了解决高并发访问时,第一步基本会采用本地缓存方案。
本地缓存的优点:
本地缓存的缺点:
就如下图所示:
当应用节点越来越多的时候,我们在修改数据后要不断去考虑如何解决缓存同步的问题。
而在解决缓存同步的过程中会暴露越来越多的问题:
分布式缓存也是缓存,唯一的区别就在于,在整个架构体系中是完全独立的一个进程。
分布式缓存的优点:
分布式缓存的缺点:
就如下图所示:
MemCached相对于本地缓存的主要差别是以独立进程方式存在,数据集中存储,数据不随应用程序的重启而丢失。
而key-value键值对的 value 也是一个简单的对象类型,即value可以是任意格式的数据,如简单的数字、字符串、对象等,也可以是文件、图像、视频等复杂格式的数据,但是不支持数据结构的特性。
所以MemCached进程相当于是在内存维护了一个非常大的哈希表来存储数据,对应的数据操作复杂度都是 O(1),即常量级别。
这也是 MemCached 高性能的一个实现方式,键值对存取速度都非常快。
Redis更一步丰富了key-value键值对的 value 的数据结构类型,即可以在Redis中完成value的相关数据操作,如Set集合、有序集合ZSet等,这样就不需要在应用程序额外进行这些操作,实现了开箱即用。
Redis是单线程的,不存在并发数据读写的线程安全问题,以及更重要的是保证的数据读写操作的顺序性。
Redis支持主从同步(读写分离)、集群分片拓展、数据持久化等特性,这也是 MemCached 不支持的。
所以在某些高并发场景下(如日志)Redis完全可以作为数据库来使用,提高高并发场景中的访问性能。
当前还没有观点发布,欢迎您留下足迹!