Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Couchbase vs Redis,究竟哪个更胜一筹?

Couchbase vs Redis,究竟哪个更胜一筹?

作者头像
全栈程序员站长
发布于 2022-07-19 03:25:47
发布于 2022-07-19 03:25:47
1.2K0
举报

大家好,又见面了,我是全栈君。

RedisCouchbase都是基于内存的数据存储系统。在它们各自的官方描述中,Couchbase是高性能,高伸缩性和高可用的分布式缓存系统;Redis是一个开源的内存数据结构存储系统。

【权威比较】

Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:

● Redis支持服务器端的数据操作 Redis相比Couchbase来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Couchbase里,你需要将数据拿到客户端来进行类似的修改再set回去(你需要先先通过get方法从服务器读取数据文档,并将文档反序列化为json对象,之后修改json对象对应属性,再通过set方法将数据写入服务器,序列化后进行存储)。这大大增加了网络IO的次数和传输中的数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。

● 内存使用效率对比 使用简单的key-value存储的话,Couchbase的内存利用率更高,而Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Couchbase。所以,如果需要缓存能够支持更复杂的数据结构和更频繁数据的部分更新操作,那么Redis会是不错的选择。(下文会在关于数据存储模型来证明这一点)

● 性能对比 由于Redis只使用单核,而Couchbase可以使用多核,所以平均每一个核上Redis在存储小数据时比Couchbase性能更高。而在100k以上的数据中,Couchbase性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Couchbase,还是稍有逊色。

其实不论是在大块数据还是大数据量的处理上,Couchbase都要优于Redis,很多平台都是采用Couchbase来管理数千万热数据。所以,如果缓存大多数情况下仅仅需要提供数据新增和查询操作,那Couchbase基于文档类型的存储结构能够始终如一地为提供亚毫秒的查询体验,对于预定义的数据类型你还可以通过创建索引进一步优化性能,这种情况下,Couchbase无疑是你更好的选择。 (原话中比较的是Memcached,Couchbase作为Memcached的加强版,继承了其技术实现)

【Redis的优势】

一.丰富的数据结构

Redis支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型。而Couchbase仅仅支持json格式。如果有粉丝列表,排行榜,消息队列等功能需求,选择Redis能给你带来很大的便利,因为它丰富的数据结构能够简化开发和交互步骤。

为了证明Redis的优势,我们简单举个实例对比,来描述下Hash的应用场景。

▲数据存储于Couchbase

包含以下信息:用户ID为查找的key,存储的value用户对象包含姓名,年龄,生日等信息,如果用普通的key/value结构来存储,在Couchbase中有以下2种存储方式。

▪ 第一种方式将用户ID作为查找key,把其他信息封装成一个对象以序列化的方式存储,这种方式的缺点是,增加了序列化/反序列化的开销,并且在需要修改其中一项信息时,需要把整个对象取回,并且修改操作需要对并发进行保护,引入CAS等复杂问题。

▪ 第二种方法是用户信息对象有多少成员就存成多少个key-value对,用户ID+对应属性的名称作为唯一标识来取得对应属性的值,虽然省去了序列化开销和并发问题,但是用户ID为重复存储,如果存在大量这样的数据,内存浪费还是非常可观的。

▲数据存储于Redis中

Key仍然是用户ID, value是一个Map,这个Map的key是成员的属性名,value是属性值,这样对数据的修改和存取都可以直接通过其内部Map的Key(Redis里称内部Map的key为field), 也就是通过 key(用户ID) + field(属性标签) 就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。这也就是Redis作者高内存利用率的论据。

因此,如果有大量大有复杂结构的数据需要缓存,redis是更好的选择,它不仅能简化你的存储设计,还能帮你避免更新操作时繁琐的序列号和反序列化。像twitter的关注列表,粉丝列表等就是选用了redis的list,Agora Games的排行榜就是选用了redis的有序集合。

二. counter–计数器

redis和couchbase都提供了counter这一特殊数据类型,很多平台都是以counter为基础实现的流控和计数功能。但counter不同于其他数据,它对实时性的要求非常高,因此十分考验缓存系统的主键失效策略。这里简单提一下,大多数缓存系统都提供了积极失效和消极失效两种策略保证失效数据清理。

