大型网站应用,热点数据量往往巨大,几十G上百G是很正常的事儿,这个时候例如redis,couchbase等是一个很好的Cache工具。
redis优点:
1、支持服务器端数据操作,拥有更多数据结构,支持更丰富的数据操作。
如果需要缓存能够支持更复杂的数据结构和更频繁数据的部分更新操作,那么Redis会是不错的选择。
3、Redis提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断,主要命令包括主要命令包括 MULTI、EXEC、WATCH 命令。如果对事务有所要求,redis是个更好的选择。
4、开源社区的繁荣,Redis在国内大热,爱好者们不仅翻译了官网,更为其量身定做了很多优化方案,各种中文技术文档也是一应俱全。相比而言,Couchbase的商业版和社区版差别巨大,更趋近于闭源,网上中文资料少得可怜,所有技术文档都需要翻阅英文官网。
5、丰富的使用场景(会话缓存,全页缓存,队列,排行榜/计数榜,发布/订阅)。
总的来看,Redis采用的是包装的mallc/free,相较于Couchbase的内存管理方法来说,要简单很多。
couchbase优点:
Couchbase提供了良好的管理界面,集配置,管理,监控和告警于一身。
Redis从一开始就是单点解决方案,直到Redis3.0后才出来官方的集群方案。
Couchbase的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。
集群
Couchbase采用客户端实现分布式存储
couchbase在客户端通过像一致性哈希这样的分布式算法来实现Couchbase的分布式存储,Couchbase会通过在集群内部和客户端直接共享vbucket和节点映射关系,客户端每次操作前需要对数据的key进行计算,以确定数据落入的vbucket编号,再根据映射表确定数据所在节点,然后直接与指定节点通信,不需要Redis的节点重定位方案,对于集群变更对外也只需要更新vbucket和节点映射关系即可
Redis采用服务器端实现分布式存储
最新版本的Redis已经支持了分布式存储功能。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过ascii协议进行通信。在数据的放置策略上,Redis Cluster将整个key的数值域分成4096个哈希槽,每个节点上可以存储一个或多个哈希槽,也就是说当前Redis Cluster支持的最大节点数就是4096。Redis Cluster使用的分布式算法也很简单:crc16( key ) % HASH_SLOTS_NUMBER。为了保证单点故障下的数据可用性,Redis Cluster引入了Master节点和Slave节点。在Redis Cluster中,每个Master节点都会有对应的两个用于冗余的Slave节点。这样在整个集群中,任意两个节点的宕机都不会导致数据的不可用。当Master节点退出后,集群会自动选择一个Slave节点成为新的Master节点。
总而言之,Couchbase把数据分布计算分摊给客户端执行,节省了缓存服务器的CPU,并且客户端直接和数据所在节点通信节省了带宽并缩短了响应时间。且相比Redis至少需要6个实例才能组成集群的限制,Couchbase的集群方案更加灵活(但Redis可以一机多个实例,Couchbase单机只能部署一个)。
因此,如果机器资源充足,Couchbase可以提供更好的服务体验(由于客户端分摊计算成本,这里的机器不需要过多CPU),如果只有机器资源紧张,redis是部署上的轻量级方案,但前面提到的,当访问量爆发时,可能会考验缓存服务器的CPU(但是随着技术的发展采用redis代理应对也是不错的选择,例如:predixy,twemproxy,codis,redis-cerberus等提高可用性 、扩展性、维护性)