前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >缓存使用中Redis,Memcached的共性和差异分析

缓存使用中Redis,Memcached的共性和差异分析

作者头像
brookwang
发布2022-06-24 13:31:05
4240
发布2022-06-24 13:31:05
举报

要明白各自的使用场景,就要先知道他们的共同点和差异点。

共同点:

1.Memcached与Redis都属于内存内、键值数据存储方案,都是nosql数据库中的杰出代表。

2.几乎所有主流程序设计语言都有支持memcached和redis的客户端库,上手容易,门槛极低。

3.两者都是数据存储于内存,这也导致两者几乎有相同的特征(与指标)表现、负载的数据吞吐量与延迟状况。

4.Memcached与Redis服务端都可以在几分钟内极易安装,对于学习者成本极低。

5.Memcached没有身份验证,Redis默认也无身份验证。(没有身份验证也是能够在高负载下表现优良的一个原因,当然如果别人知道了端口和ip,后果很严重,这也是目前redis最大的安全隐患,许多知名互联网项目目前都未进行身份验证)

重要来了,差异点:

1.Memcached将键名限制在250字节,值也被限制在不超过1MB,且只适用于普通字符串, Redis的键名和值都最大支持512M,MC这个坑估计许多人都遇到过。

2.Memcached只支持字符串存储,几乎就限定了其应用场景就只是读数据,Redis支持字符串,哈希,列表,集合,有序集合,其应用场景瞬间扩大N倍,其丰富的内部函数和存储类型支持各种复杂操作,榜单场景处理中有自增自减函数,列表可以在队列处理场景中有入队,出队,集合函数有增加删除等等,有序集合还可以排序,计算。

3.Memcached无数据持久性方案,只要重启,数据皆无,Redis还提供可选而且能够具体调整的数据持久性方案,RDB(快照)和AOF(复制)两种,管理员可以根据风险控制需要,通过在配置文件中设置,保持redis在一定时间周期持久化保持到磁盘上,当遇到即使重启,停电等情况,也能保持数据仍在,该特性对其在某些业务将redis作为持久存储方案有非常积极的意义。

4.Redis还有一个非常重要的,远胜Memcached的特性,Memcached不支持主从,Redis能够提供复制功能,支持主从,复制功能可以帮助缓存体系实现高可用性配置方案,从而在遭遇故障的情况下继续为应用程序提供不间断的缓存服务,主从配置也是高并发下保证服务可靠性的标配。

5.Memcached的数据回收机制使用的是LRU(即最低近期使用量)算法,Redis采用数据回收机制,能够将陈旧数据从内存中删除以提供新数据所必需的缓存空间。

6.Memcached没有身份验证,Redis虽然默认无身份验证,但是它支持身份验证,虽然也几乎大家都没设置身份验证。

7.Memcached的最大过期时间是一个月,否则会写入失败(这个坑我踩过),Redis还没有最大过期时间限制,但由于缓存机制两者不一样,在小于2.1.3的redis版本里,只能对key设置一次expire。redis2.1.3和之后的版本里,可以多次对key使用expire命令,更新key的expire time。

8.Redis是单线程,Memcached是多线程,若数据结构仅为KEY-VALUE,且VALUE的值过大,最好用Memcached,因为单线程下GET过大数据,会引起阻塞,以及其他各种Redis的慢语句(如KEYS,HGETALL等)都最好不要在生产环境执行。

9.Memcached的过期策略是惰性删除,Redis的过期策略是惰性删除+定期删除。

(1)过期删除指下次GET到的值为过期则删除。

(2)定期删除指每隔一段时间随机检查指定数量(默认为20)有过期时间的KEY,若过期则删除。

当Memcached使用内存大于设置的最大内存使用时,为了腾出内存空间来存放新的数据项,Memcached会启动LRU算法(最近最少使用)淘汰旧的数据项。

所以通过以上分析,虽然Redis与Memcached都是作为两款非常优秀而且久经考验的缓存解决方案,各有优劣。

10.Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。

Memcache的存储涉及到slab,page,chunk三个概念

1.Chunk为固定大小的内存空间,默认为48Byte。

2.page对应实际的物理空间,1个page为1M。

3.同样大小的chunk又称为slab。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人人都是架构师 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 要明白各自的使用场景,就要先知道他们的共同点和差异点。
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档