Day 7 Redis Lock
The best way to predict the future is to invent it——Alan Kay(Smalltalk之父)
The simplest way to use Redis to lock a resource is to create a key in an instance.
要想使用Redis对一个资源上锁,最简单的办法是在一个Redis实例中建立一个键。
The key is usually created with a limited time to live, using the Redis expires feature, so that eventually it will get released. When the client needs to release the resource, it deletes the key.
在新建一个“键”时,通常会使用redis的过期机制,给它加上有限的生存时间,以保证这个“键”最终一定会被删除掉。如果客户端想要释放资源锁,它也可以自己删除这个键。
Superficially this works well, but there is a problem: this is a single point of failure in our architecture.
表面上来看,这个办法行之有效。但其实这里有个问题:这是我们架构中的单点故障隐患。
What happens if the Redis master goes down? Well, let’s add a slave! And use it if the master is unavailable. This is unfortunately not viable.
如果Redis主服务宕机了怎么办呢?那我们就加个“从服务器”吧!主服务器不行了就用它顶上。然而不幸的是,这不是一种可行的做法。
By doing so we can’t implement our safety property of mutual exclusion, because Redis replication is asynchronous.
如果我们那么做的话,我们就无法实现互斥的安全性了——因为redis的replication机制是异步的。
There is an obvious race condition with this model:
这个模型会有一个明显的竞争条件:
Client A acquires the lock in the master.
客户端A获得了Redis主服务器上的锁。
The master crashes before the write to the key is transmitted to the slave.
在主服务器上的锁还没来得及传递给从服务器的时候,主服务器就出现故障了。
The slave gets promoted to master.
从服务器被提升为主服务器。
Client B acquires the lock to the same resource A already holds a lock for. This is safety violation!
客户端B获得了已经被客户端A上锁的资源。这违反了安全性。
本文选自:
https://redis.io/topics/distlock
| 生词 | 音标 | 释义 |
|---|---|---|
| simplest | ['sɪmplɪst] | adj. 最简单的 |
| Redis | n. 内在缓存数据库 | |
| limited | [ˈlɪmɪtɪd] | adj. 有限的 |
| expire | [ɪkˈspaɪr] | v. 期满 |
| eventually | [ɪˈvɛntʃuəli] | adv. 终于,最后 |
| release | [rɪˈliːs] | vt. 释放 |
| client | ['klaɪənt] | n. 客户端 |
| delete | [dɪˈliːt] | vt. 删除 |
| superficially | [ˌsupɚ'fɪʃl] | adv. 表面地,浅薄地 |
| single point of failure | n. 单点故障 | |
| go down | 宕机 | |
| unavailable | [ˌʌnəˈveɪləbl] | adj. 不可用的 |
| unfortunately | [ʌn'fɔrtʃənətli] | adv. 遗憾地, 不幸地 |
| viable | [ˈvaɪəbəl] | adj. 可行的 |
| implement | ['ɪmplɪmɛnt] | vt. 实现 |
| safety property | n. 安全性 | |
| mutual exclusion | ['mjutʃuəl ɪk'skluʒn] | n. 互斥 |
| replication | [ˌrɛplɪˈkeʃən] | n. 复制 |
| asynchronous | [ei'siŋkrənəs] | adj. 异步的 |
| obvious | ['ɑbvɪəs] | adj. 明显的 |
| race condition | n. 竞争条件 | |
| model | ['mɑdl] | n. 模型 |
| acquire | [ə'kwaɪr] | vt. 获得, 得到 |
| crash | [kræʃ] | v. 故障 |
| transmit | [træns'mɪt] | vt. 传递,传导 |
| promote | [prə'mot] | vt. 提升 |
| violation | [ˌvaɪəˈleɪʃn] | n. 违反,违背 |









网友评论