主页 > PHP教程 > 正文

memcached 和 redis 运用场景及优缺陷比照

简述

memcached 和 redis 都很相似:都是内存型数据库,数据保存在内存中,经过tcp直接存取,优势是速度快,并发高,缺陷是数据类型有限,查询功用不强,一般用作缓存。

那么题主说 memcached 的工作 redis 都能够做,那么为什么 memcached 还有人用?那是由于它们两者并不是彻底能够彼此代替的,它们也有各自的长短优缺陷


Memcached

Memcached的长处:

Memcached能够运用多核优势,单实例吞吐量极高,能够到达几十万QPS(取决于key、value的字节巨细以及服务器硬件功能,日常环境中QPS顶峰大约在4-6w左右)。

适用于最大程度扛量,有用为服务器减压。

支撑直接装备为session handle。

装备保护的坑比较少。

Memcached的局限性:

数据结构很简略单一,只支撑简略的key/value数据结构,不像Redis能够支撑丰厚的数据类型。

无法进行耐久化,数据不能备份,只能用于缓存运用,且重启后数据悉数丢掉。

无法进行数据同步,不能将MC中的数据迁移到其他MC实例中。

Memcached内存分配选用Slab

Allocation机制办理内存,value巨细散布差异较大时会形成内存运用率下降,并引发低运用率时仍然呈现踢出等问题。需求用户重视value规划。

memcached服务端原生不支撑水平扩展,必须在客户端编写缓存散布战略来完成散布式缓存,并且由于无法进行数据同步,因而出产环境中呈现单机毛病时或许会影响部分业务运转。


Redis

Redis的长处:

支撑多种数据结构,比方 string(字符串)、

list(双向链表)、dict(hash表)、set(调集)、zset(排序set)、hyperloglog(基数预算)等等。

支撑耐久化操作,能够进行aof及rdb数据耐久化到磁盘,然后进行数据备份或数据康复等操作,较好的避免数据丢掉的手法。

支撑经过Replication进行数据仿制,经过master-slave机制,能够实时进行数据的同步仿制,支撑多级仿制和增量仿制,master-slave机制是Redis进行HA的重要手法。

单线程恳求,一切指令串行履行,并发情况下不需求考虑数据一致性问题。

支撑pub/sub音讯订阅机制,能够用来进行音讯订阅与告诉。

支撑简略的业务需求,但业界运用场景很少,并不老练。

Redis的局限性:

Redis只能运用单线程,功能受限于CPU功能,故单实例CPU最高才或许到达5-6wQPS每秒(取决于数据结构,数据巨细以及服务器硬件功能,日常环境中QPS顶峰大约在1-2w左右)。

支撑简略的业务需求,但业界运用场景很少,并不老练,既是长处也是缺陷。

Redis在string类型上会耗费较多内存,能够运用dict(hash表)紧缩存储以下降内存耗用。


总结

在我看来,Redis在许多方面具有数据库的特征,或许说便是一个数据库系统,而Memcached仅仅简略的K/V缓存。

并且到底是用 redis 仍是 memcached 这个仍是看需求,由于单纯是做缓存的话,memcached现已满足敷衍绝大部分的需求,redis 的呈现仅仅供给了一个愈加好的挑选,可是不代表redis就能彻底代替 memcached ,仍是那句话,看你的需求是怎么样的。

依照技能的新旧来讲,redis 比 memcached 还愈加新,可是老练醒来说,memcached 应该愈加好,再说现在潮流也有开端转投 mongodb了,由于redis 的数据库特征,mongodb更胜一筹。

许多公司的缓存战略中运用memcached的仍是占大多数的,再者是redis,最终才是mongodb,发现没有,最新的技能在公司团队的运用仍是需求时刻的,旧的技能战略仍是许多公司团队在用,由于技能成型并且稳定性要好,这也是memcached比redis要被提及的更多的原因。


上一篇:PHP取地址符(引证符)&详解
下一篇:一篇弄懂PHP命名空间及use的运用

PythonTab微信大众号:

Python技能交流合作群 ( 请勿加多个群 ):

群1: 87464755

群2: 333646237

群3: 318130924

群4: 385100854