Skip to content

Commit fe0ddca

Browse files
committed
Update 9.Redis.md
1 parent 57db4ba commit fe0ddca

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

9.Redis.md

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,7 @@ AOF写入的时候,如果某个键过期,会向AOF追加一条DEL命令;AO
343343
复制的时候,主服务器发送删除通知,从服务器接到删除通知时才删除过期键
344344

345345
### Redis高可用方案
346-
1. 主从模式:一主二从
346+
1. 主从模式:一主二从(达到支持10万+并发)
347347
配置redis.conf , 从节点配置 slaveof 127.0.0.1 6379
348348
确认主从关系: redis-cli -h 127.0.0.1 -p 6379 info replication
349349
2. 哨兵模式:
@@ -378,6 +378,26 @@ redis-sentinel redis-sentinel.conf
378378
6. 当主节点与从节点同步完当前的数据后,主节点会把后续新增的命令持续发送给从节点进行同步
379379
- 哨兵模式 最小配置 1主 2从 3哨兵,3个哨兵能监控每个master和salve
380380

381+
### 解决异步复制和脑裂导致的数据丢失
382+
383+
min-slaves-to-write 1
384+
385+
min-slaves-max-lag 10
386+
387+
要求至少有1个slave,数据复制和同步的延迟不能超过10秒
388+
389+
如果说一旦所有的slave,数据复制和同步的延迟都超过了10秒,那么master就不会再接收任何请求了
390+
391+
这两个配置可以减少异步复制和脑裂导致的数据丢失
392+
393+
(1)减少异步复制的数据丢失
394+
395+
有了min-slaves-max-lag 这个配置,就是说一旦slave复制数据和ack延迟太长,就认为master可能宕机后损失数据太多,就拒绝写入,使得同步造成的数据丢失降到可控范围
396+
397+
(2)减少脑裂的数据丢失
398+
399+
如果一个master 出现了脑裂,跟其他slave丢了连接,那么上面的配置可以确保,如果不能继续给指定数量的slave发送数据,而且slave超过10秒没有给自己ack消息,那么就直接拒绝客户端的写请求,这样脑裂后的旧master不会接受client的新数据,也就避免了数据丢失
400+
381401
### 缓存问题
382402

383403
- 缓存穿透
@@ -414,10 +434,19 @@ redis-sentinel redis-sentinel.conf
414434

415435
优化:
416436

437+
事前
438+
417439
1. 使用主从,哨兵,集群模式保证缓存高可用
418-
2. 依赖隔离组件为后端限流并降级
419440
3. 提前演练,做好后备方案
420441

442+
事中:
443+
444+
​ 使用限流组件,限流并降级
445+
446+
事后:
447+
448+
​ redis 持久化,重启后恢复数据
449+
421450
- 缓存更新方式
422451

423452
同步更新,先写入数据库,写入成功后,再更新缓存。
@@ -449,8 +478,6 @@ PS: Redis锁可能会在业务逻辑还没执行完的时候就已经超时释
449478

450479
ZK锁 通过在服务端新建一个临时有序节点,哪个客户端成功创建了第一个临时有序节点,就代表该客户端获得了锁,后面节点的客户端会处于监听状态,当释放锁的时候,服务端就会删除第一个临时节点,此时第二个临时节点能监听到上一个节点的释放事件,这样第二个节点就变成第一个节点,此时客户端2就代表获得了锁。如果客户端的会话关闭,临时节点会被删除,也就释放了锁
451480

452-
[《三种分布式锁的优缺点及解决方案》](https://mp.weixin.qq.com/s?__biz=MzA4NjA3MTAyMQ==&mid=2649219741&idx=1&sn=e543b333306af62d1ccb8753c3935f61&chksm=87dd011fb0aa8809ade0cb675f6963d606990aab2ac460ff3b27fb8fedb63a7701370518fee6&token=308357506&lang=zh_CN#rd)
453-
454481

455482

456483
### 在某个时间段,redis某个key变成了热点key,此时请求又都打到了一台slave上,请问该怎么办?

0 commit comments

Comments
 (0)