Memcached or Redis?

在咱们探讨如何晋升古代数据库驱动的web应用程序的性能时,这个问题是不可避免的

Memcached or Redis?

当性能须要进一步提高时,缓存通常是第一步

Memcached vs redis

首先从相似之处说起,Memcached Redis 都属于NoSql数据管理的解决方案,他们两个都基于内存,并且数据保留在RAM中,基于内存的高速个性,使得他们在作为缓存层面极其适合,在性能方面,两个数据库也十分类似,在吞吐量和提早方面,体现简直不分伯仲.说了这么多,论断是,无论你应用哪一个,每秒解决申请的次数都不会成为瓶颈。

Memcached和Redis都是成熟且十分受欢迎的开源我的项目

Memcached

Memcached最后由Brad Fitzpatrick于2003年为LiveJournal网站开发。 起初Memcached被用C重写(最后的实现是Perl),并且开源使其成为古代Web应用程序的基石。 Memcached的以后开发侧重于稳定性和优化,而不是增加新性能。

Redis

Redis由Salvatore Sanfilippo于2009年创立,Sanfilippo至今仍是该项目标首席开发商。Redis的某些局部是依据从应用Memcached取得的灵感而构建的, Redis具备比Memcached更多的性能,因而更加弱小和灵便。

为什么Memcached和Redis这么受欢迎?

它们不仅十分无效,而且绝对简略。对于开发者来说,应用Memcached或Redis都是一件很容易的事件。只须要几分钟就能够设置并应用。因而,大量的工夫和精力投入就能够对性能产生间接的、微小的影响,而且通常是数量级的。谁不爱呢?

Memcached优缺点

当缓存绝对较小的静态数据(如HTML代码片段)时,Memcached可能是更好的抉择。Memcached的外部内存治理尽管不像Redis那样简单,但在最简略的用例中效率更高,因为它耗费的元数据内存资源绝对较少。字符串(Memcached反对的惟一数据类型)非常适合存储只读的数据,因为字符串不须要进一步解决。

应用简略的key-value存储的话,Memcached的内存利用率更高,而如果Redis采纳hash构造来做key-value存储,因为其组合式的压缩,其内存利用率会高于Memcached。当然,这和你的利用场景和数据个性无关。

Memcached优于Redis的状况是扩大。 因为Memcached是多线程的,因而您能够通过提供更多的计算资源来轻松地进行扩大,然而将失落局部或全副的缓存数据(取决于是否应用统一的哈希)。 Redis次要是单线程的,能够通过集群进行程度扩大而不会失落数据。 群集是一种无效的扩大解决方案,然而设置和操作相对来说较为简单。

Redis优缺点

Redis的劣势在缓存治理的简直每个方面都是不言而喻的。缓存采纳一种称为数据回收的机制,通过从内存中删除旧数据来为新数据腾出空间。Memcached的数据回收机制采纳了最近起码应用的算法(LRU),相比之下,Redis容许对驱赶进行细粒度的管制,让你从六种不同的驱赶策略中抉择。Redis还采纳了更简单的办法来进行内存治理和剔除候选对象。Redis反对lazy和active两种类型的数据回收,只有在须要更多空间或被动获取空间时才会回收数据。

Redis为缓存对象提供了更大的灵活性。Memcached限度键名为250字节,并且只实用于一般字符串,而Redis容许键名最大为512MB,并且它们是二进制平安的。此外,Redis有五种次要的数据结构可供选择.

redis 数据结构

应用Redis作为缓存,能够取得更多的性能(比方微调缓存内容和长久化)和更高的整体效率。而且一旦应用了数据结构,对于特定的应用程序场景,效率就会大大提高。

应用Redis数据结构能够简化和优化很多事件而不仅仅在缓存时, 例如咱们能够应用Redis Hash来存储对象的字段和值,并应用单个键来治理它们,而不是将对象存储为序列化的string。 Redis Hash为开发人员节俭了获取整个字符串,反序列化,更新值,从新序列化对象以及将缓存中的整个字符串替换为新值的需要,这意味着更低的资源耗费和更高的性能。

Redis提供的其余数据结构(如list、set、zset、hyperloglog、bitmap和Geo)能够用于实现更简单的场景。应用他们能够大大降低复杂性和带宽耗费。

Redis的另一个重要长处是它存储的数据不是通明的,因而服务器能够间接对其进行操作。 Redis提供的180多个命令中有相当大的一部分专门用于数据处理操作,并通过服务器端Lua脚本将逻辑嵌入数据存储自身。 这些内置命令和用户脚本能够灵便地在Redis中解决数据/解决工作,而不用通过网络将数据传送到另一个零碎进行解决。

Redis提供了可选和可调的数据持久性形式,旨在在打算敞开或意外故障后疏导缓存。尽管咱们偏向于认为缓存中的数据是不稳固的和短暂的,但在缓存场景中,将数据长久化到磁盘是十分有价值的。让缓存数据在重新启动后立刻可用来加载,这样做能够容许更短的缓存预热工夫,打消数据的填充工夫以及缓存数据从新计算的工夫(如果缓存是计算密集型数据的话)

关注公众号:java宝典