当人们谈论应用程序的性能改进时,每个人都认为的一个不可或缺的因素是服务器端缓存。确定适合需求的正确缓存提供程序是采用服务器端缓存的组成部分。
Redis 和Memcached 是世界范围内广泛使用的开源缓存提供程序。大多数云提供商都提供开箱即用的Redis和Memcached支持。
在本文中,我想分享Redis和Memcached之间的异同,以及何时需要使用Redis或Memcached。
Redis与Memcached之间的相似之处 福州小程序开发
- 键值对数据存储
- 支持数据分区
- 亚毫秒级延迟
- NoSQL系列
- 开源的
- 受到大多数编程语言和云提供商的支持
支持的数据类型
Memcached: 仅支持简单的键值对结构
Redis: 支持数据类型,例如字符串,列表,集合,排序集合,哈希,位数组,地理空间和超级日志。
Redis允许您访问或更改数据对象的某些部分,而不必将整个对象加载到应用程序级别,对其进行修改,然后重新存储更新的版本。
内存管理
Memcached: 严格存储在内存中,并使用扩展名extstore进行了扩展以将键值详细信息保存到驱动器中
Redis: 当物理内存已满时,可以将详细信息存储到磁盘。Redis具有将最近最少使用的值和最新值交换到物理内存中的机制。
数据大小限制
Memcached:只能存储最大1 MB的数据
Redis:可以存储最大为512 MB(字符串值)的数据
数据持久性
Memcached:不支持数据持久性
Redis: 使用RDB快照和AOF日志持久性策略支持数据持久性
集群模式(分布式缓存)
Memcached: Memcached不支持现成的分布式机制。这可以使用一致的哈希 策略在客户端实现
Redis: 支持分布式缓存(集群)
多线程
Memcached:支持多线程,因此可以有效地使用系统的多个核心
Redis:不支持多线程
缩放比例
Memcached:可以垂直扩展。仅从客户端实现水平可伸缩性(使用一致的哈希算法)
Redis: 可以水平扩展
资料复制
Memcached: 不支持数据复制
Redis:支持开箱即用的数据复制。Redis Cluster引入了主节点和从节点以确保数据可用性。Redis Cluster具有两个相应的从节点,以实现冗余。
支持的驱逐政策
记忆快取:
- 最近最少使用(LRU)
Redis:
- 无驱逐(尝试插入更多数据时,如果已达到内存限制,则返回错误)
- 所有密钥LRU(从所有密钥中退出最近最少使用的密钥)
- 易挥发的LFU(从所有密钥中退出最不常用的密钥)
- 所有键都是随机的(从所有键中随机逐出键)
- 易失性随机(随机退出具有“过期”字段集的键)
- 易挥发的TTL(在所有设置了“过期”字段的密钥中,退出最短生存时间和最近最少使用的密钥。)
- 易失性LRU(从设置了“过期”字段的所有键中退出最近最少使用的键)
- 易失性LFU(从设置了“过期”字段的所有键中退出最不常用的键)
交易管理
Memcached: 不支持交易
Redis: 支持交易
当处理较小的静态数据时,建议使用Memcached。当处理更大的数据集时,Memcached必须在保存和从缓存中检索的同时对数据进行序列化和反序列化,并且需要更多空间来存储数据。在处理较小的项目时,最好使用Memcached,因为它具有多线程特性和垂直可伸缩性。群集需要大量的精力来配置基础架构。
Redis支持各种数据类型以处理各种类型的数据。它的群集和数据持久性功能使其成为大型应用程序的理想选择。消息队列和事务等其他功能使Redis可以执行超出缓存存储的操作。
除了上述功能外,Redis还支持以下功能
- 消息队列支持(Pub / sub)
- 用于数据归档/恢复的快照
- Lua脚本
结论: Redis和Memcached都可以作为Cache存储很好地运行。选择哪个项目因项目而异。
从开始阶段就考虑提供商的利弊是明智的,以避免在项目期间进行更改和迁移。