memcacheMemcached和Memcache有什么区别 - PHP进阶讨论

memcache  时间:2021-08-11  阅读:()

Redis和Memcache的区别总结

1. Redis是什么 这个问题的结果影响了我们怎么用Redis。

如果你认为Redis是一个key value store, 那可能会用它来代替MySQL;如果认为它是一个可以持久化的cache, 可能只是它保存一些频繁访问的临时数据。

Redis是REmote DIctionary Server的缩写,在Redis在官方网站的的副标题是A persistent key-value database with interface written in ANSI-C for Posix systems,这个定义偏向key value store。

还有一些看法则认为Redis是一个memory database,因为它的高性能都是基于内存操作的基础。

另外一些人则认为Redis是一个data structure server,因为Redis支持复杂的数据特性,比如List, Set等。

对Redis的作用的不同解读决定了你对Redis的使用方式。

互联网数据目前基本使用两种方式来存储,关系数据库或者key value。

但是这些互联网业务本身并不属于这两种数据类型,比如用户在社会化平台中的关系,它是一个list,如果要用关系数据库存储就需要转换成一种多行记录的形式,这种形式存在很多冗余数据,每一行需要存储一些重复信息。

如果用key value存储则修改和删除比较麻烦,需要将全部数据读出再写入。

Redis在内存中设计了各种数据类型,让业务能够高速原子的访问这些数据结构,并且不需要关心持久存储的问题,从架构上解决了前面两种存储需要走一些弯路的问题。

2. Redis不可能比Memcache快 很多开发者都认为Redis不可能比Memcached快,Memcached完全基于内存,而Redis具有持久化保存特性,即使是异步的,Redis也不可能比Memcached快。

但是测试结果基本是Redis占绝对优势。

一直在思考这个原因,目前想到的原因有这几方面。

Libevent。

和Memcached不同,Redis并没有选择libevent。

Libevent为了迎合通用性造成代码庞大(目前Redis代码还不到libevent的1/3)及牺牲了在特定平台的不少性能。

Redis用libevent中两个文件修改实现了自己的epoll event loop(4)。

业界不少开发者也建议Redis使用另外一个libevent高性能替代libev,但是作者还是坚持Redis应该小巧并去依赖的思路。

一个印象深刻的细节是编译Redis之前并不需要执行./configure。

CAS问题。

CAS是Memcached中比较方便的一种防止竞争修改资源的方法。

CAS实现需要为每个cache key设置一个隐藏的cas token,cas相当value版本号,每次set会token需要递增,因此带来CPU和内存的双重开销,虽然这些开销很小,但是到单机10G+ cache以及QPS上万之后这些开销就会给双方相对带来一些细微性能差别(5)。

3. 单台Redis的存放数据必须比物理内存小 Redis的数据全部放在内存带来了高速的性能,但是也带来一些不合理之处。

比如一个中型网站有100万注册用户,如果这些资料要用Redis来存储,内存的容量必须能够容纳这100万用户。

但是业务实际情况是100万用户只有5万活跃用户,1周来访问过1次的也只有15万用户,因此全部100万用户的数据都放在内存有不合理之处,RAM需要为冷数据买单。

这跟操作系统非常相似,操作系统所有应用访问的数据都在内存,但是如果物理内存容纳不下新的数据,操作系统会智能将部分长期没有访问的数据交换到磁盘,为新的应用留出空间。

现代操作系统给应用提供的并不是物理内存,而是虚拟内存(Virtual Memory)的概念。

基于相同的考虑,Redis 2.0也增加了VM特性。

让Redis数据容量突破了物理内存的限制。

并实现了数据冷热分离。

4. Redis的VM实现是重复造轮子 Redis的VM依照之前的epoll实现思路依旧是自己实现。

但是在前面操作系统的介绍提到OS也可以自动帮程序实现冷热数据分离,Redis只需要OS申请一块大内存,OS会自动将热数据放入物理内存,冷数据交换到硬盘,另外一个知名的“理解了现代操作系统(3)”的Varnish就是这样实现,也取得了非常成功的效果。

作者antirez在解释为什么要自己实现VM中提到几个原因(6)。

主要OS的VM换入换出是基于Page概念,比如OS VM1个Page是4K, 4K中只要还有一个元素即使只有1个字节被访问,这个页也不会被SWAP, 换入也同样道理,读到一个字节可能会换入4K无用的内存。

