# Redis ## 【Redis Lock(Redlock)】 #### 為什麼redis要lock? https://yuanchieh.page/posts/2020/2020-01-14_redis-lock-redlock-%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90%E8%88%87%E5%AF%A6%E4%BD%9C/ #### 設計分散式鎖的3個原則 ##### Safety 當 Lock 被取走後(鎖住後),在釋放之前不能有另一個 Client 取得 Lock,也就是 mutual exclusive ##### DeadLock Free Lock 必須在一段時間後(TTL) 自動釋放,避免握住 Lock 的 Client 跨掉而 Lock 從此不能被釋放 ##### Fault Tolerance 整體系統不能有單一節點失敗的可能,必須考量系統容錯性 ### 分散式鎖的討論 https://z.itpub.net/article/detail/052D4CAD25240FB7BAA47A910AAF5A07 ### Redis的客戶端 使用redlock要new client,是為了要取得client資料? https://juejin.cn/post/6844904088400822285 ### 主從複製、哨兵與叢集 https://hackmd.io/@tienyulin/redis-master-slave-replication-sentinel-cluster -順序 收到req 拿到request要等10秒才會進行下一步 拿到request同時也拿到鎖 收到req2 因為第一個鎖還沒釋放所以第二個鎖要先等待第一個鎖的10秒,結束後才可以讓req2拿到鎖 連接redis cluster https://github.com/luin/ioredis#cluster Unhandled error event: ClusterAllFailedError: Failed to refresh slots cache. **當獲取鎖失敗時(可能前面的req還沒釋放鎖),應該要做什麼?