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