mvc5网站开发之美专业的饰品行业网站开发
1. Redis 的特点及与 Memcached 的区别
-  
特点:
-  
基于内存的键值数据库,支持持久化(RDB/AOF)。
 -  
单线程模型,通过 IO 多路复用实现高并发。
 -  
支持多种数据结构:字符串、哈希、列表、集合、有序集合等。
 -  
提供事务、发布订阅、Lua 脚本等功能。
 
 -  
 -  
与 Memcached 区别:
-  
数据持久化:Redis 支持数据落盘,Memcached 纯内存。
 -  
数据类型:Memcached 仅支持字符串,Redis 支持复杂数据结构。
 -  
内存管理:Redis 采用虚拟内存机制,Memcached 使用预分配内存池。
 
 -  
 
2. Redis 的持久化机制(RDB vs AOF)
-  
RDB(快照):
-  
定时生成内存快照(
dump.rdb),恢复速度快。 -  
缺点:可能丢失最后一次快照后的数据。
 -  
触发方式:
SAVE(阻塞)/BGSAVE(后台异步)。 
 -  
 -  
AOF(追加日志):
-  
记录所有写操作命令(
appendonly.aof),数据安全性高。 -  
支持三种同步策略:
always(每次写同步)、everysec(每秒同步,默认)、no(由系统决定)。 -  
缺点:文件体积大,恢复速度慢。
 
 -  
 -  
混合持久化(Redis 4.0+):
-  
结合 RDB 和 AOF,重启时先加载 RDB 快照,再重放 AOF 增量命令。
 
 -  
 
3. Redis 的内存淘汰策略
Redis 提供 6 种策略,通过 maxmemory-policy 配置:
-  
volatile-lru:从已设置过期的数据中淘汰最近最少使用的。
 -  
volatile-ttl:淘汰即将过期的数据。
 -  
volatile-random:随机淘汰已过期的数据。
 -  
allkeys-lru:全局淘汰最近最少使用的数据(推荐)。
 -  
allkeys-random:全局随机淘汰。
 -  
noeviction:禁止淘汰,新写入操作报错。
 
4. Redis 事务与 CAS 乐观锁
-  
事务流程:
-  
MULTI开启事务 → 命令入队 →EXEC执行或DISCARD取消。 -  
事务中的命令按顺序执行,但不保证原子性(单条命令失败不影响后续执行)。
 
 -  
 -  
CAS 实现:
-  
使用
WATCH监控键,若事务执行前键被修改,则事务回滚。 -  
示例:
WATCH key val = GET key val = val + 1 MULTI SET key val EXEC 
 -  
 
5. Redis 单线程模型为何高效
-  
核心原因:
-  
纯内存操作,无磁盘 I/O 瓶颈。
 -  
基于 Reactor 模式的非阻塞 IO 多路复用(epoll/kqueue)。
 -  
单线程避免多线程上下文切换和竞争问题。
 -  
C 语言实现,底层优化充分。
 
 -  
 
6. 缓存穿透、击穿、雪崩的解决方案
-  
穿透(查询不存在的数据):
-  
布隆过滤器拦截非法请求。
 -  
缓存空值并设置短过期时间。
 
 -  
 -  
击穿(热点 key 失效后高并发访问数据库):
-  
使用互斥锁(如 Redis 的
SETNX),保证单线程重建缓存。 
 -  
 -  
雪崩(大量 key 同时过期):
-  
分散过期时间(如基础时间 + 随机偏移)。
 -  
永不过期策略 + 异步更新。
 
 -  
 
7. Redis 分布式锁的实现
-  
核心命令:
SET lock_key unique_value NX EX 30 # 原子性加锁并设置超时 -  
注意事项:
-  
锁需设置超时时间,防止死锁。
 -  
释放锁时需验证值(避免误删其他线程的锁)。
 -  
可结合 Redlock 算法实现多节点锁。
 
 -  
 
8. Redis 集群方案
-  
主从复制:
-  
主节点(Master)写,从节点(Slave)读,支持数据同步。
 -  
缺点:主节点单点故障。
 
 -  
 -  
哨兵模式(Sentinel):
-  
监控主从节点,自动故障转移。
 
 -  
 -  
Cluster 模式:
-  
数据分片(16384 个哈希槽),支持水平扩展。
 -  
节点间通过 Gossip 协议通信,自动故障恢复。
 
 -  
 
9. Redis 的 Pipeline 与 Pub/Sub
-  
Pipeline:
-  
将多个命令打包发送,减少网络往返时间(RTT),提升吞吐量。
 -  
适用场景:批量操作(如批量写入数据)。
 
 -  
 -  
Pub/Sub:
-  
发布订阅模式,支持消息广播。
 -  
缺点:消息不持久化,消费者离线时消息丢失。
 
 -  
 
10. Redis 性能优化建议
-  
内存优化:
-  
使用
ziplist、intset等紧凑数据结构。 -  
避免存储大 Key(如单个 Value 超过 1MB)。
 
 -  
 -  
持久化配置:
-  
主节点关闭 RDB/AOF,从节点开启 AOF。
 
 -  
 -  
集群部署:
-  
分片避免数据倾斜,分散热点 Key。
 
 -  
 
