乐趣区

关于java:Memcached-or-Redis

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 宝典

退出移动版