分布式环境中怎么选择缓存中间件?

Posted 360linker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式环境中怎么选择缓存中间件?相关的知识,希望对你有一定的参考价值。

再不点蓝字关注,机会就要飞走了哦

分布式环境中怎么选择缓存中间件?

分布式系统中应对高并发、提高系统稳定性和响应性能,缓存是一大利器,本文对常用的缓存中间件进行分析对比,以供参考。


分布式环境中怎么选择缓存中间件?

01

为什么要使用分布式缓存

高并发环境下这个时候如果访问不加拦截,让大量的读写请求涌向数据库,由于磁盘的处理速度与内存显然不在一个量级,服务器马上就要宕机。从减轻数据库的压力和提高系统响应速度两个角度来考虑,都会在数据库之前加一层缓存,访问压力越大的,在缓存之前就开始CDN拦截图片等访问请求。


并且由于最早的单台机器的内存资源以及承载能力有限,如果大量使用本地缓存,也会使相同的数据被不同的节点存储多份,对内存资源造成较大的浪费,因此,才催生出了分布式缓存。


02

分布式缓存应用场景


1,页面缓存.用来缓存Web 页面的内容片段,包括html、CSS 和图片等;

2,应用对象缓存.缓存系统作为ORM 框架的二级缓存对外提供服务,目的是减轻数据库的负载压力,加速应用访问;

3,解决分布式Web部署的session同步问题,状态缓存.缓存包括Session 会话状态及应用横向扩展时的状态数据等,这类数据一般是难以恢复的,对可用性要求较高,多应用于高可用集群。,

4,并行处理.通常涉及大量中间计算结果需要共享;

云计算领域提供分布式缓存服务。


04

Memcache VS Redis


1、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。而memcache只支持简单数据类型,需要客户端自己处理复杂对象

2、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用(PS:持久化在rdb、aof)。

3、由于Memcache没有持久化机制,因此宕机所有缓存数据失效。Redis配置为持久化,宕机重启后,将自动加载宕机时刻的数据到缓存系统中。具有更好的灾备机制。

4、Memcache可以使用Magent在客户端进行一致性hash做分布式。Redis支持在服务器端做分布式(PS:Twemproxy/Codis/Redis-cluster多种分布式实现方式)

5、Memcached的简单限制就是键(key)和Value的限制。最大键长为250个字符。可以接受的储存数据不能超过1MB(可修改配置文件变大),因为这是典型slab 的最大值,不适合虚拟机使用。而Redis的Key长度支持到512k。

6、Redis使用的是单线程模型,保证了数据按顺序提交。Memcache需要使用cas保证数据一致性。CAS(Check and Set)是一个确保并发一致性的机制,属于“乐观锁”范畴;原理很简单:拿版本号,操作,对比版本号,如果一致就操作,不一致就放弃任何操作

cpu利用。由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更 高。而在100k以上的数据中,Memcached性能要高于Redis 。

7、memcache内存管理:使用Slab Allocation。原理相当简单,预先分配一系列大小固定的组,然后根据数据大小选择最合适的块存储。避免了内存碎片。(缺点:不能变长,浪费了一定空间)memcached默认情况下下一个slab的最大值为前一个的1.25倍。

8、redis内存管理: Redis通过定义一个数组来记录所有的内存分配情况, Redis采用的是包装的malloc/free,相较于Memcached的内存 管理方法来说,要简单很多。由于malloc 首先以链表的方式搜索已管理的内存中可用的空间分配,导致内存碎片比较多。


05

分布式缓存选型总结


其实对于企业选型Memcache、Redis而言,更多还是应该看业务使用场景(因为Memcache、Redis两者都具有足够高的性能和稳定性)。假若业务场景需要用到持久化缓存功能、或者支持多种数据结构的缓存功能,那么Redis则是最佳选择。


综上所述:为了让缓存系统能够支持更多的业务场景,选择Redis会更优。



点击阅读原文,一起玩耍


以上是关于分布式环境中怎么选择缓存中间件?的主要内容,如果未能解决你的问题,请参考以下文章

中间件分布式缓存

使用Redis实现分布式会话

缓存中间件整理

分布式缓存中间件优缺点分析(redismemcacheehcache)

ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

一个.Net Core开源缓存中间件,让你更加简单方便使用缓存