主动-主动数据库中的字符串和位域
有关将字符串和位域与 Active-Active 数据库一起使用的信息。
Redis 企业软件 | Redis 云 |
---|
主动-主动数据库支持字符串和位域。
注意:
RS 版本 6.0.20 中添加了主动-主动位域支持。对这两个数据结构的更改将在主动-主动成员数据库之间复制。
复制语义
除了字符串计数器(见下文)之外,字符串和位域都使用 “last write wins” 方法进行复制。这样做的原因是字符串和位域实际上是二进制对象。因此,与列表、集合和哈希不同,字符串或位域上给定作的冲突解决语义是未定义的。
“last write pres” 的工作原理
挂钟时间戳 (OS 时间) 存储在每个字符串的元数据中 和 bitfield作。如果 replication syncer 无法确定作顺序,则 具有 Latest Timestamp 的值优先。这是主动-主动数据库使用 OS 时间解决冲突的唯一情况。
下面是一个示例,其中稍后对同一密钥进行更新 时间 (t2) 优先于 t1 的更新。
时间 | 区域 1 | 区域 2 |
---|---|---|
T1 | SET 文本 “a” | |
T2 | SET 文本 “b” | |
T3 | — 同步 — | — 同步 — |
T4 | SET 文本 “c” | |
T5 | — 同步 — | — 同步 — |
T6 | SET 文本 “d” |
字符串计数器支持
当您使用字符串作为计数器时(例如,使用 INCR 或 INCRBY 命令), 然后,冲突将在语义上得到解决。
在发生冲突的写入时,计数器会累积计数器作总数 在每次同步中的所有成员主动-主动数据库中。
下面是如何 counter 值在两个成员 Active-Active 数据库之间同步时有效。跟 每次同步,counter 值都会累积 private increment 和 每个站点的递减量,并在 并发写入。
时间 | 区域 1 | 区域 2 |
---|---|---|
T1 | INCRBY 计数器 7 | |
T2 | INCRBY 柜台 3 | |
T3 | GET 计数器 7 |
GET 计数器 3 |
T4 | — 同步 — | — 同步 — |
T5 | GET 计数器 10 |
GET 计数器 10 |
T6 | DECRBY 计数器 3 | |
T7 | INCRBY 计数器 6 | |
T8 | — 同步 — | — 同步 — |
T9 | GET 计数器 13 |
GET 计数器 13 |
注意:
主动-主动数据库支持 59 位计数器。
此限制是为了防止在并发作中溢出计数器。