▪ 积极策略采用定时定比例抽样清理策略 ▪ 消极策略则属于请求触发式的,这里我们主要对消极策略展开叙述。

Redis 2.6之后的版本采用毫秒为单位存储过期时间,每次数据访问操作都需要进行过期检验,由此保证毫秒级别的过期精度。而couchbase的过期精度是秒级别的,也就是说如果你选择了couchbase且没有在counter上做特殊处理,你的流控将变得极不准确,更危险的是这个问题是由底层机制引发的,你几乎不可能通过业务代码来修复bug。比如你限制一个客户每秒只能访问500次,但实际情况是客户平均下来每秒只能访问不到300次,这就是计数器延迟失效引发的问题。

因此,如果选择Couchbase,要实现准确的流控和计数可能要手动为每一个计数器的key添加时间戳,并通过取余操作限制counter的峰值数量,当然如果你难以保证所有服务器时钟同步,你可以指定服务器的时间,这也算是Couchbase方案的灵活性吧。

总而言之,如果你有高精度的流控和计数类需求,又不想对原生的counter二次封装,请选择redis。

三.事务

相比Couchbase,Redis提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断,主要命令包括主要命令包括 MULTI、EXEC、WATCH 命令。如果对事务有所要求,redis是个更好的选择。

四. 开源社区的繁荣

Redis在国内大热,爱好者们不仅翻译了官网,更为其量身定做了很多优化方案,各种中文技术文档也是一应俱全。相比而言,Couchbase的商业版和社区版差别巨大,更趋近于闭源,网上中文资料少得可怜,所有技术文档都需要翻阅英文官网。

因此,如果你的开发团队缺少很好的英文阅读能力,redis是更好的选择。

五.丰富的使用场景

Redis可以适配丰富的场景,有以下五种为最为常见:

▲会话缓存(Session Cache)

这是最常用的一种使用Redis的情景。

▲全页缓存(FPC)

除基本的会话token之外,Redis还提供很简便的FPC平台。以Magento为例,Magento提供一个插件来使用Redis作为全页缓存后端。

▲队列

Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作,这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作,就类似于本地程序语言(如Python)对 list 的 push/pop 操作。 例如,Celery有一个后台就是使用Redis作为broker。

▲排行榜/计数器

Redis在内存中对数字进行递增或递减的操作实现的非常好。集合(Set)和有序集合(Sorted Set)也使得我们在执行这些操作的时候变的非常简单,Redis只是正好提供了这两种数据结构。

所以,我们要从排序集合中获取到排名最靠前的10个用户–我们称之为“user_scores”,我们只需要像下面一样执行即可。当然,这是假定是根据用户的分数做递增的排序。如果想返回用户及用户的分数,你需要这样执行: ZRANGE user_scores 0 10 WITHSCORES Agora Games就是一个很好的例子,用Ruby实现的,它的排行榜就是使用Redis来存储数据的。

▲发布/订阅

发布/订阅的使用场景确实非常多。不仅在社交网络连接中使用,还可作为基于发布/订阅的脚本触发器,甚至用Redis的发布/订阅功能来建立聊天系统。

【Couchbase的优势】

一.web界面

Couchbase提供了良好的管理界面,集配置,管理,监控和告警于一身。Couchbase的web界面提供了版本提醒,ssl证书配置,用户管理,邮件告警等一系列丰富的功能,大大简化了运维的工作;也web界面可以直观的观测OPS,磁盘写入队列,内存数据量,Compaction和Ejection实时状况,为开发和测试提供了直观的数据参考。对性能测试至关重要。而redis就仅有第三方提供的一些简单客户端产品,用于观测数据存储情况,配置优化相关的工作也需要在配置文件中操作。

如果考虑到后期性能测试以及运维的可操作性,couchbase是更好的选择。

二. 三高

这里的三高指的是高性能,高可用性和高伸缩性。

