Memcahce和Redis比较
一、Memcache
1. memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小
redis有部份存在硬盘上,这样能保证数据的持久性。
2. Memcache使用了Slab Allocator的内存分配机制:按照预先规定的大小,将分配的内存分割成特定长度的块,以完全解决内存碎片问题。
3. memcache 存在内存中,分配的内存满后,会按一定的规则删除一些k/v数据,重启后自然全部丢失。
4. 过期策略--memcache在set时就指定,例如set key1 0 0 8,即永不过期。Redis可以通过例如expire 设定。
5. 首先要说明的是Memcached支持最大的存储对象为1M。它的内存分配比较特殊,但是这样的分配方式其实也是基于性能考虑的,简单的分配机制可以更容易回收再分配,节省对CPU的使用。大于1M需要拆分。
6. memcached能接受的key的最大长度是,255字符。
7.
同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方,但是get以后,处理期间可能先被其他Set了,后面的Set会覆盖前
面的,但是memcached
1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的item,memcached会
给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到memcached中,您可以通过cas命令把那个唯一标识一起发送给
memcached。如果该item存放在memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个
item,那么该item存放在memcached中的唯一标识将会改变,您的写操作就会失败。
8. 无身份验证,认为身份验证是更高层的问题。
9. 删除Delete操作只是将该chunk置为删除状态,这样在下次使用将优先利用这样的chunk。
10. Flush操作相当于将所有的item失效的一个动作。并不会改变memcache内存分配情况。
11. memcache已经分配的内存不会再主动清理。
12. memcache分配给某个slab的内存页不能再分配给其他slab。
13. flush_all不能重置memcache分配内存页的格局,只是给所有的item置为过期。
14. memcache最大存储的item(key+value)大小限制为1M,这由page大小1M限制。
15.
由于memcache的分布式是客户端程序通过hash算法得到的key取模来实现,不同的语言可能会采用不同的hash算法,同样的客户端程序也有可能
使用相异的方法,因此在多语言、多模块共用同一组memcached服务时,一定要注意在客户端选择相同的hash算法。
16. 启动memcached时可以通过-M参数禁止LRU替换,在内存用尽时add和set会返回失败。
17. memcached启动时指定的是数据存储量,没有包括本身占用的内存、以及为了保存数据而设置的管理空间。因此它占用的内存量会多于启动时指定的内存分配量,这点需要注意。
二、Redis
1. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
2. Redis支持数据的备份,即master-slave模式的数据备份。
3. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
4. Redis,具备一定的数据库特征。
5. Redis数据可以存储到硬盘,基本没有过期策略。
6. redis有一个致命缺陷 当内存满了时 dump数据cpu占用100%。
7.
三、Memcache和Redis区别
- Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
- Redis在很多方面具备数据库的特征,或者说就是一个数据库系统,而Memcached只是简单的K/V缓存。
- 他们的扩展都需要做集群;实现方式:master-slave、Hash。
- 在100k以上的数据中,Memcached性能要高于Redis。
- 如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。
- 如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。
- Redis和Memcache在写入性能上面差别不大,读取性能上面尤其是批量读取性能上面Memcache更强。
四、其他分布式缓存
转自:http://www.cnblogs.com/gowhy/archive/2012/12/20/2826819.html
Memcahce和Redis比较的更多相关文章
- 工具-Memcahce和Redis比较
一.Memcache 1. memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小redis有部份存在硬盘上,这样能保证数据的持久性. 2. Memcache ...
- redis AND memcache
memcache文章索引 MEMCACHE问题集锦[转] MEMCACHED 高可用方案 REPCACHED NOSQL之[MEMCACHED]学习 当 MySQL 和 Memcached 遇到尾部空 ...
- Redis、Memcache区别
Redis.Memcache区别 redis单核 memcahce多核 redis支持数据持久化 redis支持的数据类型比较多 memcache 只有key->value类型 key-> ...
- Redis和memcahce的区别【转】
先给大家讲一个基本知识点:数据库分类大致分为两类,关系型数据库和非关系型数据库.如果详细区分的话,还可以继续分下去. Redis不仅仅是缓存数据库 面试的时候,很多人会问,Redis和memcahce ...
- redis、memcache和mongodb各自的优缺点是什么
redis.memcahce 比较相似,但与 mongodb 完全不同,几乎没有可比性. 总的来说 redis/memcache 是基于内存的,讲究的是性能,多用作缓存层,比如说存放session.而 ...
- NOSQL数据库之 REDIS
NOSQL数据库之 REDIS 一.NOSQL 1.简介 NoSQL ,(Not Only SQL),泛指非关系型数据库. 特点: NoSQL 通常是以key-value形式存储, 不支持SQL语句, ...
- 使用redis构建可靠分布式锁
关于分布式锁的概念,具体实现方式,直接参阅下面两个帖子,这里就不多介绍了. 分布式锁的多种实现方式 分布式锁总结 对于分布式锁的几种实现方式的优劣,这里再列举下 1. 数据库实现方式 优点:易理解 缺 ...
- Ignite性能测试以及对redis的对比
测试方法 为了对Ignite做一个基本了解,做了一个性能测试,测试方法也比较简单主要是针对client模式,因为这种方法和使用redis的方式特别像.测试方法很简单主要是下面几点: 不作参数优化,默认 ...
- mac osx 安装redis扩展
1 php -v查看php版本 2 brew search php|grep redis 搜索对应的redis ps:如果没有brew 就根据http://brew.sh安装 3 brew ins ...
随机推荐
- MVC初级教程(四)
演示产品源码下载地址:http://www.jinhusns.com/Products/Download
- [HTML5] Canvas绘制简单图片
获取Image对象,new出来 定义Image对象的src属性,参数:图片路径 定义Image对象的onload方法,调用context对象的drawImage()方法,参数:Image对象,x坐标, ...
- 表示层设计模式:Intercepting Filter(截取筛选器)模式
上下文 问题 影响因素 解决方案 变体 示例 结果上下文 相关模式 致谢 上下文 对于任何一个曾经从头建立 Web 应用程序的人来说,他们都会有这样的体会:这项任务所需要的独立完成 ...
- JSONArray排序[收藏]
问题 JSONArray中嵌套JSONObject, 对JSONArray进行排序 排序前: [{"id":1,"name":"ljw"}, ...
- OracleServer总结进阶之系统分析(进阶完结)
个人原创,转载请在文章头部明显位置注明出处:https://www.cnblogs.com/sunshine5683/p/10080102.html 在上一篇进阶中大概讲解了一些关于进阶方面的知识,今 ...
- Recommend ways to overwrite hashCode() in java
Perface In the former chapter, I talk about topics about hashCode, And I will continue to finish the ...
- hdu 1401
Solitaire Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- javaweb jdbc实现简单的数据库基本操作和servlet的作用域以及jsp标签的使用
一,工具类,分页类和连接数据库jdbc package com.direct.util; import java.sql.Connection; import java.sql.DriverManag ...
- hello Groovy
Groovy [rocky@www ~]$ curl -s get.sdkman.io 1. 下载 [rocky@www Downloads]$ wget https://dl.bintray.com ...
- Git——远程操作详解
转载自:http://www.ruanyifeng.com/blog/2014/06/git_remote.html 作者: 阮一峰 日期: 2014年6月12日 Git是目前最流行的版本管理系统,学 ...