当前位置:网站首页>缓存使用中Redis,Memcached的共性和差异分析
缓存使用中Redis,Memcached的共性和差异分析
2022-06-24 14:26:00 【brookwang】
要明白各自的使用场景,就要先知道他们的共同点和差异点。
共同点:
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。
边栏推荐
- ssh-keygen 配置无需每次输入密码
- 入行 4 年,跳槽 2 次,我摸透了软件测试这一行
- Successfully solved: selenium common. exceptions. SessionNotCreatedException: Message: session not created: This versi
- laravel下视图间共享数据
- Online text entity extraction capability helps applications analyze massive text data
- Halcon 绘制区域 到图片中
- 卷积核、特征图可视化
- Halcon draw area into picture
- `Thymeleaf`模板引擎全面解析
- Port conflict handling method for tongweb
猜你喜欢

v-if 和 v-show 的区别

Successfully solved: selenium common. exceptions. SessionNotCreatedException: Message: session not created: This versi

Application of motion capture system in positioning and mapping of mobile robot in underground tunnel

pgsql查询分组中某个字段最大或者最小的一条数据

Keras deep learning practice (11) -- visual neural network middle layer output

A common defect management tool - Zen, which teaches you from installation to using the handle

测试 H5 和小程序的区别,你真的知道吗?

laravel 8 实现Auth登录

Three efficient programming skills of go language

Kunpeng arm server compilation and installation paddlepaddle
随机推荐
打败 二叉树!
左手代码,右手开源,开源路上的一份子
Virtual machines on the same distributed port group but different hosts cannot communicate with each other
如何解决 Iterative 半监督训练 在 ASR 训练中难以落地的问题丨RTC Dev Meetup
R language plot visualization: use plot to visualize the training set and test set after data division, use different shape label representation, training set, test set, and display training and test
Digital business cloud: strengthen supplier management and promote efficient collaboration between air transport enterprises and suppliers
【LeetCode】10、正则表达式匹配
Jupiter notebook operation
10_ Those high-profile personal signatures
Defeat the binary tree!
puzzle(016.2)指画星河
box-sizing
Idea connection MySQL custom generated entity class code
pgsql查询分组中某个字段最大或者最小的一条数据
Win10 system problems
同样是初级测试工程师,为啥他薪资高?会这几点面试必定出彩
Go language concurrency model mpg model
在CVS中恢复到早期版本
数字臧品系统开发 NFT数字臧品系统异常处理源码分享
IDEA 插件 Material Theme UI收费后的办法