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