Redis从一开始就是单点解决方案,直到Redis3.0后才出来官方的集群方案,而且仍存在一些架构上的问题,其高可用性目前还没有在线上被证明,第三方的集群方案像豌豆荚的Codi又缺少官方的后续支持。

相比而言,Couchbase从一开始就内建集群系统,即使是节点重启,数据未完全载入内存,也能照常提供服务,这得益于每份数据的metedata,其中包含近期的操作信息,Couchbase借此来区分热数据,只要热数据加载到最低水位即可立即提供服务。

如果出现节点失效,集群可在指定的时间里自动发现并启动failover,这里不同Redis的哨兵系统,Couchbase采用激活失效节点备份将请求分摊给幸存节点的方案,恢复时间更快;如果节点新增,Couchbase会将内存数据复制,一份用于提供服务,一份用于重分配并时刻保证数据一致性,即集群扩容不会导致任何业务中断。此外,couchbase的异步持久化和备份同步(通过维护一个持久化队列)也要优于redis的RDB快照和AOF日志方案。因此,从三高的角度来看,高可用性和高伸缩性上Couchbase显然是更加可靠的。

Couchbase的集群方案相比Redis,对用户屏蔽了更多细节,集群更具弹性,且经过多年的生产线上验证。因此,如果高可用和弹性是重要考虑因素,那Couchbase无疑是更稳妥的方案。

两款产品直观的优势如上,大家可以根据本文结合实际业务场景进行选择。有兴趣的同学推荐阅读《Seven Databases in Seven Weeks》。

【Redis vs Couchbase内存管理分析】

对于像Redis和Couchbase基于内存的数据库系统来说,内存管理的效率高低是影响系统性能的关键因素。

▲Couchbase内存管理分析

Couchbase默认使用Slab Allocation机制管理内存,其主要思想是按照预先规定的大小,将分配的内存分割成特定长度的块以存储相应长度的key-value数据记录,以完全解决内存碎片问题。(其实是把外部碎片转化为了内部碎片)Slab Allocation机制只为存储外部数据而设计,也就是说所有的key-value数据都存储在Slab Allocation系统里,而Couchbase的其它内存请求则通过普通的malloc/free来申请,因为这些请求的数量和频率决定了它们不会对整个系统的性能造成影响。

Slab Allocation的原理相当简单。 如图所示,它首先从操作系统申请一大块内存,并将其分割成各种尺寸的块Chunk,并把尺寸相同的块分成组Slab Class。其中,Chunk就是用来存储key-value数据的最小单位。每个Slab Class的大小,可以在Couchbase启动的时候通过制定Growth Factor来控制。假定图中Growth Factor的取值为1.25,如果第一组Chunk的大小为88个字节,第二组Chunk的大小就为110个字节,依此类推。

当Couchbase接收到客户端发送过来的数据时首先会根据收到数据的大小选择一个最合适的Slab Class,然后通过查询Couchbase保存着的该Slab Class内空闲Chunk的列表就可以找到一个可用于存储数据的Chunk。当一条数据库过期或者丢弃时,该记录所占用的Chunk就可以回收,重新添加到空闲列表中。

从以上过程我们可以看出Couchbase的内存管理制效率高,而且不会造成内存碎片,但是它最大的缺点就是会导致空间浪费。因为每个Chunk都分配了特定长度的内存空间,所以变长数据无法充分利用这些空间。如图 所示,将100个字节的数据缓存到128个字节的Chunk中,剩余的28个字节就浪费掉了(这就是内部碎片,但相比外部碎片是可控的,也是可再利用的)。

▲Redis内存管理分析

Redis的内存管理主要通过源码中zmalloc.h和zmalloc.c两个文件来实现的。Redis为了方便内存的管理,在分配一块内存之后,会将这块内存的大小存入内存块的头部。

如图所示,real_ptr是Redis调用malloc后返回的指针。Redis将内存块的大小size存入头部,size所占据的内存大小是已知的,为size_t类型的长度,然后返回ret_ptr。当需要释放内存的时候,ret_ptr被传给内存管理程序。通过ret_ptr,程序可以很容易的算出real_ptr的值,然后将real_ptr传给free释放内存。

