File tree Expand file tree Collapse file tree 1 file changed +31
-4
lines changed
Expand file tree Collapse file tree 1 file changed +31
-4
lines changed Original file line number Diff line number Diff 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
3493492 . 哨兵模式:
@@ -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
450479ZK锁 通过在服务端新建一个临时有序节点,哪个客户端成功创建了第一个临时有序节点,就代表该客户端获得了锁,后面节点的客户端会处于监听状态,当释放锁的时候,服务端就会删除第一个临时节点,此时第二个临时节点能监听到上一个节点的释放事件,这样第二个节点就变成第一个节点,此时客户端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上,请问该怎么办?
You can’t perform that action at this time.
0 commit comments