2023-04-10 14:26:59
数据持久化:支持将内存数据保存到磁盘,重启时可重新加载。
丰富数据结构:支持String、List、Set、ZSet(有序集合)、Hash等。
主从备份:支持Master-Slave模式的数据备份。
RDB(快照):
原理:定时生成数据快照,保存为二进制文件(如dump.rdb)。
优点:恢复速度快,适合大规模数据备份。
缺点:可能丢失最后一次快照后的数据。
AOF(追加文件):
原理:记录所有写操作命令,重启时重放命令恢复数据。
优点:数据完整性高,支持三种同步策略(always/everysec/no)。
缺点:文件体积大,恢复速度慢。
特点:主节点负责写,从节点同步数据并支持读,实现读写分离。
缺点:主节点故障时需手动切换。
特点:监控主从节点,自动故障转移,提升高可用性。
特点:数据分片存储,支持水平扩展,自动处理节点故障。
List:使用LPUSH生产消息,BRPOP消费消息(阻塞式)。
Pub/Sub:发布订阅模式,但消息无持久化,消费者离线会丢失消息。
List方式:消费者故障可能导致消息积压。
Pub/Sub方式:不支持消息回溯。
布隆过滤器:预判键是否存在,过滤无效请求。
缓存空值:将查询结果为空的键缓存为null,设置短过期时间。
过期时间分散:为键设置随机过期时间(如基础时间+随机值)。
多级缓存:使用本地缓存(如Caffeine)作为缓冲。
限流降级:对数据库请求进行限流。
纯内存操作:避免磁盘I/O瓶颈。
非阻塞I/O:基于多路复用(epoll/kqueue)实现高并发连接。
单线程避免锁竞争:无上下文切换开销。
volatile-lru:淘汰最近最少使用的过期键。
allkeys-lru:淘汰所有键中最近最少使用的。
volatile-ttl:淘汰即将过期的键。
noeviction:不淘汰,写操作返回错误(默认策略)。
乐观锁:使用WATCH监控键,事务中校验版本。
分布式锁:通过SETNX实现互斥访问。
Lua脚本:原子化执行多个操作,避免竞态条件。