{
  "id": "develop",
  "title": "Active-Active Redis applications",
  "url": "https://redis.io/docs/latest/operate/rs/7.8/databases/active-active/develop/",
  "summary": "General information to keep in mind while developing applications for an Active-Active database.",
  "content": "Developing globally distributed applications can be challenging, as\ndevelopers have to think about race conditions and complex combinations\nof events under geo-failovers and cross-region write conflicts. In Redis Enterprise Software (RS), Active-Active databases\nsimplify developing such applications by directly using built-in smarts\nfor handling conflicting writes based on the data type in use. Instead\nof depending on just simplistic \"last-writer-wins\" type conflict\nresolution, geo-distributed Active-Active databases (formerly known as CRDBs) combine techniques defined in CRDT\n(conflict-free replicated data types) research with Redis types to\nprovide smart and automatic conflict resolution based on the data type's\nintent.\n\nAn Active-Active database is a globally distributed database that spans multiple Redis\nEnterprise Software clusters. Each Active-Active database can have many Active-Active database instances\nthat come with added smarts for handling globally distributed writes\nusing the proven\n[CRDT](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type)\napproach.\n[CRDT](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type)\nresearch describes a set of techniques for creating systems that can\nhandle conflicting writes. CRDBs powered by Multi-Master Replication\n(MMR) provide a straightforward and effective way to replicate your\ndata between regions and simplify development of complex applications\nthat can maintain correctness under geo-failovers and concurrent\ncross-region writes to the same data.\n\n\n\nActive-Active databases replicate data between multiple Redis Enterprise Software\nclusters. Common uses for Active-Active databases include disaster recovery,\ngeographically redundant applications, and keeping data closer to your\nusers' locations. MMR is always multi-directional amongst the clusters\nconfigured in the Active-Active database. For unidirectional replication, please see the\nReplica Of capabilities in Redis Enterprise Software.\n\n## Example of synchronization\n\nIn the example below, database writes are concurrent at the points in\ntime t1 and t2 and happen before a sync can communicate the changes.\nHowever, writes at times t4 and t6 are not concurrent as a sync happened\nin between.\n\n|  **Time** | **CRDB Instance1** | **CRDB Instance2** |\n|  ------: | :------: | :------: |\n|  t1 | SET key1 \"a\" |  |\n|  t2 |  | SET key1 \"b\" |\n|  t3 | — Sync — | — Sync — |\n|  t4 | SET key1 \"c\" |  |\n|  t5 | — Sync — | — Sync — |\n|  t6 |  | SET key1 \"d\" |\n\n[Learn more about\nsynchronization for\neach supported data type]() and [how to develop applications]() with them on Redis Enterprise Software.\n",
  "tags": ["docs","operate","rs","rc"],
  "last_updated": "2026-04-01T08:10:08-05:00",
  "children": [{"id":"develop-for-aa","summary":"Overview of how developing applications differs for Active-Active databases from standalone Redis databases.","title":"Develop applications with Active-Active databases","url":"https://redis.io/docs/latest/operate/rs/7.8/databases/active-active/develop/develop-for-aa/"},{"id":"data-types","summary":"Introduction to differences in data types between standalone and Active-Active Redis databases.","title":"Data types for Active-Active databases","url":"https://redis.io/docs/latest/operate/rs/7.8/databases/active-active/develop/data-types/"},{"id":"app-failover-active-active","summary":"How to failover your application to connect to a remote replica.","title":"Application failover with Active-Active databases","url":"https://redis.io/docs/latest/operate/rs/7.8/databases/active-active/develop/app-failover-active-active/"}]
}

