Memcache 和 Radis 比较

Memcache 和 Radis 比较

2014-03-28 11:00 2447人阅读 评论(0) 收藏 举报

 分类:

memcache(6)  Redis(7) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录(?)[+]

一、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和Memcache在写入性能上面差别不大,读取性能上面尤其是批量读取性能上面Memcache更强。

1.Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。

2.Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。

3.Redis支持数据的备份,即master-slave模式的数据备份。

4.如果你对数据持久化和数据同步有所要求,那么推荐你选择Redis,因为这两个特性Memcached都不具备。即使你只是希望在升级或者重启系统后缓存数据不会丢失,选择Redis也是明智的。

5.如果要说内存使用效率,使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的应用场景和数据特性有关。

6.redis可以做cache,但redis更多是作为内存数据库的角色存在,且一致性哈希的实现还不成熟

7.redis具备binlog功能,可以将所有操作写入日志,当redis出现故障,可依照binlog进行数据恢复。

8.在100k以上的数据中,Memcached性能要高于Redis。

性能测试参考:

MemcacheDB, Tokyo Tyrant, Redis performance test

时间: 2024-10-13 23:01:07

Memcache 和 Radis 比较的相关文章

(随记)php高并发

最近在做一个课程的购买功能,微信支付,以后可能会做团购或者拼团等功能,所以今天想找一找有关秒杀高并发的问题. 我理解的方法如下: 用另外的单进程处理队列,下单请求都放到队列中,一个一个的处理 在更新数据库中库存数的时候,根据update的结果来判断,where 库存 > 0,返回值如果是false,回滚 数据库乐观锁,先查询库存,将库存加一,然后生成订单,更新库存的时候再查一次库存,是否跟预期的库存一致,不一致就回滚 借助文件排他锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说

PHP与其他语言交互-总结

原网址将会不断更新 :   作程的技术博客  <PHP与其他语言交互-总结> it.zuocheng.net 软件或者系统,不同模块可能由不同的语言编写,必然会存在不同语言之间交互和通信的问题.本文站在PHP的角度,探讨PHP与其他语言交互的方式. 语言层面交互 使用胶水语言 胶水语言Shell scripts Python Ruby Lua Tcl Perl. 其本质是调用操作系统的输入与输出,由操作系统创建由其他语言写成的应用的新进程,再将其输出返回给PHP. 优点是简单容易实现. 缺点是

nginc+memcache

memcache 分为服务端和客户端.服务端用来存放缓存,客户端用来操作缓存.因此,可以使用 Nginx 直接访问 Memcache,并用$uri 和$args 等 Nginx 内置变量设定缓存 key规则,这样,当缓存命中时,Nginx 可以跳过通过 fastcgi 和 PHP 通信的过程,直接从 memcache中获取数据并返回.OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

Memcache学习总结2-Memcache的使用基本介绍

Memcache学习总结2-Memcache的使用基本介绍 上一次总结中我们已经安装部署好了Memcached,并且把PHP扩展Memcache也安装好了,这一节我们详细学习一下PHP扩展Memcache.Memcache客户端包含两组接口,一组是面向过程的接口,一组是面向对象的接口,具体可以参考PHP手册:http://php.net/manual/zh/book.memcache.php . 我们为了简单方便,就使用面向对象的方式,也便于维护和编写代码,那我们先来一段示例代码吧. Memca

MemCache超详细解读

MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度.MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串.对象等)所使用的key-value存储,数据可以来自数据库调用.API调用,或者页面渲染的结果.MemCache设计理念就是小而强大,它简单的设计促进了快速部署.易于开发并解决面对大规模的数据缓存的

mysql+nginx+php+memcache

***************** mysql+nginx+php+memcache ****************** 1.Mysql 安装 软件包依赖性: # yum install -y gcc-c++ make ncurses-devel bison openssl-devel zlib-devel cmake-2.8.12.2-4.el6.x86_64.rpm # tar zxf mysql-boost-5.7.17.tar.gz # cd mysql-5.7.17/ cmake -

nginx+tomcat+memcache

nginx支持静态页面tomcat支持动态页面如果所在的nginx服务器想要进行动态页面则需与tomcat结合此时nginx只是起到转发的作用对jsp的处理是由tomcat来处理的. 一 搭建jdk 先搭建java环境 1  tar zxf jdk-7u79-linux-x64.tar.gz -C /usr/local/    ###解压到/usr/local下### 2 ln -s jdk1.7.0_79/ java            ###软链接方便版本升级后的使用### 3 vim /

memcache的简单应用

如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么提高网站访问速度,减少对数据库的操作:作为PHP开发人员,我们一般能想到的方法有页面静态化处理.防盗链.CDN内容分发加速访问.mysql数据库优化建立索引.架设apache服务器集群.还有就是现在流行的各种分布式缓存技术:如memcached/redis:1.什么是Memcached?a.Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从