Redis通过定义一个数组来记录所有的内存分配情况,这个数组的长度为ZMALLOC_MAX_ALLOC_STAT。数组的每一个元素代表当前程序所分配的内存块的个数,且内存块的大小为该元素的下标。在源码中,这个数组为zmalloc_allocations。zmalloc_allocations[16]代表已经分配的长度为16bytes的内存块的个数。zmalloc.c中有一个静态变量used_memory用来记录当前分配的内存总大小。所以,总的来看,Redis采用的是包装的mallc/free,相较于Couchbase的内存管理方法来说,要简单很多。

总的来说,Couchbase的内存管理机制以每次分配冗余空间为代价,避免了内存碎片。如果程序需要频繁短时效的百字节以上的内存空间,比如动态令牌,Couchbase显然是更好的选择;如果仅仅使用长效的计数器或几个字节的标识字段,那么使用Couchbase反而造成内存浪费,Redis却是更好的选择。

【集群管理】

一. Couchbase集群管理

Couchbase本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Couchbase的分布式存储,Couchbase会通过在集群内部和客户端直接共享vbucket和节点映射关系,客户端每次操作前需要对数据的key进行计算,以确定数据落入的vbucket编号,再根据映射表确定数据所在节点,然后直接与指定节点通信,不需要Redis的节点重定位方案,对于集群变更对外也只需要更新vbucket和节点映射关系即可。下图是Couchbase的分布式存储实现架构。

现在我们模拟一下Couchbase的失效备援方案,假设当前客户端的vbucket和节点映射关系如下:

那么当D节点失效后,集群只需要激活ABC上D节点的数据副本,然后更新vbucket和节点映射关系如下:

此后所有的数据请求就被分摊到了ABC之上,即使客户端的配置文件里还存在节点D的地址,也不会再产生交互了。

二. Redis集群管理 相较于Couchbase只能采用客户端实现分布式存储,Redis更偏向于在服务器端构建分布式存储。最新版本的Redis已经支持了分布式存储功能。Redis Cluster是一个实现了分布式且允许单点故障的Redis高级版本,它没有中心节点,具有线性可伸缩的功能。

下图是Redis Cluster的分布式存储架构:

其中节点与节点之间通过二进制协议进行通信,节点与客户端之间通过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。

【该怎么选择】

在我看来,Conchbase和Redis本就是定位不同的两款产品。Redis的亮点在于业务契合度高,Couchbase的亮点在于高可用。如果不是二选一的场景,它们是可以相辅相成的,Redis的定位是一个带有丰富数据结构的内存数据库,充分利用其数据结构可以简化许多业务场景下的开发,如利用队列实现消息队列,利用有序集合实现排行榜;而Couchbase的定位是一个专业的分布式缓存系统,将一些业务关键信息,如鉴权信息和会话信息存储其中,能最大限度保证业务的安全性和高可用性。

Redis&Conchbase的缓存系统选型:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/111486.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年2月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Redis 和 Memcached 的区别
说到redis就会联想到memcached,反之亦然。了解过两者的同学有那么个大致的印象:redis与memcached相比,比仅支持简单的key-value数据类型,同时还提供list,set,zset,hash等数据结构的存储;redis支持数据的备份,即master-slave模式的数据备份;redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用等等,这似乎看起来redis比memcached更加牛逼一些,那么事实上是不是这样的呢?存在即合理,我们来根据几个不同点来
wangxl
2018/03/09
1.3K0
Redis 和 Memcached 的区别
Redis 和 Memcached 的区别详解
Redis的作者Salvatore Sanfilippo曾经对这两种基于内存的数据存储系统进行过比较:
哲洛不闹
2018/09/18
6080
Redis 和 Memcached 的区别详解
redis和couchbase的比较
1 Redis数据库完全在内存中,因此处理速度非常快,每秒能执行约11万集合,每秒约81000+条记录;
全栈程序员站长
2022/07/19
1.7K0
redis和couchbase的比较
【DB宝46】NoSQL数据库之CouchBase简介、集群搭建、XDCR同步及备份恢复
CouchBase是一款开源的、分布式的、面向文档的NoSQL数据库,主要用于分布式缓存和数据存储领域。能够通过manage cache提供快速的亚毫米级别的k-v存储操作,并且提供快速的查询和其功能强大的能够指定SQL-like查询的查询引擎。Couchbase是一个较新的、发展迅速的nosql数据库技术。2014年,viber宣布使用couchbase替换mongodb,以适应10亿级的用户量,目前,couchbase已大量运用于生产环境,国内使用的公司主要有新浪,腾讯等。
AiDBA宝典
2021/04/06
2.6K0
【DB宝46】NoSQL数据库之CouchBase简介、集群搭建、XDCR同步及备份恢复
两个通宵熬出来的互联网大厂最新面试题收集整理1000道(三-Memcached),欢迎点赞收藏!!!
  最近接触到很多面试相关的内容,所以就专门整理了以下,内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈。 后续会出专门的面试视频专题,欢迎关注。