而Redis自己实现则可以达到控制换入的粒度。

另外访问操作系统SWAP内存区域时block进程,也是导致Redis要自己实现VM原因之一。

5. 用get/set方式使用Redis 作为一个key value存在,很多开发者自然的使用set/get方式来使用Redis,实际上这并不是最优化的使用方法。

尤其在未启用VM情况下,Redis全部数据需要放入内存,节约内存尤其重要。

假如一个key-value单元需要最小占用512字节,即使只存一个字节也占了512字节。

这时候就有一个设计模式,可以把key复用,几个key-value放入一个key中,value再作为一个set存入,这样同样512字节就会存放10-100倍的容量。

这就是为了节约内存,建议使用hashset而不是set/get的方式来使用Redis,详细方法见参考文献(7)。

6. 使用aof代替snapshot Redis有两种存储方式,默认是snapshot方式,实现方法是定时将内存的快照(snapshot)持久化到硬盘,这种方法缺点是持久化之后如果出现crash则会丢失一段数据。

因此在完美主义者的推动下作者增加了aof方式。

aof即append only mode,在写入内存数据的同时将操作命令保存到日志文件,在一个并发更改上万的系统中,命令日志是一个非常庞大的数据,管理维护成本非常高,恢复重建时间会非常长,这样导致失去aof高可用性本意。

另外更重要的是Redis是一个内存数据结构模型,所有的优势都是建立在对内存复杂数据结构高效的原子操作上,这样就看出aof是一个非常不协调的部分。

其实aof目的主要是数据可靠性及高可用性,在Redis中有另外一种方法来达到目的:Replication。

由于Redis的高性能,复制基本没有延迟。

这样达到了防止单点故障及实现了高可用。

小结 要想成功使用一种产品,我们需要深入了解它的特性。

Redis性能突出,如果能够熟练的驾驭,对国内很多大型应用具有很大帮助。

Xcache和memcache选哪个好

memcache和 Xcache 是PHP的2个缓存工具。

PHP5.5以来,自带有 Zend Opcache ,不过默认没启用。

这些缓存器的原理:   引用   把PHP执行后的数据缓冲到内存中从而避免重复的编译过程,能够直接使用缓冲区已编译的代码从而提高速度,降低服务器负载,它们的效率是显而易见的,像drupal这种庞大的CMS,每次打开一个页面要调用数十个PHP文件,执行数万行代码,效率可想而知 然而Opcache 只自动缓存代码,它没有开放一个自定义缓存的API,要用到用户缓存的话还得用上Xcache或者memcache。

Xcache是中国人所做,看起来很牛叉,但是在实际应用中发现这个东西太不稳定了,光用它作代码缓存(后台自动缓存PHP代码),竟然有时候会使得整个PHP进程都当掉。

然后也试了Xcache的用户缓存,API文档写得真够残的,好在还能用,但万没有想到,在fastcgi模式下,缓存命中率低得可怜,用和没用基本上差不多,明明缓存了,后一个请求过来一查却说没缓存,可能延时个几秒后才得知这个已经缓存了,才能取出缓存内容。

这玩意到底仔细测试没有?我用的是3.1.0官方正式版Xcache在PHP 5.5 里作的测试,简直就是个废物!还记得以前在PHP5.2里面也用它过,莫名其妙的请求失败也时有出现。

现在直接不敢再用…… 相比这个XCache,memcache稳定得多。

题外话:memcached和memcache又有点不同,memcached是memcache的守护进程,但是PHP中也有memcached的扩展。

这两个说实话是让人头晕不知道是什么区别,其实我看来就是调用memcache的封装模式不太一样而已。

具体哪些调用上的不同,参考 /package/memcache 和/package/memcached 。

一看就知道memcached要多一些API函数调用,功能也更强大一些。

而实际上基础应用的话memcache已经足够。

memcache的使用首先要有它的服务(也就是memcached进程)在跑,这个是一个小小的软件,一般是用C++编译,可以部署在与PHP同一台也可以不同,甚至可以分布式部署几个memcached服务在不同的服务器上。

而PHP的memcached只是它的客户端而已。

memcached本身没有PHP代码缓存功能,现升到PHP5.5后直接交给自带Opcache 了。

一般用它作用户缓存。

经过实际开发,memcached稳定性是非常高的,只要有缓存,命中率几乎在99%以上。

PHP官方下提供了它的扩展可直接使用:/package/memcache 连Windows版的DLL也直接在那里了,不用自己再编译。

