作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL
PostgreSQL
Redis(本章节)
Etcd
前进介绍Redis的各种特性,其实在内存数据库里面还有一个出现时间比他更早的缓存数据库:Memcached,他发布于2003年,比Redis发布时间更早。
Memcached 是一个高性能、分布式的内存对象缓存系统,最初由 Brad Fitzpatrick 为 LiveJournal 开发,主要用于加速动态 Web 应用程序,通过减轻数据库负载来提高性能。
内存存储:所有数据都存储在内存中,读写速度极快(毫秒级),但重启 Memcached 服务或服务器宕机后,数据会全部丢失(非持久化)。
键值对存储:数据以 Key-Value 形式存储,Key 是字符串(最大 250 字节),Value 可以是任意类型的数据(如字符串、数字、序列化的对象,最大 1MB)。
分布式:支持多服务器集群部署,客户端会根据哈希算法自动将数据分发到不同的 Memcached 节点,实现负载均衡。
过期策略:可以为每个 Key 设置过期时间(TTL),到期后自动删除;当内存满时,会按 LRU(最近最少使用) 策略淘汰旧数据。
无数据备份 / 同步:节点之间不共享数据,也不会同步数据,客户端负责数据的分发和查找。
多线程模型:Memcached采用多线程模型,通过精细的锁设计减少竞争,在处理简单键值读写时能充分利用多核CPU,达到极高的吞吐量。
特性 | Memcached | Redis |
|---|---|---|
数据类型 | 只支持字符串和整数 | 字符串、列表、集合、哈希等 |
持久化 | 不支持 | 支持 RDB/AOF |
集群模式 | 客户端分片 | 原生集群支持 |
内存管理 | Slab Allocator | 多种策略 |
线程模型 | 多线程 | 单线程(6.0+多线程IO) |
适用场景 | 简单缓存 | 缓存、消息队列、数据库等 |
客户端
│
├─ 一致性哈希算法选择服务器
│
服务器集群(节点间不通信)
├─ 节点1: Slab Class 1, 2, 3...
├─ 节点2: Slab Class 1, 2, 3...
└─ 节点3: Slab Class 1, 2, 3...内存池
│
├─ Slab Class 1: 96字节 chunks
├─ Slab Class 2: 120字节 chunks
├─ Slab Class 3: 152字节 chunks
└─ ... (预定义的大小等级)如果只是做缓存,无论是Redis还是Memcache其实区别不大,但是目前主流的应用基本都会选择Redis。