为什么使用redis而不是用Memcache 呢?
1 个回答
我疯狂地奔跑,只想为你承担一切的伤害,我竖起了山丘,不愿你看见我丑陋的脸庞。紫霞#### 数据类型支持 - **Memcached**:仅支持简单的 key-value 结构的数据类型,适合缓存简单的数据。 - **Redis**:支持多种数据结构,包括字符串(strings)、列表(lists)、集合(sets)、有序集合(sorted sets)、哈希(hashes)等。可以用于更复杂的数据存储和处理场景。 #### 持久化 - **Memcached**:数据存储在内存中,服务挂掉后数据不可恢复。适合用作纯缓存使用,数据丢失不会有太大影响。 - **Redis**:支持数据持久化,可以将数据定期保存到磁盘(RDB 快照)或通过 AOF(Append Only File)日志机制记录每次写操作。在服务重启后,可以通过持久化文件恢复数据。 #### 分布式和集群支持 - **Memcached**:没有原生的集群模式,需要依赖客户端实现分布式存储,将数据分片写入不同的服务器。 - **Redis**:原生支持集群模式,从 3.0 版本开始支持 Redis Cluster,可以实现自动分片和高可用。此外,还可以使用主从复制(master-slave replication)和哨兵(Sentinel)实现高可用性和故障转移。 #### 内存管理 - **Memcached**:一旦物理内存用完,会自动删除最近最少使用的数据(LRU 机制),没有虚拟内存的概念。 - **Redis**:除了 LRU 机制,还支持将不常使用的数据交换到磁盘(虚拟内存),更灵活的内存管理机制。 #### 灾难恢复 - **Memcached**:数据存储在内存中,单个 value 最大支持 1MB,数据丢失后不可恢复。 - **Redis**:单个 value 最大支持 512MB,支持 AOF 和 RDB 持久化,服务挂掉后可以通过持久化文件进行数据恢复。 #### 其他功能 - **Redis**:支持 Lua 脚本、事务、发布/订阅(pub/sub)、地理空间索引、HyperLogLog、位图等功能,功能更加丰富。 #### 网络IO模型 - **Memcached**:使用多线程的非阻塞 IO 复用网络模型,类似于 Nginx 的模型。 - **Redis**:使用单线程的 IO 复用模型,自己实现了一个简单的 AeEvent 事件处理框架,主要使用 epoll、kqueue 和 select,更接近于 Apache 早期的模式。发布于 2024-08-06 10:16 •IP属地 安徽举报评论收藏
公众号进入网站体验更佳