Windows下编译这些东西真是麻烦得很啦~ 综上memcache更加稳定,推荐使用。

Xcache真要用的话,还是老实在本地先测试一下再说。

此外,微软Windows下PHP可以使用Wincache,这个的稳定性没得说的,而且也不用守护进程。

但是微软没能编译适用于PHP 64位的DLL。

要想通用和跨平台,memcache是首选!!

memcache有什么作用?提高多少效率

memcache通过创建缓存,首次查询从数据库取出值返回页面并保存到memcache的缓存中,以后只要要查的数据没有发生改变都从缓存中取值,这样大大缓解了数据库压力,大大提高数据读取效率,没有提高多少效率只说,这是根据项目的数据库修改频率还有访问量来说的提高效率。

什么叫memcache一致性hash

我们的memcache客户端(这里我看的spymemcache的源码),使用了一致性hash算法ketama进行数据存储节点的选择。

与常规的hash算法思路不同,只是对我们要存储数据的key进行hash计算,分配到不同节点存储。

一致性hash算法是对我们要存储数据的服务器进行hash计算,进而确认每个key的存储位置。

Memcached和Memcache有什么区别 - PHP进阶讨论

PHP扩展中的memcache 要安装memcache包? ?调用函数用"memcache"memcached??要安装libmemcached包??调用函数用"memcached"如要在系统中安装memcache服务则要安装memcached 包 并且用??"memcached -d -m 512 -u memcached "? ?这样的命令来启动服务

台湾CN2云服务器 2核2G 5M 5IP 台湾物理服务器 E5x2 64G 20M 5IP

提速啦(www.tisula.com)是赣州王成璟网络科技有限公司旗下云服务器品牌,目前拥有在籍员工40人左右,社保在籍员工30人+,是正规的国内拥有IDC ICP ISP CDN 云牌照资质商家,2018-2021年连续4年获得CTG机房顶级金牌代理商荣誉 2021年赣州市于都县创业大赛三等奖,2020年于都电子商务示范企业,2021年于都县电子商务融合推广大使。资源优势介绍:Ceranetwo...

[6.18]DogYun:充100送10元,态云7折,经典云8折,独立服务器月省100元,幸运大转盘最高5折

DogYun是一家2019年成立的国人主机商,提供VPS和独立服务器租用等,数据中心包括中国香港、美国洛杉矶、日本、韩国、德国、荷兰等,其中VPS包括常规VPS(经典云)和按小时计费VPS(动态云),使用自行开发的面板和管理系统,支持自定义配置,动态云各个硬件独立按小时计费,带宽按照用户使用量计费(不使用不计费)或者购买流量包,线路也可以自行切换。目前商家发布了6.18促销方案,新购动态云7折,经...

快云科技,免云服务器75折优惠服务器快云21元/月

近日快云科技发布了最新的夏季优惠促销活动,主要针对旗下的香港CN2 GIA系列的VPS云服务器产品推送的最新的75折优惠码,国内回程三网CN2 GIA,平均延迟50ms以下,硬件配置方面采用E5 2696v2、E5 2696V4 铂金Platinum等,基于KVM虚拟架构,采用SSD硬盘存储,RAID10阵列保障数据安全,有需要香港免备案CN2服务器的朋友可以关注一下。快云科技怎么样?快云科技好不...

memcache为你推荐
ripperRipper是个什么病毒cs躲猫猫cs1.6捉迷藏模式怎么玩啊cs躲猫猫CS GO怎么玩躲猫猫横幅广告banner是横幅广告,botton是按钮型广告。大家能说说它们之间的区别吗?高质量图片ps 合成图片,怎样才算高质量的?从那些方面判定照片的质量qsv视频格式转换器手机qsv怎么转换成mp4格式转换器传奇私服教程怎样开传奇SF?我要具体详细的步骤第五人格抄袭有像第五人格那种游戏吗?没有nvidia控制面板为什么我的电脑点击右键没有NVIDIA控制面板没有nvidia控制面板电脑没有nvidia显卡控制面板是怎么回事
域名邮箱 ddos 冰山互联 创梦 刀片服务器是什么 新家坡 东莞服务器 789电视剧 电信托管 web服务器搭建 免费外链相册 网页加速 群英网络 美国迈阿密 大化网 谷歌搜索打不开 512内存 海外加速 blaze 火山互联 更多