PageSourceSearch

https://montplex.com/static/js/async/1178.2a250fa5.js

js montplex.com collected 2026-10-03 21:16:10 UTC 13,101 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkengula_website=self.webpackChunkengula_website||[]).push([["1178"],{4177:function(e,n,i){i.r(n),i.d(n,{default:()=>a});var t=i(2676),s=i(453);function r(e){let n=Object.assign({h1:"h1",a:"a",p:"p",strong:"strong",h2:"h2",ul:"ul",li:"li",em:"em",h3:"h3",blockquote:"blockquote",table:"table",thead:"thead",tr:"tr",th:"th",tbody:"tbody",td:"td",code:"code",ol:"ol"},(0,s.ah)(),e.components);return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(n.h1,{id:"engula-client-compatibility-guide",children:["Engula Client Compatibility Guide",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#engula-client-compatibility-guide",children:"#"})]}),"\n",(0,t.jsxs)(n.p,{children:["Engula is designed as a ",(0,t.jsx)(n.strong,{children:'"drop-in" replacement for Valkey/Redis 7.2'}),", with the goal of letting applications and client libraries connect seamlessly without breaking Redis ecosystem interoperability.\nThis guide explains to developers what compatibility means, the range of verified clients, and how to ensure consistent behavior after migration."]}),"\n",(0,t.jsxs)(n.h2,{id:"protocol-and-api-compatibility",children:["Protocol and API Compatibility",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#protocol-and-api-compatibility",children:"#"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Protocol support"}),": Engula aligns with ",(0,t.jsx)(n.strong,{children:"RESP2"})," and ",(0,t.jsx)(n.strong,{children:"RESP3"}),", covering the Valkey/Redis 7.2 mainline command surface; public verification is available at ",(0,t.jsx)(n.a,{href:"/en/proof-live",children:"/proof-live"}),"."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Zero code changes"}),": Applications already using Redis/Valkey 7.2 can typically connect to Engula without modifying code or configuration."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Engula extensions"}),": Some Engula enhancements may not run on native Redis/Valkey; if you need portability, avoid calls outside the Redis/Valkey 7.2 command surface."]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"ecosystem-consistency",children:["Ecosystem Consistency",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#ecosystem-consistency",children:"#"})]}),"\n",(0,t.jsx)(n.p,{children:"Engula closely aligns with the semantics and behavior of Valkey/Redis 7.2, including:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Core commands"}),": CRUD, key management, and various data structure operations"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Cluster mode"}),": slot management, topology updates, and redirection semantics"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Pub/Sub and Streams"}),": consistent message dispatch and consumer group behavior"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Transactions and scripting"}),": identical atomicity, isolation, and execution semantics"]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Any observable differences are documented and, where feasible, fixed for compatibility to guarantee ",(0,t.jsx)(n.strong,{children:"predictable Redis behavior consistency"}),"."]}),"\n",(0,t.jsxs)(n.h2,{id:"client-libraries",children:["Client Libraries",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#client-libraries",children:"#"})]}),"\n",(0,t.jsxs)(n.p,{children:["Because Engula aligns with the ",(0,t.jsx)(n.strong,{children:"protocol and API of Valkey/Redis 7.2"}),", any client that supports Redis OSS 7.2 or Valkey 7.2 and above can generally interoperate directly with Engula."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Valkey client directory"}),": ",(0,t.jsx)(n.a,{href:"https://valkey.io/clients/",target:"_blank",rel:"noopener noreferrer",children:(0,t.jsx)(n.a,{href:"https://valkey.io/clients/",target:"_blank",rel:"noopener noreferrer",children:"https://valkey.io/clients/"})})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Redis client directory"}),": ",(0,t.jsx)(n.a,{href:"https://redis.io/clients",target:"_blank",rel:"noopener noreferrer",children:(0,t.jsx)(n.a,{href:"https://redis.io/clients",target:"_blank",rel:"noopener noreferrer",children:"https://redis.io/clients"})})]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["These directories list the mainstream clients for each language along with their feature support (for example, ",(0,t.jsx)(n.em,{children:"read-from-replica"}),", ",(0,t.jsx)(n.em,{children:"smart backoff"}),", ",(0,t.jsx)(n.em,{children:"client-side caching"}),", etc.).\nAs long as a client can correctly connect to Valkey or Redis 7.2, it can usually connect to Engula in the same way."]}),"\n",(0,t.jsxs)(n.h3,{id:"advanced-client-features",children:["Advanced Client Features",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#advanced-client-features",children:"#"})]}),"\n",(0,t.jsx)(n.p,{children:"Engula supports the advanced client behaviors defined by Valkey/Redis 7.2. As long as you use standard protocol commands, the following capabilities generally interoperate:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Read from Replica"}),": read from replica nodes to distribute load"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Cluster-Aware SCAN"}),": seamless scanning across cluster nodes"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Client-Side Caching"}
1),": cache consistency based on server-assisted invalidation"]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Persistent connection pools"}),": reuse connections to improve performance"]}),"\n"]}),"\n",(0,t.jsxs)(n.blockquote,{children:["\n",(0,t.jsxs)(n.p,{children:[(0,t.jsx)(n.strong,{children:"Tip:"})," Some features require enabling a configuration or runtime switch on the client side.\nRefer to the documentation of your specific client for setup; Engula provides the corresponding server-side capability support."]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"officially-verified-clients",children:["Officially Verified Clients",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#officially-verified-clients",children:"#"})]}),"\n",(0,t.jsx)(n.p,{children:"Engula continuously verifies compatibility with mainstream Redis/Valkey clients in its CI pipeline. Although almost all Redis/Valkey 7.2-compatible clients should work, the following clients have been explicitly verified:"}),"\n",(0,t.jsxs)(n.table,{children:["\n",(0,t.jsxs)(n.thead,{children:["\n",(0,t.jsxs)(n.tr,{children:["\n",(0,t.jsx)(n.th,{children:"Language"}),"\n",(0,t.jsx)(n.th,{children:"Commonly Verified Clients"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(n.tbody,{children:["\n",(0,t.jsxs)(n.tr,{children:["\n",(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"Go"})}),"\n",(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"go-redis"}),", ",(0,t.jsx)(n.code,{children:"valkey-go"})]}),"\n"]}),"\n",(0,t.jsxs)(n.tr,{children:["\n",(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"Java"})}),"\n",(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"jedis"}),", ",(0,t.jsx)(n.code,{children:"valkey-java"}),", ",(0,t.jsx)(n.code,{children:"redisson"})]}),"\n"]}),"\n",(0,t.jsxs)(n.tr,{children:["\n",(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"JavaScript / TypeScript"})}),"\n",(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"node-redis"}),", ",(0,t.jsx)(n.code,{children:"iovalkey"})]}),"\n"]}),"\n",(0,t.jsxs)(n.tr,{children:["\n",(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"Python"})}),"\n",(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"redis-py"}),", ",(0,t.jsx)(n.code,{children:"valkey-py"})]}),"\n"]}),"\n",(0,t.jsxs)(n.tr,{children:["\n",(0,t.jsx)(n.td,{children:(0,t.jsx)(n.strong,{children:"PHP"})}),"\n",(0,t.jsxs)(n.td,{children:[(0,t.jsx)(n.code,{children:"phpredis"}),", ",(0,t.jsx)(n.code,{children:"predis"})]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"If the client you use is not on the list but claims to support Valkey/Redis 7.2, it should generally work as well.\nIf you encounter unexpected behavior, please report it to us so we can evaluate it and add it to the verification coverage set."}),"\n",(0,t.jsxs)(n.h2,{id:"migration-recommendations",children:["Migration Recommendations",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#migration-recommendations",children:"#"})]}),"\n",(0,t.jsx)(n.p,{children:"Migrating from Valkey/Redis 7.2 to Engula is generally very straightforward:"}),"\n",(0,t.jsxs)(n.ol,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Keep the same connection configuration"})," (authentication, TLS, timeouts, connection pools, etc.)."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Upgrade your client version promptly"})," to get the latest fixes related to Redis/Valkey 7.2 semantics."]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:"Enable features per the client documentation"}),", such as ",(0,t.jsx)(n.em,{children:"client-side caching"}),", ",(0,t.jsx)(n.em,{children:"read-from-replica"}),", or ",(0,t.jsx)(n.em,{children:"Pub/Sub auto-reconnect"}),".\nEngula matches the expected server-side behavior of these features."]}),"\n"]}),"\n",(0,t.jsxs)(n.h2,{id:"compatibility-test-coverage",children:["Compatibility Test Coverage",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#compatibility-test-coverage",children:"#"})]}),"\n",(0,t.jsx)(n.p,{children:"Engula performs automated compatibility verification against mainstream Redis client SDKs, covering:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Connection establishment and command execution"}),"\n",(0,t.jsx)(n.li,{children:"Data structures and transactions"}),"\n",(0,t.jsx)(n.li,{children:"Pub/Sub and Streams"}),"\n",(0,t.jsx)(n.li,{children:"Pipeline and Lua scripting"}),"\n",(0,t.jsx)(n.li,{children:"Cluster mode handling"}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"For more information:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.strong,{children:(0,t.jsx)(n.a,{href:"/en/docs/tools/clientcompat",children:"Engula ClientCompat"})}),": run the official community client test suites with Docker; see the test methodology, coverage scope, and report structure."]}),"\n"]}),"\n",(0,t.jsx)(n.p,{children:"The Engula team continuously improves the test suite to detect and fix differences in a timely manner. Community contributions and PRs to expand coverage are welcome."}),"\n",(0,t.jsxs)(n.h2,{id:"getting-help",children:["Getting Help",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#getting-help",children:"#"})]}),"\n",(0,t.jsx)(n.p,{children:"If you encounter abnormal client behavior or differences in protocol handling:"}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsx)(n.li,{children:"Submit an issue that includes version information, configuration, and a minimal reproduction."}),"\n",(0,t.jsx)(n.li,{children:"Check the client's issue tracker or release notes to confirm whether there are known issues and fixes related to Redis/Valkey 7.2."}),"\n",(0,t.jsxs)(n.li,{children:["Contact the ",(0,t.jsx)(n.strong,{children:"Engula team"})," at ",(0,t.jsx)(n.a,{href:"mailto:[email protected]",children:"[email protected]"}),", and we will work with client maintainers to ensure consistency and interoperability."]}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"summary",children:["Summary",(0,t.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#summary",children:"#"})]}),"\n",(0,t.jsxs)(n.p,{children:["In one sentence: ",(0,t.jsx)(n.strong,{children:"If it runs on Valkey or Redis 7.2, it runs on Engula."}),"\nPick your preferred client from the official Valkey/Redis client directory and seamlessly use Engula's high-performance, memory-efficient architecture."]})]})}function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}=Object.assign({},(0,s.ah)(),e.components);return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(r,{...e})}):r(e)}let a=l;l.__RSPRESS_PAGE_META={},l.__RSPRESS_PAGE_META["en%2Fdocs%2Fgetting-started%2Fclient.md"]={toc:[{text:"Protocol and API Compatibility",id:"protocol-and-api-compatibility",depth:2},{text:"Ecosystem Consistency",id:"ecosystem-consistency",depth:2},{text:"Client Libraries",id:"client-libraries",depth:2},{text:"Advanced Client Features",id:"advanced-client-features",depth:3},{text:"Officially Verified Clients",id:"officially-verified-clients",depth:2},{text:"Migration Recommendations",id:"migration-recommendations",depth:2},{text:"Compatibility Test Coverage",id:"compatibility-test-coverage",depth:2},{text:"Getting Help",id:"getting-help",depth:2},{text:"Summary",id:"summary",depth:3}],title:"Engula Client Compatibility Guide",headingTitle:"Engula Client Compatibility Guide",frontmatter:{}}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.