{
  "schema_version": 2,
  "id": "operate/rc/databases/active-active/develop",
  "title": "Active-Active Redis applications",
  "url": "https://redis.io/docs/latest/operate/rc/databases/active-active/develop/",
  "summary": "General information to keep in mind while developing applications for an Active-Active database.",
  "tags": [
    "docs",
    "operate",
    "rc"
  ],
  "last_updated": "2026-10-01T15:21:38+01:00",
  "children": [
    {
      "id": "operate/rc/databases/active-active/develop/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/rc/databases/active-active/develop/develop-for-aa/"
    },
    {
      "id": "operate/rc/databases/active-active/develop/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/rc/databases/active-active/develop/data-types/"
    },
    {
      "id": "operate/rc/databases/active-active/develop/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/rc/databases/active-active/develop/app-failover-active-active/"
    }
  ],
  "page_type": "content",
  "content_hash": "52f9204dcbfc6bfcb56c9f88c13eb26a42e348577bd014a58aef0719096471ea",
  "sections": [
    {
      "id": "overview",
      "title": "Overview",
      "role": "overview",
      "text": "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 Cloud, 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 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 cloud provider regions. 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![Geo-replication world map](https://redis.io/docs/latest/images/rs/crdbs.png)\n\nActive-Active databases replicate data between multiple Redis Cloud provider regions. 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 regions\nconfigured in the Active-Active database. For unidirectional replication, see [Active-Passive replication](https://redis.io/docs/latest/operate/rc/databases/migrate-databases#sync-using-active-passive)."
    },
    {
      "id": "example-of-synchronization",
      "title": "Example of synchronization",
      "role": "example",
      "text": "In 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](/operate/rc/databases/active-active/develop/data-types/) and [how to develop applications](/operate/rc/databases/active-active/develop/develop-for-aa) with them on Redis Cloud."
    }
  ],
  "examples": []
}