用户4919348
2021/06/29
3530
Python项目使用memcached缓
许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示。 但随着数据量的增大、访问的集中,就会出现数据库的负担加重、数据库响应恶化、 网站显示延迟等不良影响。分布式缓存是优化网站性能的重要手段,大量站点都通过可伸缩的服务器集群提供大规模热点数据缓存服务。通过缓存数据库查询结果,减少数据库访问次数,可以显著提高动态Web应用的速度和可扩展性。业界常用的有redis、memcached等,今天要讲的就是在python项目中如何使用memcached缓存服务。
py3study
2020/01/07
9940
缓存那些事
前言 一般而言,现在互联网应用(网站或App)的整体流程,可以概括如图1所示,用户请求从界面(浏览器或App界面)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。 随着互联网的普及,内容信息越来越复杂,用户数和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们的应用服务器和数据库服务器所做的计算也越来越多。但是往往我们的应用服务器资源是有限的,且技术变革是缓慢的,数据库每秒能接受的请求次数也是有限的(或者文件的读写也是有限的),如何能够有效利用有限的资源来提供尽可能大的吞吐量
美团技术团队
2018/03/12
2.8K0
缓存那些事
Memcached缓存
memcached是应用较广的开源分布式缓存产品之一,它本身其实不提供分布式解决方案。 在服务端,memcached集群环境实际就是一个个memcached服务器的堆积,环境搭建较为简单。 cache的分布式主要是在客户端实现,通过客户端的路由处理来达到分布式解决方案 客户端做路由的原理非常简单: 应用服务器在每次存取某key的value时,通过某种算法把key映射到某台memcached服务器nodeA上,因此这个key所有操作都在nodeA上
JavaEdge
2021/02/23
6090
Memcached缓存
2022年Java秋招面试,程序员求职必看的Memcached 面试题
Memcached作为一款开源、高性能、分布式内存对象缓存系统,在各种需要缓存的场景都适用。因此,各大公司都需要程序员掌握使用Memcached,那么在面试中面试官会怎么考察应聘者对Memcached的掌握程度呢,今天来盘点一下常考Memcached面试题,希望可以帮助到有面试需求的小伙伴们。
Java程序猿
2022/07/01
5900
分布式数据库Couchbase 集群迁移-2
在之前的文章中,我们介绍了基于 CBBACK 以及 CBRESTORE 等操作方式进行的分布式数据库 Couchbase 集群迁移方案,具体可参考链接:分布式数据库Couchbase 集群迁移。其实,在基于不同的业务场景以及架构方案,针对分布式数据库 Couchbase 集群迁移有多种不同的实现策略,只有能够达到高效、稳定及安全,才是最优选择。
Luga Lee
2021/12/09
6410
分布式数据库Couchbase 集群迁移-2
Memcached 及 Redis 架构分析和比较
Memcached和Redis作为两种Inmemory的key-value数据库,在设计和思想方面有着很多共通的地方,功能和应用方面在很多场合下(作为分布式缓存服务器使用等)也很相似,在这里把两者放在一起做一下对比的介绍 基本架构和思想 首先简单介绍一下两者的架构和设计思路 Memcached Memcached采用客户端-服务器的架构,客户端和服务器端的通讯使用自定义的协议标准,只要满足协议格式要求,客户端Library可以用任何语言实现。 从用户的角度来说,服务器维护了一个键-值关系的数据表,服务器之间
joshua317
2018/04/16
1.5K0
Memcached 及 Redis 架构分析和比较
一文深入讲解redis和couchbase的区别
1 Redis数据库完全在内存中,因此处理速度非常快,每秒能执行约11万集合,每秒约81000+条记录;
全栈程序员站长
2022/02/20
1.3K0
memcache、redis原理对比
上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据库(MongoDB),内存数据库(Redis),内存Cache(Memcached),我们现在需要的是对大数据表仍保持高效的查询速度,普通关系型数据库是无法满足的。
互扯程序
2019/06/05
1.5K0
memcache、redis原理对比
【深度知识】memcache和redis原理对比
(这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台)
辉哥
2019/09/25
9460
【深度知识】memcache和redis原理对比
Couchbase 中的分布式储存Couchbase 中的分布式储存概述数据储存数据分布复制容错分布式协议跨机房部署Couchbase的分布式及理论总结参考
Couchbase 是一个具有高性能、可扩展性和可 用性强的数据库引擎。它可以让开发人员通过 NoSQL 的键值存储(二进制或者JSON)或者使用 N1QL 的形式对数据进行操作(N1QL 是非常类似于 SQL 的一种语法操作 JSON 数据的方式)。以现在整体架构来看,Couchbase 是往分布式数据库的方向发展下去。
一个会写诗的程序员
2018/08/17
2.3K0
Couchbase 中的分布式储存Couchbase 中的分布式储存概述数据储存数据分布复制容错分布式协议跨机房部署Couchbase的分布式及理论总结参考
缓存那些事
导语:在网络分层应用服务中,缓存的使用已比较普及,本文将结合作者实际工作经验总结,讲述在不同的场景下如何选择和使用适用的缓存框架,以达到提升服务质量,优化系统架构的目的。 一般而言,现在互联网模式(一个网站或一个应用),整体流程可以概括描述为 浏览器→应用服务器→数据库或文件(存储)→应用服务器→浏览器,这是一个标准流程,通过浏览器(或App界面)发起请求,经过服务器、数据库计算整合后反馈浏览器呈现内容。随着互联网的普及,内容信息越来越复杂,使用者和访问量越来越大,我们的应用需要支撑更多的并发量,同时我们
CSDN技术头条
2018/02/12
1K0
缓存那些事
Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
mongodb和memcached不是一个范畴内的东西。mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据。mongodb和memcached不存在谁替换谁的问题。 和memcached更为接近的是redis。它们都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存。在我们团队的项目中,一开始用的是memcached,后来用redis替代。 相比memcached: 1、redis具有持久化机制,可以定期将内存中的数据持久化到硬盘上。 2、redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。 3、redis支持virtual memory,可以限定内存使用大小,当数据超过阈值,则通过类似LRU的算法把内存中的最不常用数据保存到硬盘的页面文件中。 4、redis原生支持的数据类型更多,使用的想象空间更大。 5、前面有位朋友所提及的一致性哈希,用在redis的sharding中,一般是在负载非常高需要水平扩展时使用。我们还没有用到这方面的功能,一般的项目,单机足够支撑并发了。redis 3.0将推出cluster,功能更加强大。
Isaac Zhang
2019/09/10
2.3K0
Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
01 . Memcached原理,主从复制,代理,管理后台
使用目的: 通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度,提高可扩展性
iginkgo18
2020/09/27
1.4K0
01 . Memcached原理,主从复制,代理,管理后台
Java面试考点5之缓存
缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。缓存的类型分为:本地缓存、分布式缓存和多级缓存。
马拉松程序员
2022/04/26
4630
Java面试考点5之缓存
不同场景下,如何选择数据库?
我们做数据库选型的时候首先要问:需求是谁提出的,也就是说谁选型?是负责采购的同学、 DBA 还是业务研发?
用户1516716
2019/11/24
1.5K0
推荐阅读
相关推荐
Redis 和 Memcached 的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档