1(()=>{"use strict";var e={4065:function(e,t,s){s.d(t,{T:()=>o});var a=s(2676),i=s(3238),n=s(726);function o(e){let{className:t="",asLink:s=!0}=e,o=(0,n.CS)("/",(0,n.bh)()),r=e=>{"undefined"!=typeof window&&window.location.pathname!==o&&(window.location.href=o,e.preventDefault(),e.stopPropagation())},u=(0,a.jsx)(a.Fragment,{children:(0,a.jsx)("h3",{className:"font-ui font-bold text-[24px] pt-[2px] text-primary",style:{lineHeight:"1.8rem",letterSpacing:"-0.04em",zIndex:9999},children:"Engula"})}),l=(0,i.cn)("flex gap-1.5 items-center",t);return s?(0,a.jsx)("a",{className:l,href:o,onClick:r,children:u}):(0,a.jsx)("div",{className:l,onClick:r,style:{cursor:"pointer"},children:u})}s(5271),s(3867)},6606:function(e,t,s){s.d(t,{$G:()=>r,m7:()=>d,oG:()=>u,s7:()=>l});var a=s(5741),i=s(8892);let n=a.Sp,o=(i.Bt.match(/\d+(?:\.\d+)+/)??["â"])[0],r={redisVersion:"Redis 7.2.11",engulaVersion:`engula ${o}`,suite:"宿¹ runtest",passedSubtests:n.passedSubtests,totalSubtests:n.totalSubtests,subtestsApprox:`${100*Math.floor(n.passedSubtests/100)}+`,passRate:`${(n.passedSubtests/n.totalSubtests*100).toFixed(2)}%`,failureCount:n.failedSubtests,failureExplanation:"æªéè¿é¡¹ä¸»è¦å为å
é¨è¡¨ç¤º/çæ§åæ®µå·®å¼ãè¾¹çè¡ä¸ºå·®å¼åå°éé«ä¼å
级修å¤é¡¹ï¼åå ä¸å½±åéæ¡å
¬å¼ã",failureDetailsHref:"/proof-live#runtest-failures",proofHref:"/proof-live"},u={bgsaveSpeedup:"13.7x",bgsaveAbsolute:"3.71s vs 50.86s",bgsavePreset:"8GB \xb7 40M keys",bgsavePeakSaving:"58.9%",rdbSaveSpeedupMax:"11.3x",rdbSaveAbsolute:"0.90s vs 10.24s",rdbLoadSpeedupMax:"6.1x",rdbLoadAbsolute:"2.39s vs 14.62s",rdbSave8gSpeedup:"9.9x",rdbSave8gAbsolute:"2.12s vs 20.97s",rdbSaveSpeedupRange:"5.3â11.3x",rdbLoadSpeedupRange:"5.3â6.1x",bgsaveRssGrowthEngula:"+25%",bgsaveRssGrowthRedis:"+50â80%",baseline:"ä¸è¡¨ RDB save/load 为 string/8GB åç¹å®æµï¼å®æ´ç©éµè¦ç string/hash/set \xd7 1â8GBï¼åæ°éæ°æ®ç±»åä¸è§æ¨¡ååï¼SAVE å³°å¼å¨ string/4GB è¾¾ 11.3\xd7ï¼ã对æ¯åºçº¿ Redis 7.2.11ã",methodHref:"/proof-live#rdb"},l={typicalRange:"40%â75%",headline:"约 50%",caseRangeText:"å
¸åè´è½½èç 40%â75% å
åï¼å
·ä½åå³äºæ°æ®ç»æãvalue 大å°ä¸ key æ°éã"},d={marketingUnit:"Engula èç¹",developerLimitMarketing:"6 个 Engula èç¹",legalUnit:"capacity slot",legalUnitCn:"容鿧½ä½",developerLimitLegal:"6 个 capacity slot"}},2394:function(e,t,s){s.d(t,{L:()=>i});var a=s(6606);let i={hero:{kicker:"Redis protocol compatible \xb7 A memory-efficient drop-in",titleLine1:"Run the same Redis",titleLine2:"on half the memory",subtitleLine1:"Engula is a Redis-protocol-compatible drop-in kernel. No client code changes, works with your existing tooling, no vendor lock-in.",subtitleLine2:"Prove the gains on your own data, and roll back at any time if it does not meet your expectations.",ctaDownload:"Download free â",ctaProof:"See live proof â",highlights:{runtest:{title:`${a.$G.passRate} match on the official test suite`,desc:`We run the official ${a.$G.redisVersion} test suite directly: ${a.$G.subtestsApprox} subtests match, with every difference and its impact disclosed item by item.`},memory:{title:`${"约 50%"===a.s7.headline?"~50%":a.s7.headline} less memory`,desc:"Typical workloads save 40%â75% memory, depending on data structures, value sizes and key count."},rdb:{title:"RDB path measured in the open",desc:`Fixed release baseline: single-point BGSAVE ${a.oG.bgsaveSpeedup}, RDB LOAD up to ${a.oG.rdbLoadSpeedupMax} (all vs Redis 7.2.11). Peak SAVE and other absolute values behind the footnote; full matrix on the live proof page.`}}},liveProof:{kicker:"Live proof \xb7 LIVE",title:"Live verification dashboard",desc:"Every 1â2 minutes we automatically run a round of compatibility, performance, high-availability, RDB and other test suites. The stdout stream is fully public, line by line.",badgeRuntest:`${a.$G.passRate} on the official test suite`,badgeFailures:"Failure reasons disclosed",badgeAuto:"Runs automatically every 1â2 min",viewLogs:"Logs",viewResults:"Results",viewCharts:"Charts",chartsTitle:"engula vs redis â history of the last 10 runs",runRunning:"Running",runWaiting:"Waiting",runEmpty:"No data",categoryLabels:{compat:"Compatibility","compat-client":"Client compatibility",perf:"Performance",rdb:"RDB",ha:"High availability",platform:"Platform"}
1,statLatest:"Latest round",statRunning:"In progress",runningCountUnit:"",loadingLatest:"â loading",topicFallback:"â",waitingNextRound:e=>`${e} waiting for the next round\u{2026}`,loadingLogs:e=>`loading ${e} logs ...`,viewLastResult:"View last result â",runHistory:"Run history â",traceablePrefix:"All results are publicly traceable at",traceableSuffix:"â you are welcome to verify them.",resultCurrentRun:"Current run in progress; results update as items finish",resultNextRun:"Next run in progress; showing the previous completed result",resultWaiting:"Waiting for the next run; showing the previous completed result",resultItemFallback:{pass:"Passed",fail:"Failed",running:"Running...",skip:"Skipped"},resultViewReport:"View â",chartHeaderTitle:"Performance history \xb7 last 10 runs",chartHeaderDimension:"Dimension io_threads=1 \xb7 value=128B \xb7 read/write 8:2",chartMetricTitles:{throughput:"Throughput",p99:"p99 latency",memory:"Memory used"},chartLowerBetter:"lower is better",chartHigherBetter:"higher is better",chartFull:"Full chart â",chartGood:"better",chartBad:"worse",chartInfoTitle:"About this comparison",chartInfoItems:["Data comes from the latest 10 runs at engula.com/proof","Dimension io_threads=1 \xb7 value=128B \xb7 read/write 8:2","Each pair shows Engula on the left and Redis on the right","Runs are ordered oldest to newest from left to right"],chartInfoLink:"View full perf history â",chartNoHistory:"No history data"},definition:{kicker:"Getting started",title:"Zero-change verification in three steps",desc:"From download to quantified gains in as little as 5 minutes.",steps:[{title:"Download and start",desc:"The binary works out of the box and your existing clients connect directly. Supports CentOS 7+ / Ubuntu 18.04+ / mainstream Linux distros, free forever."},{title:"Import a snapshot to assess",desc:"ValueSight parses your RDB and produces a per-key memory comparison in 5 minutes, so you can quantify the gains before migrating."},{title:"Shadow-verify, then switch",desc:"Mirror production traffic to compare consistency, switch the primary only once confirmed, and roll back any time."}]},memory:{kicker:"Measured in production",title:"Quantifiable production gains",desc:"Memory-savings data verified in real cross-industry deployments. Every case went live only after shadow-mode verification.",caseTag:"Production case",redisLabel:"Standard Redis 7.2",reductionLabel:"Memory saved",cases:[{title:"Fintech",subTitle:"Real-time fraud detection",detail:"Billions of keys, average value < 256 bytes, a high-frequency read/write mixed workload. Switched the primary after 2 weeks of shadow-mode verification."},{title:"Video & entertainment",subTitle:"Recommendation-engine cache",detail:"Hundreds of instances, mostly Hash and ZSet. The 7.7 TB of memory saved translates directly into deferrable capacity purchases."},{title:"E-commerce",subTitle:"Message-stream system",detail:"BGSAVE dropped from 45s to 8s and RDB recovery from 90s to 12s. Shorter maintenance windows mean fewer business interruptions."}],valueSight:{kicker:"Reproduce it on your own data",title:"Assess your RDB with ValueSight",desc:"Upload or locally parse your RDB snapshot and get a per-key Engula-vs-Redis memory comparison within 5 minutes. No need to deploy Engula or shift any traffic.",steps:["Run ValueSight with Docker","Point it at your dump.rdb","View the per-key / per-type comparison report"],cta:"Read the ValueSight docs â"}},tools:{kicker:"Companion tools",title:"A full set of open tools â each reproducible on your own data.",desc:"Start with ValueSight to quantify the gains, then use the other tools to verify compatibility, performance and recovery one by one. Each runs with a single Docker command.",tierLabels:{preflight:"Memory assessment",step:"Item-by-item verification",all:"Full suite"},docsCta:"Read the docs â",downloadCta:"Download Engula â",items:{valuesight:{name:"Engula ValueSight",tagline:"Memory-savings assessment â import an RDB and get a per-key report in 5 minutes",desc:"Import your RDB snapshot and generate an Engula-vs-Redis per-key memory comparison report in 5 minutes, so you can quantify the gains before migrating.",bullets:["Parsed locally, no data uploaded","Per-key / per-type distribution","CSV / JSON export"]}
1,bench:{name:"Engula AutoBench",tagline:"Benchmarking",desc:"Reproduce the throughput / latency / CPU / multi-core scaling tests from the home-page live dashboard â run the full suite with a single command.",bullets:["8B â 2KB value tiers","I/O threads at 1/2/4","Repeatable results"]},compatquick:{name:"Engula KernelCompat",tagline:"Kernel compatibility testing",desc:"A full self-test script for 370/370 commands, protocols (RESP2/3), Lua and ACL â connect once and run the entire comparison.",bullets:["Runs with one command","Aligned with Redis 7.2","Hooks into CI"]},clients:{name:"Engula ClientCompat",tagline:"Client compatibility verification",desc:"Use a prebuilt Docker image to run the official test suites for Jedis, redis-py, go-redis and node-redis, comparing pass rates and divergent cases between Engula and Redis 7.2.",bullets:["Covers four mainstream community clients","Auto-starts Engula and a Redis baseline","Generates an HTML report and detailed logs"],secondaryLabel:"See the full verification suite â"},rdb:{name:"Engula RDBPerf",tagline:"Cut RDB save/load time",desc:"One command auto-generates data and compares Engula-vs-Redis RDB save/load time and memory footprint, producing an HTML report in about 2â5 minutes; importing an existing RDB snapshot is also supported (see docs).",bullets:["Auto-generates data, copy and run","End-to-end SAVE / LOAD comparison","HTML report + terminal table"]},proof:{name:"Engula CodeProof",tagline:"One-click verification suite â runs in Docker, covering compatibility / performance / HA / RDB",desc:"Use a prebuilt Docker image to run the full verification suite on your local test machine, covering compatibility, clients, performance, stability, migration, platform and high-availability scenarios.",bullets:["Major dependencies bundled in the Docker image","Interactive TUI to pick suite / sub-item","Great for PoCs, release acceptance and delivery reproduction"],secondaryLabel:"See the public proof â"}}},faq:{kicker:"FAQ",title:"Frequently asked questions",desc:"For more details about Engula, see the docs or contact us.",allCta:"All FAQs â",items:[{question:"Is it really 100% compatible? Are Lua scripts, transactions and modules compatible?",answer:[`Engula is built on the Redis Server 7.2 codebase: commands, Lua, transactions and Redis modules (RediSearch, RedisJSON, etc.) are all supported, with a measured pass rate of ${a.$G.passRate} on the official test suite (${a.$G.subtestsApprox} subtests match, every difference disclosed). This is the core difference from "rewrite-style" alternatives.`]},{question:"Does migration require downtime?",answer:["No. Attach Engula as a replica of your existing Redis, let it catch up, then switch traffic over."]},{question:"Is there vendor lock-in?",answer:["No. Engula speaks the standard Redis protocol, runs self-hosted, and your data stays in your hands â you can switch back to stock Redis at any time."]},{question:"What happens when the license expires?",answer:["The data plane is never affected â no downtime, no data loss. Expiry only restricts management operations such as further cluster scale-out; reads/writes, replication and failover continue as normal."]},{question:"How does it compare to Redis Enterprise / managed Redis?",answer:["They cost more, and your data and control sit on the vendorâs side; Engula is self-hosted, saves memory and avoids lock-in â your data always stays in your environment."]}]},trial:{kicker:"Get started now",title:"Verify first, then decide.",desc:"Engula is free to download, forever. Complete one round of verification on your own real data: memory gains, compatibility and recovery behavior â all the evidence a migration decision needs, in one pass.",ctaDownload:"Download free â",ctaRoi:"Book a memory-cost assessment â",evidencePrefix:"Prefer to review the evidence first?",evidenceLink:"See live proof â",points:["Shadow-mode verification","Roll back any time","Zero code changes"]}}},726:function(e,t,s){s.d(t,{$L:()=>y,CS:()=>u.CS,MS:()=>u.MS,bh:()=>h,Xo:()=>b});var a,i=s(3867),n=s(6606);let o={common:{nav:{triggers:{product:"产å",about:"å
³äº"},mobileGroups:{product:"产å",nav:"导èª",about:"å
³äº"},home:{name:"é¦é¡µ",description:"产åå®ä½ãåºåæµè¯ä¸ Developer Edition ä¸è½½å
¥å£"},items:{"/proof-live":{name:"宿¶éªè¯",description:"ä¸ä¸æ¬¡ CodeProof è·å®çå
¨æ¯ç»æï¼å
¼å®¹æ§ / 客æ·ç«¯ / æ§è½ / RDB / å
å / HA / å¹³å°ï¼"},"/docs/about-engula/introduction":{name:"ææ¡£"},"/download":{name:"ä¸è½½",description:"è·åäºè¿å¶å
å¹¶éªè¯å
¼å®¹æ§ä¸å
åæ¶ç"},"/product/developer":{name:"Engula Developer Edition",description:"æ°¸ä¹
å
è´¹ \xb7 èªç®¡é¨ç½²"},"/product/enterprise":{name:"Engula Enterprise",description:"åä¸åå \xb7 åè§ \xb7 ç§æåé¨ç½²"},"/about":{name:"å
³äºæä»¬",description:"äºè§£ äºå¥(å京)ç§æå屿éå
¬å¸ ä¸ Engula å¢é"}
1,"/about#contact":{name:"èç³»",description:"é®ç®±ã微信群ãåå¡å¨è¯¢"},"/privacy-policy":{name:"éç§æ¿ç",description:"æä»¬å¦ä½æ¶éã使ç¨ä¸ä¿æ¤ä¸ªäººä¿¡æ¯"},"/terms-of-use":{name:"ç½ç«ä½¿ç¨æ¡æ¬¾",description:"ä½¿ç¨æ¬ç½ç«æéç¨çæ¡æ¬¾ä¸æ¡ä»¶"}}},footer:{links:{docs:"ææ¡£",download:"ä¸è½½",eula:"EULA",support:"æ¯æ",about:"å
³äº",contact:"èç³»æä»¬"},copyright:"\xa9 2026 äºå¥(å京)ç§æå屿éå
¬å¸",trademark:"Redis\xae æ¯ Redis Ltd. çæ³¨ååæ ãä¿çææç¸å
³æå©ãäºå¥(å京)ç§æå屿éå
¬å¸å¯¹è¯¥åæ ç使ç¨ä»
ç¨äºåèç®çï¼å¹¶ä¸è¡¨ç¤º Redis ä¸äºå¥(å京)ç§æå屿éå
¬å¸ä¹é´åå¨ä»»ä½èµå©ãè®¤å¯æå
³èå
³ç³»ã",icpLabel:""},compatFootnote:{buttonAria:"æ¥ç宿¹æµè¯ééè¿ç说æ",dialogAria:"宿¹æµè¯ééè¿ç说æ",headline:`${n.$G.passRate} \u{6765}\u{81EA} ${n.$G.redisVersion} ${n.$G.suite}`,body:`\u{57FA}\u{7EBF} ${n.$G.engulaVersion} vs ${n.$G.redisVersion}\u{FF1A}\u{5B98}\u{65B9}\u{6D4B}\u{8BD5}\u{5957}\u{4EF6}\u{FF08}runtest / moduleapi / sentinel / cluster\u{FF09}\u{5408}\u{8BA1} ${n.$G.subtestsApprox} \u{4E2A}\u{5B50}\u{7528}\u{4F8B}\u{4E00}\u{81F4}\u{FF08}\u{5B9E}\u{6D4B}\u{901A}\u{8FC7}\u{7387} ${n.$G.passRate}\u{FF09}\u{3002}\u{672A}\u{901A}\u{8FC7}\u{9879}\u{4E3B}\u{8981}\u{4E3A}\u{5185}\u{90E8}\u{8868}\u{793A}\u{4E0E}\u{8FB9}\u{754C}\u{884C}\u{4E3A}\u{5DEE}\u{5F02}\u{FF0C}\u{539F}\u{56E0}\u{4E0E}\u{5F71}\u{54CD}\u{5728}\u{5B9E}\u{65F6}\u{9A8C}\u{8BC1}\u{9875}\u{9010}\u{9879}\u{516C}\u{5F00}\u{3002}`,linkLabel:"æ¥ç宿´åå ä¸å½±å â"}},home:s(8657).L,proof:{hero:{kicker:"宿¶éªè¯ \xb7 Redis 7.2.11 åºçº¿",title:"Redis 宿¹æµè¯éå
¼å®¹æ§éªè¯",introBefore:"åºäº Redis 7.2.11 宿¹æµè¯éè¿è¡ï¼Engula éè¿",introMid:"个åç¨ä¾ï¼",introAfter:"ï¼ãæµè¯ç¨ä¾ãè¿è¡æ¥å¿ä¸ç»ææç»åå¯å¤æ ¸ã",subIntro:"æªéè¿é¡¹å·²æåå ä¸å½±åé¢å½æ¡£ï¼å¯å±å¼æ¥çæç»ã",statCoverage:"åç¨ä¾è¦ç",statCoverageHint:"Redis 7.2.11 tests/",statPassed:"å·²éè¿",statPassedHint:e=>`${e}% \u{4E0E} Redis \u{884C}\u{4E3A}\u{4E00}\u{81F4}`,statFailed:"å·®å¼é¡¹",statFailedHint:"åå ä¸å½±åé¢å¯æ¥ç",runPrefix:"æè¿ä¸è½® run #",durationPrefix:"ç¨æ¶",sourceLink:"Redis 7.2.11 æµè¯æºç â",ctaLive:"æ¥ç宿¶çæ¿",ctaFull:"æå¼å®æ´ç»æ â"},summary:{compat:"å
¼å®¹æ§",compatDetail:(e,t)=>`${e} / ${t} \u{4E2A}\u{5B50}\u{7528}\u{4F8B}\u{4E00}\u{81F4}`,failures:"å·®å¼é¡¹",failuresDetail:"åå ä¸å½±åé¢å
¬å¼è¯´æ",rdb:"RDB é¾è·¯",rdbDetail:"BGSAVE 3.71s vs 50.86s \xb7 LOAD 2.39s vs 14.62s",live:"æç»è¿è¡",liveDetailAt:e=>`\u{6700}\u{8FD1}\u{4E00}\u{8F6E} ${e}`,liveDetailAuto:"æç»èªå¨è¿è¡"},runtestMatrix:{kicker:"RUNTEST å
¨æ¯",title:"宿¹ runtest éåå
ç»æ",descA:"è¦ç Redis tests/ ä¸çæµè¯åå
ï¼æªéè¿åç¨ä¾éåå ä¸å½±åé¢ï¼",descB:"å¯å±å¼æ¥çã",subtestsPassed:"åç¨ä¾éè¿ \xb7",failuresHeading:"æªéè¿åç¨ä¾ \xb7 åå ä¸å½±åé¢",failuresCount:(e,t,s)=>`${e} \u{4E2A}\u{5355}\u{5143} \xb7 ${t} \u{4E2A}\u{72EC}\u{7ACB}\u{5B50}\u{7528}\u{4F8B} \xb7 ${s} \u{6B21}\u{65AD}\u{8A00}\u{5DEE}\u{5F02}`,allPass:"ææåç¨ä¾åå·²éè¿ \xb7 æ æªéè¿é¡¹",fullReport:"宿´ç»æé¡µ â"},runtestModules:{desc:"Run testãModule APIãSentinelãCluster åç»å¥ä»¶å
±åææä¸æ¹ runtest å
¨æ¯ç»æã",passedCase:"éè¿ç¨ä¾",passRate:"éè¿å æ¯"},clientCompat:{kicker:"客æ·ç«¯å
¼å®¹æ§",title:"ä¸»æµ SDK è¿æ¥è¡ä¸ºéªè¯",desc:"è¦ç Java / Python / Go / Node.js å类客æ·ç«¯ï¼è¿è¡åèªå®æ¹æç¤¾åºç»´æ¤çå
¼å®¹æµè¯éã",sdkPassed:(e,t)=>`${e} / ${t} SDK \u{901A}\u{8FC7}`,passedCase:"éè¿ç¨ä¾",passRate:"éè¿å æ¯"},perf:{kicker:"æ§è½ç©éµ",title:"çº¿ç¨æ°ä¸ value 大å°ç©éµå¯¹æ¯",descA:"æè¯»åæ¯ä¾ãioThreads ä¸ value é¿åº¦ç»åæµè¯ï¼æ¯ä¾æ",descRw:"读:å",descB:"ãæ¯ä¸ª cell å±ç¤º Engula / Redis ç",descC:"ååãP99 æ¶å»¶ä¸æ¯å¼ã",rowLabel:"ioThreads",colLabel:"value é¿åº¦ (B)",ratioHeading:e=>`\u{8BFB}\u{5199}\u{6BD4}\u{4F8B} ${e}`,rwGloss:(e,t)=>
1`\u{8BFB} ${e}% / \u{5199} ${t}%`,threadsUnit:e=>`${e} threads`,footnote:"ç¹å»ä»»ä¸ cell æ¥ç p99 / p99.9 / å
åå ç¨ / CPU çæç»ï¼å
¬å¼ proof çæ¿ä¿çè¿æè¿è¡è®°å½ã"},rdb:{kicker:"RDB SAVE / LOAD / BGSAVE",title:"RDB è½çãå è½½ä¸ BGSAVE å¼é",desc:"ææ°æ®é大å°ä¸æ°æ®ç±»åå±ç¤º SAVE / LOAD ç©éµï¼BGSAVE åç¬ç»è®¡ fork çªå£ä¸å³°å¼å
åã",saveTitle:"SAVE è½çèæ¶",saveSubtitle:"é»å¡å¼ RDB åç \xb7 å±ç¤º Engula ç¸å¯¹ Redis çæéåæ°",loadTitle:"LOAD éå¯å è½½èæ¶",loadSubtitle:"ä» RDB æä»¶æ¢å¤å
å \xb7 å½±åæ
鿢å¤ä¸æ©å®¹ä¸çº¿çªå£",rowLabel:"æ°æ®é",colLabel:"æ°æ®ç±»å",datasetSuffix:e=>`${e} \u{6570}\u{636E}\u{96C6}`,bgsaveTitle:"BGSAVE fork å
åå³°å¼ï¼1 / 4 / 8 GBï¼",bgsaveSubtitle:"è¯»åæ¯ 8:2ï¼å³°å¼ä¸º BGSAVE fork æé´ç¶åè¿ç¨ç©çå
åå ç¨å计ï¼fork-tree PSSï¼ã",bgsaveTime:"BGSAVE ç¨æ¶",faster:"æ´å¿«",peakMem:"å³°å¼ fork-tree å
å",leaner:"æ´ç",spikeRatio:"spike ratio (peak / used)",spikeNote:"peak/used 表示 fork æé´ CoW é¡µå æ¯ã1.0\xd7 æ¥è¿æ é¢å¤å¤å¶ï¼2.0\xd7 è¡¨ç¤ºæ°æ®é¡µå¤§é¨å被å¤å¶ï¼æ¯å¼è¶ä½ï¼BGSAVE æé´é¢å¤å
åååè¶å°ã",footnoteMatrix:"ç¹å»ä»»ä¸ cell æ¥ç LOAD æ¶é´ / RDB æä»¶å¤§å° / å
åå ç¨æç»ã"},haPlatform:{kicker:"é«å¯ç¨ + å¹³å°",title:"é群ãå¤å¶ãFailover ä¸å¹³å°éªè¯",descA:"HA ä¸å¹³å°å±ç¨ä¾å¤ç¨ Redis 宿¹æææµè¯ï¼æ¯æ¡ä¿ç PASS/FAILãå
³é®ææ ä¸",descB:"æç»ã",groupHa:"é«å¯ç¨ / é群",groupPlatform:"å¹³å°å
¼å®¹ / ç¨³å®æ§",empty:"æ°æ®å è½½ä¸ï¼å®æåèªå¨è¡¥é½ã"},matrix:{rowColHeader:(e,t)=>`${e} \u{2193} / ${t} \u{2192}`},metricCell:{pending:"è¡¥å
ä¸",unitLabel:"åä½",better:"ä¼",worse:"å£"},footerMeta:{kicker:"éªè¯å£å¾",title:"æµè¯æºç ãç¯å¢ä¸ç»æå坿 ¸å¯¹",desc:"æµè¯ä»£ç ä½¿ç¨ Redis 宿¹ä»åº 7.2.11 tagï¼è¿è¡è¾åºãç¯å¢ä¿¡æ¯ä¸å®æ´ç»æä¿çå¨å
¬å¼çæ¿ä¸ã",hwLabels:{cpu:"CPU",os:"æä½ç³»ç»",ecs:"å®ä¾è§æ ¼",ecs_ssd:"SSD å®ä¾",engula_ver:"engula çæ¬",redis_ver:"对ç
§åºå"},rowMachine:"æµè¯æºå¨",rowEngulaVer:"engula çæ¬",rowRedisVer:"对ç
§åºå",rowCollection:"æ°æ®éé",collectionValue:"runtest ç´è¿ï¼æµè¯ç¨ä¾ä¸ä¿®æ¹",rowSource:"æµè¯æºç ",rowDashboard:"宿´çæ¿",dashboardLink:"æå¼å®æ´çæ¿ â"}}},r={common:{nav:{triggers:{product:"Products",about:"About"},mobileGroups:{product:"Products",nav:"Navigation",about:"About"},home:{name:"Home",description:"Positioning, benchmarks and the Developer Edition download entry"},items:{"/proof-live":{name:"Live Proof",description:"The full results of the last CodeProof run (compatibility / clients / performance / RDB / memory / HA / platform)"},"/docs/about-engula/introduction":{name:"Docs"},"/download":{name:"Download",description:"Get the binaries and verify compatibility and memory gains"},"/product/developer":{name:"Engula Developer Edition",description:"Free forever \xb7 self-managed deployment"},"/product/enterprise":{name:"Engula Enterprise",description:"Commercial contract \xb7 compliance \xb7 private deployment"},"/about":{name:"About us",description:"Learn about Yunnai (Beijing) Technology Development Co., Ltd. and the Engula team"},"/about#contact":{name:"Contact",description:"Email, WeChat group, business inquiries"},"/privacy-policy":{name:"Privacy Policy",description:"How we collect, use and protect personal information"},"/terms-of-use":{name:"Terms of Use",description:"The terms and conditions for using this website"}}},footer:{links:{docs:"Docs",download:"Download",eula:"EULA",support:"Support",about:"About",contact:"Contact us"},copyright:"\xa9 2026 Yunnai (Beijing) Technology Development Co., Ltd.",trademark:"Redis\xae is a registered trademark of Redis Ltd. All rights reserved. Yunnai (Beijing) Technology Development Co., Ltd. uses this trademark for reference purposes only, and this does not imply any sponsorship, endorsement or affiliation between Redis and Yunnai (Beijing) Technology Development Co., Ltd.",icpLabel:"ICP License No. "},compatFootnote:{buttonAria:"See the official test-suite pass-rate note",dialogAria:"Official test-suite pass-rate note",headline:`${n.$G.passRate} on the official ${n.$G.redisVersion} runtest`,body:`Baseline ${n.$G.engulaVersion} vs ${n.$G.redisVersion}: ${n.$G.subtestsApprox} subtests match across the official suites (runtest, moduleapi, sentinel, cluster), a measured ${n.$G.passRate} pass rate. The remaining differences are mainly internal-representation and boundary-behavior details, each disclosed with its reason and impact on the live proof page.`,linkLabel:"See full reasons and impact â"}},home:s(2394).L,proof:{hero:{kicker:"Live proof \xb7 PROOF \xb7 REDIS 7.2.11",title:"Run the official Redis 7.2.11 runtest directly",introBefore:"No modified test cases, no separate assertion set. We run the official Redis 7.2.11 test suite directly; engula passes",introMid:"subtests (",introAfter:"). Every log line is publicly verifiable on the dashboard.",subIntro:"The failing items cover internal-representation / monitoring-field differences, boundary-behavior differences and a few high-priority fixes; each can be expanded for its reason and impact.",statCoverage:"Subtests covered",statCoverageHint:"redis 7.2.11 tests/",statPassed:"Passed",statPassedHint:e=>`${e}% consistent with redis behavior`,statFailed:"Failed",statFailedHint:"Reason / impact per item in the drawer",runPrefix:"Last run #",durationPrefix:"took",sourceLink:"View the [email protected] test source â",ctaLive:"Live dashboard â",ctaFull:"View full results â"},summary:{compat:"Compatibility",compatDetail:(e,t)=>`${e} / ${t} subtests consistent`,failures:"Failures",failuresDetail:"Reasons and impact disclosed per item",rdb:"RDB path",rdbDetail:"BGSAVE 3.71s vs 50.86s \xb7 LOAD 2.39s vs 14.62s \xb7 fixed release baseline",live:"Live run",liveDetailAt:e=>
1`Latest round ${e}`,liveDetailAuto:"Runs automatically every 1â2 min"},runtestMatrix:{kicker:"RUNTEST overview",title:"Run the official Redis 7.2.11 runtest item by item",descA:"Covers every test unit under redis tests/; only failing subtests are listed, each with its reason / impact.",descB:"Click any button for details.",subtestsPassed:"subtests passed \xb7",failuresHeading:"Failing subtests \xb7 click for reason and impact",failuresCount:(e,t,s)=>`${e} units \xb7 ${t} distinct subtests \xb7 ${s} assertion failures`,allPass:"All subtests passed \xb7 no failures",fullReport:"Full report page â"},runtestModules:{desc:"Four independent runtest suites (Run test / Module API / Sentinel / Cluster); their total equals the RUNTEST overview below.",passedCase:"cases passed",passRate:"pass rate"},clientCompat:{kicker:"Client compatibility",title:"Mainstream client SDKs connect directly and behave like Redis",desc:"Covers Java / Python / Go / Node.js; each SDK runs its own official/community-maintained compatibility suite.",sdkPassed:(e,t)=>`${e} / ${t} SDKs passed`,passedCase:"cases passed",passRate:"pass rate"},perf:{kicker:"Performance matrix",title:"Multi-thread \xd7 multi value-size, measured against Redis in the same environment",descA:"Dimensions = read/write ratio \xd7 ioThreads \xd7 value length; the ratio is shown as",descRw:"read:write",descB:". Each cell shows engula / redis",descC:"actual throughput (ops/s), P99 latency (ms) and the ratio.",rowLabel:"ioThreads",colLabel:"value length (B)",ratioHeading:e=>`Read/write ratio ${e}`,rwGloss:(e,t)=>`read ${e}% / write ${t}%`,threadsUnit:e=>`${e} threads`,footnote:"Click any cell for p99 / p99.9 / memory footprint / CPU details; the bottom button opens the public proof dashboard with the history of the last 10 runs."},rdb:{kicker:"RDB SAVE / LOAD / BGSAVE",title:"Real on-disk time for cold start and maintenance windows",desc:"Dataset size \xd7 data type = 9 cells. SAVE / LOAD each get a matrix; BGSAVE separately covers the fork window and peak memory.",saveTitle:"SAVE on-disk time",saveSubtitle:"Blocking RDB write \xb7 higher is better (how many times faster engula is vs Redis)",loadTitle:"LOAD restart time",loadSubtitle:"Restoring memory from the RDB file on cold start \xb7 determines the failure-recovery / scale-up window",rowLabel:"Dataset",colLabel:"Data type",datasetSuffix:e=>`${e} dataset`,bgsaveTitle:"BGSAVE fork-tree memory peak (1 / 4 / 8 GB)",bgsaveSubtitle:"read/write 8:2; peak = the physical memory actually held by the parent and child processes during the BGSAVE fork (fork-tree PSS).",bgsaveTime:"BGSAVE time",faster:"faster",peakMem:"Peak fork-tree memory",leaner:"leaner",spikeRatio:"spike ratio (peak / used)",spikeNote:"peak/used is the share of pages copied-on-write during the fork: 1.0\xd7 means no extra copies, 2.0\xd7 means nearly all dataset pages were copied. Engulaâs short fork window copies few pages and stays near 1.0\xd7; Redisâs long window approaches 2.0\xd7.",footnoteMatrix:"Click any cell for LOAD time / RDB file size / memory footprint details."},haPlatform:{kicker:"High availability + platform",title:"Cluster, replication, failover, platform compatibility",descA:"HA and platform-layer cases reuse Redisâs official topology tests directly. Each comes with PASS/FAIL and key metrics â",descB:"click for details.",groupHa:"High availability / cluster",groupPlatform:"Platform compatibility / stability",empty:"Loading data â filled in on the next refresh."},matrix:{rowColHeader:(e,t)=>`${e} \u{2193} / ${t} \u{2192}`},metricCell:{pending:"Pending",unitLabel:"unit",better:"win",worse:"loss"},footerMeta:{kicker:"Transparency footnote",title:"Every result is reproducible by you",desc:"The test code uses the 7.2.11 tag from Redisâs official repository. The full output (stdout) of every run is kept on the public dashboard for 24+ hours, so anyone can verify them anytime.",hwLabels:{cpu:"CPU",os:"OS",ecs:"Instance type",ecs_ssd:"SSD instance",engula_ver:"engula version",redis_ver:"Baseline"},rowMachine:"Test machine",rowEngulaVer:"engula version",rowRedisVer:"Baseline",rowCollection:"Data collection",collectionValue:"runtest direct, unmodified, same source code",rowSource:"Test source",rowDashboard:"Full dashboard",dashboardLink:"Full dashboard â"}}};var u=s(5501);let l={zh:o,en:r},d="undefined"!=typeof window?window:void 0,p=(null==d?void 0:d.__ENGULA_INITIAL_PATHNAME__)??(null==d?void 0:d.location.pathname),c=null==d?void 0:d.__ENGULA_INITIAL_LANG__,m="undefined"!=typeof document?null==(a=document.querySelector('meta[name="engula:ssr-lang"]'))?void 0:a.getAttribute("content"):void 0,g="undefined"!=typeof document?document.documentElement.lang:void 0;function f(e){return e===u.th||!!(null==e?void 0:e.startsWith(`${u.th}/`))}function h(){let e=(0,i.Jr)(),t=(0,i.TH)(),s="undefined"!=typeof window?window.location.pathname:void 0;if("en"===function(){var e;let t="undefined"!=typeof window?window:void 0,s="undefined"!=typeof document?document.documentElement.dataset.engulaInitialLang:void 0;return[null==t?void 0:t.__ENGULA_INITIAL_LANG__,"undefined"!=typeof document?(null==(e=
1document.querySelector('meta[name="engula:initial-lang"]'))?void 0:e.getAttribute("content"))??void 0:void 0,s,c,m,g].includes("en")?"en":void 0}()||f(s)||f(null==t?void 0:t.pathname)||f(function(){let e="undefined"!=typeof window?window:void 0;return(null==e?void 0:e.__ENGULA_INITIAL_PATHNAME__)??p}()))return"en";let a="undefined"!=typeof document?document.documentElement.lang:void 0;return"en"===(0,u.AE)(a)||"en"===(0,u.AE)(g)?"en":(0,u.AE)(e)}function b(){return l[h()]??l.zh}function y(){let e=b();return(t,s)=>e.common.nav.items[t]??s}},5501:function(e,t,s){s.d(t,{AE:()=>o,CS:()=>n,MS:()=>i,th:()=>a});let a="/en";function i(e){return e===a?"/":e.startsWith(`${a}/`)?e.slice(a.length)||"/":e}function n(e,t){if(!(e.startsWith("/")&&!e.startsWith("//")))return e;let s=i(e);return"en"!==t?s:"/"===s?a:`${a}${s}`}function o(e){return"en"===e?"en":"zh"}},8657:function(e,t,s){s.d(t,{L:()=>i});var a=s(6606);let i={hero:{kicker:"Redis åè®®å
¼å®¹ \xb7 å
å髿æ¿ä»£",titleLine1:"ç¨ä¸åå
åï¼",titleLine2:"æ¿è½½ Redis å
¼å®¹ä¸å¡",subtitleLine1:"Engula æ¯ Redis åè®®å
¼å®¹çæ°æ®åºå
æ ¸ãæ éä¿®æ¹å®¢æ·ç«¯ä»£ç ï¼å¯ç»§ç»ä½¿ç¨ç°æçæå·¥å
·ã",subtitleLine2:"å
ç¨ç产ç宿°æ®éªè¯å
åæ¶çä¸å
¼å®¹æ§ï¼ç»æä¸ç¬¦å颿ï¼å¯éæ¶åéã",ctaDownload:"å
è´¹ä¸è½½",ctaProof:"æ¥ç宿¶éªè¯",highlights:{runtest:{title:"å
¼å®¹æ§ææ®å¯æ¥",desc:`${a.$G.redisVersion} \u{5B98}\u{65B9}\u{6D4B}\u{8BD5}\u{96C6}\u{6301}\u{7EED}\u{8FD0}\u{884C}\u{FF0C}${a.$G.subtestsApprox} \u{4E2A}\u{5B50}\u{7528}\u{4F8B}\u{4E00}\u{81F4}\u{FF1B}\u{5DEE}\u{5F02}\u{9879}\u{516C}\u{5F00}\u{3002}`},memory:{title:"å
åæ¶çå
è¡éå",desc:`\u{5BF9}\u{6BD4} ${a.$G.redisVersion}\u{FF0C}\u{5178}\u{578B}\u{8D1F}\u{8F7D}\u{8282}\u{7701} ${a.s7.typicalRange}\u{FF1B}\u{53EF}\u{7528}\u{751F}\u{4EA7} RDB \u{9884}\u{8BC4}\u{4F30}\u{3002}`},rdb:{title:"RDB é¾è·¯å®æµæé",desc:`\u{5BF9}\u{6BD4} ${a.$G.redisVersion}\u{FF0C}BGSAVE \u{63D0}\u{901F} ${a.oG.bgsaveSpeedup}\u{FF0C}LOAD \u{6700}\u{9AD8}\u{63D0}\u{901F} ${a.oG.rdbLoadSpeedupMax}\u{FF1B}\u{5B8C}\u{6574}\u{77E9}\u{9635}\u{53EF}\u{67E5}\u{3002}`}}},liveProof:{kicker:"宿¶éªè¯ \xb7 LIVE",title:"宿¶éªè¯çæ¿",desc:"å
¼å®¹æ§ãæ§è½ãé«å¯ç¨ãRDB çæµè¯æç»è¿è¡ï¼æ¥å¿ãç»æä¸åå²è®°å½å
¬å¼çåï¼ä¾¿äºå¤æ ¸ã",badgeRuntest:`\u{5B98}\u{65B9}\u{6D4B}\u{8BD5}\u{96C6} ${a.$G.passRate}`,badgeFailures:"å·®å¼é¡¹å
¬å¼è¯´æ",badgeAuto:"æç»è¿è¡",viewLogs:"æ¥å¿",viewResults:"ç»æ",viewCharts:"å¾è¡¨",chartsTitle:"engula vs redis æè¿ 10 次 run åå²å¯¹æ¯",runRunning:"è¿è¡ä¸",runWaiting:"çå¾
ä¸",runEmpty:"æ æ°æ®",categoryLabels:{compat:"å
¼å®¹æ§","compat-client":"客æ·ç«¯å
¼å®¹æ§",perf:"æ§è½",rdb:"RDB",ha:"é«å¯ç¨",platform:"å¹³å°"},statLatest:"æè¿ä¸è½®",statRunning:"è¿è¡ä¸",runningCountUnit:" 个",loadingLatest:"â å è½½ä¸",topicFallback:"â",waitingNextRound:e=>`${e} \u{7B49}\u{5F85}\u{4E0B}\u{4E00}\u{8F6E}\u{4E2D}\u{2026}`,loadingLogs:e=>`loading ${e} logs ...`,viewLastResult:"æ¥çä¸ä¸æ¬¡ç»æ â",runHistory:"è¿è¡åå² â",traceablePrefix:"æ¯è½®ç»æä¿çå¨",traceableSuffix:"ï¼å¯æ¥çæ¥å¿ä¸æ¥åã",resultCurrentRun:"æ¬è½®æ§è¡ä¸ï¼ç»æå°éå®ææ´æ°",resultNextRun:"ä¸ä¸è½®æ£å¨æ§è¡ï¼ä¸æ¹ä¸ºä¸ä¸è½®ç»æï¼",resultWaiting:"çå¾
ä¸ä¸è½®ä¸ï¼ä¸æ¹ä¸ºä¸ä¸è½®ç»æï¼",resultItemFallback:{pass:"å·²éè¿",fail:"æªéè¿",running:"æ§è¡ä¸â¦",skip:"已跳è¿"},resultViewReport:"æ¥ç â",chartHeaderTitle:"æ§è½åå²å¯¹æ¯ \xb7 æè¿ 10 次 run",chartHeaderDimension:"维度 io_threads=1 \xb7 value=128B \xb7 è¯»åæ¯ 8:2",chartMetricTitles:{throughput:"ååé",p99:"p99 å»¶è¿",memory:"å
åå ç¨"},chartLowerBetter:"è¶å°è¶å¥½",chartHigherBetter:"è¶å¤§è¶å¥½",chartFull:"宿´å¾ â",chartGood:"ä¼",chartBad:"å£",chartInfoTitle:"å
³äºè¿ç»å¯¹æ¯",chartInfoItems:["æ°æ®æ¥èª engula.com/proof æè¿ 10 次 run","维度 io_threads=1 \xb7 value=128B \xb7 è¯»åæ¯ 8:2","æ¯å¯¹æ±å·¦ä¾§ Engulaãå³ä¾§ Redis","æ¶é´ä»å·¦å°å³ç±æ§å°æ°"],chartInfoLink:"æ¥ç宿´ perf åå² â",chartNoHistory:"æ å岿°æ®"},definition:{kicker:"å¿«éæ¥å
¥",title:"䏿¥å³å¯é¶æ¹å¨éªè¯",desc:"ä»ä¸è½½å°æ¶çè¯ä¼°ï¼å
éªè¯ï¼åå³å®æ¯å¦åæ¢ã",steps:[{title:"ä¸è½½å¹¶å¯å¨",desc:"äºè¿å¶å¯ç´æ¥å¯å¨ï¼ç°æå®¢æ·ç«¯ç´è¿ãæ¯æ CentOS 7+ / Ubuntu 18.04+ / ä¸»æµ Linux åè¡çã"},{title:"导å
¥å¿«ç
§è¯ä¼°",desc:"ValueSight è§£æç产 RDBï¼çæéé®å
å对æ¯ï¼è¿ç§»åå³å¯éåæ¶çã"},{title:"å½±åéªè¯å忢",desc:"éåç产æµéæ¯å¯¹ä¸è´æ§ï¼ç¡®è®¤æ 误å忢䏻å®ä¾ï¼å¯éæ¶åéã"}]},memory:{kicker:"çäº§å®æµ",title:"å¯éåçç产æ¶ç",desc:"以䏿¡ä¾æ¥èªçå®ç产è´è½½ï¼èç¦å
åå ç¨ä¸æ¢å¤æçã",caseTag:"ç产æ¡ä¾",redisLabel:"æ å Redis 7.2",reductionLabel:"å
åèç",cases:[{title:"éèç§æ",subTitle:"宿¶å欺è¯",detail
1:"æ°å亿 keyï¼å¹³å value < 256 åèï¼é«é¢è¯»åæ··åè´è½½ï¼å½±å模å¼éªè¯ 2 å¨å忢䏻å®ä¾ã"},{title:"è§é¢ä¸å¨±ä¹",subTitle:"æ¨è弿ç¼å",detail:"æ°ç¾ä¸ªå®ä¾ï¼ä»¥ Hash å ZSet 为主ï¼èç 7.7 TB å
åï¼æ¨è¿åç»æ©å®¹ååã"},{title:"çµååå¡",subTitle:"æ¶æ¯æµç³»ç»",detail:"BGSAVE ä» 45s éè³ 8sï¼RDB æ¢å¤ä» 90s éè³ 12sï¼ç»´æ¤çªå£ç¸åºç¼©çã"}],valueSight:{kicker:"ç¨çäº§æ°æ®å
è¯ä¼°",title:"ç¨ ValueSight è¯ä¼° RDB å
åæ¶ç",desc:"æ¬å°è§£æ RDB å¿«ç
§ï¼çæ Engula ä¸ Redis çéé®å
å对æ¯ãæ éå
é¨ç½² Engulaï¼ä¹æ é忢æµéã",steps:["ç¨ Docker è¿è¡ ValueSight","æå dump.rdb","æ¥çéé® / åç±»åå¯¹æ¯æ¥å"],cta:"æ¥ç ValueSight ææ¡£"}},tools:{kicker:"é
å¥å·¥å
·",title:"è¦çè¯ä¼°ãéªè¯ä¸äº¤ä»å¤ç°",desc:"å
éåå
åæ¶çï¼åé项éªè¯å
¼å®¹æ§ãæ§è½ãRDB ä¸é«å¯ç¨è¡¨ç°ãåå·¥å
·åæä¾ Docker è¿è¡æ¹å¼ã",tierLabels:{preflight:"å
åèçè¯ä¼°",step:"é项éªè¯",all:"ä¸é®å
¨å¥"},docsCta:"æ¥çææ¡£ â",downloadCta:"ä¸è½½ Engula â",items:{valuesight:{name:"Engula ValueSight",tagline:"RDB å
åæ¶çè¯ä¼°",desc:"è§£æ RDB å¿«ç
§ï¼çæ Engula ä¸ Redis çéé®å
åå¯¹æ¯æ¥åï¼è¿ç§»åéåæ¶çã",bullets:["æ¬å°è§£æï¼ä¸ä¸ä¼ æ°æ®","éé® / åç±»ååå¸","CSV / JSON 导åº"]},bench:{name:"Engula AutoBench",tagline:"æ§è½åºåå¤ç°",desc:"å¤ç°å®æ¶éªè¯çæ¿ä¸çååãå»¶è¿ãCPU ä¸å¤æ ¸æ©å±æµè¯ï¼çæå¯å¤æ ¸ç»æã",bullets:["8B â 2KB 夿¡£ value","I/O çº¿ç¨ 1/2/4 维度","ç»æå¯éå¤"]},compatquick:{name:"Engula KernelCompat",tagline:"å
æ ¸å
¼å®¹æ§éªè¯",desc:"è¦çå½ä»¤ãåè®®ãLuaãACL çå
¼å®¹æ§ç¨ä¾ï¼å¯¹æ¯ Engula ä¸ Redis 7.2 è¡ä¸ºå·®å¼ã",bullets:["ä¸è¡å½ä»¤è¿è¡","ä¸ Redis 7.2 对é½","坿å
¥ CI"]},clients:{name:"Engula ClientCompat",tagline:"客æ·ç«¯å
¼å®¹æ§éªè¯",desc:"è¿è¡ Jedisãredis-pyãgo-redisãnode-redis 宿¹æµè¯éï¼å¯¹æ¯éè¿çä¸å·®å¼ç¨ä¾ã",bullets:["è¦çå类主æµç¤¾åºå®¢æ·ç«¯","èªå¨å¯å¨ Engula ä¸ Redis åºçº¿","çæ HTML æ¥åä¸è¯¦ç»æ¥å¿"],secondaryLabel:"æ¥ç宿´éªè¯å¥ä»¶ â"},rdb:{name:"Engula RDBPerf",tagline:"RDB save/load 对æ¯",desc:"çææå¯¼å
¥ RDB æ°æ®ï¼å¯¹æ¯ save/load æ¶é¿ä¸å
åå ç¨ï¼è¾åº HTML æ¥åã",bullets:["èªå¨çææ°æ®ï¼å¤å¶å³è·","SAVE / LOAD 端å°ç«¯å¯¹æ¯","HTML æ¥å + ç»ç«¯è¡¨æ ¼"]},proof:{name:"Engula CodeProof",tagline:"宿´éªè¯å¥ä»¶",desc:"卿¬å°æµè¯æºè¿è¡å
¼å®¹æ§ã客æ·ç«¯ãæ§è½ãç¨³å®æ§ãè¿ç§»ãå¹³å°ä¸é«å¯ç¨éªè¯ï¼éå PoCãçæ¬éªæ¶ä¸äº¤ä»å¤ç°ã",bullets:["Docker éåå
置主è¦ä¾èµ","交äºå¼ TUI éæ© suite / sub-item","éå PoCãçæ¬éªæ¶ä¸äº¤ä»å¤ç°"],secondaryLabel:"æ¥çå
¬å¼éªè¯ â"}}},faq:{kicker:"FAQ",title:"常è§é®é¢",desc:"æ´å¤äº§åç»èå¯åé
ææ¡£ï¼æèç³» Engula å¢éä¸èµ·è¯ä¼°ã",allCta:"å
¨é¨ FAQ â",items:[{question:"å
¼å®¹å°ä»ä¹ç¨åº¦ï¼Lua / äºå¡ / æ¨¡åæ¯å¦æ¯æï¼",answer:[`Engula \u{57FA}\u{4E8E} Redis Server 7.2 \u{4EE3}\u{7801}\u{5E93}\u{6784}\u{5EFA}\u{FF0C}\u{652F}\u{6301}\u{547D}\u{4EE4}\u{3001}Lua\u{3001}\u{4E8B}\u{52A1}\u{4E0E} Redis \u{6A21}\u{5757}\u{3002}\u{5B98}\u{65B9}\u{6D4B}\u{8BD5}\u{96C6}\u{5B9E}\u{6D4B}\u{901A}\u{8FC7}\u{7387}\u{4E3A} ${a.$G.passRate}\u{FF0C}${a.$G.subtestsApprox} \u{4E2A}\u{5B50}\u{7528}\u{4F8B}\u{4E00}\u{81F4}\u{FF1B}\u{5DEE}\u{5F02}\u{9879}\u{516C}\u{5F00}\u{8BF4}\u{660E}\u{3002}`]},{question:"è¿ç§»æ¯å¦éè¦åæºï¼",answer:["é常ä¸éè¦ãå¯å
让 Engula ä½ä¸ºç°æ Redis çä»åºåæ¥ï¼è¿½å¹³åå忢æµéã"]},{question:"æ¯å¦åå¨ååéå®ï¼",answer:["Engula ä½¿ç¨æ å Redis åè®®ï¼æ¯æèªæç®¡é¨ç½²ãæ°æ®ä¿çå¨åæç¯å¢å
ï¼å¿
è¦æ¶å¯åååç Redisã"]},{question:"ææå°æåå¦ä½å¤çï¼",answer:["ä¸å¡æ°æ®é¢ä¸åå½±åï¼è¯»åãå¤å¶ä¸æ
é忢ç
§å¸¸è¿è¡ãå°æåä»
éå¶ç»§ç»æ©å®¹ç管çæä½ã"]},{question:"ä¸ Redis Enterprise / æç®¡ Redis ç¸æ¯å¦ä½ï¼",answer:["Redis Enterprise åæç®¡ Redis æ´å
1平尿å¡ï¼Engula çå®ä½æ¯èªæç®¡å
æ ¸æ¿ä»£ï¼éç¹éä½å
åå ç¨ï¼å¹¶ä¿çç°æé¨ç½²ä¸è¿ç»´è¾¹çã"]}]},trial:{kicker:"ç«å³å¼å§",title:"å
宿éªè¯ï¼ååè¿ç§»å³ç",desc:"ä¸è½½ Engulaï¼ç¨çäº§æ°æ®è¯ä¼°å
åæ¶çãå
¼å®¹æ§ä¸æ¢å¤è¡¨ç°ãå
³é®è¯æ®å¯å¨åæ¢å宿éªè¯ã",ctaDownload:"å
è´¹ä¸è½½",ctaRoi:"é¢çº¦å
åææ¬è¯ä¼°",evidencePrefix:"",evidenceLink:"æ¥ç宿¶éªè¯",points:["影忍¡å¼éªè¯","å¯éæ¶åé","é¶ä»£ç æ¹å¨"]}}},3867:function(e,t,s){s.d(t,{AP:()=>i.AP,E9:()=>i.E9,Jr:()=>i.Jr,LX:()=>i.LX,Ni:()=>i.Ni,QT:()=>i.QT,R0:()=>i.R0,TH:()=>i.TH,Tm:()=>i.Tm,VK:()=>i.VK,VY:()=>i.VY,Vi:()=>i.Vi,Ww:()=>i.Ww,aw:()=>i.aw,i6:()=>i.i6,iP:()=>n,pJ:()=>i.pJ,pV:()=>i.pV,ql:()=>i.ql,ri:()=>i.ri,s0:()=>i.s0,yv:()=>i.yv});var a=s(5271),i=s(4692);function n(e,t){let[s,i]=(0,a.useState)({width:e??Number.POSITIVE_INFINITY,height:t??Number.POSITIVE_INFINITY});return(0,a.useLayoutEffect)(()=>{let e=()=>{(0,a.startTransition)(()=>{i({width:window.innerWidth,height:window.innerHeight})})};return e(),window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}},[]),s}},3238:function(e,t,s){s.d(t,{cn:()=>n});var a=s(4461),i=s(6664);function n(){for(var e=arguments.length,t=Array(e),s=0;s<e;s++)t[s]=arguments[s];return(0,i.m6)((0,a.W)(t))}},1268:function(e,t,s){s.d(t,{g2:()=>g.g2,zx:()=>g.zx,xK:()=>g.xK,JL:()=>g.JL,ls:()=>g.ls,rU:()=>g.rU,xB:()=>g.xB,pU:()=>g.pU,TJ:()=>g.TJ,Qe:()=>g.Qe,O9:()=>g.O9,BZ:()=>g.BZ,mi:()=>g.mi,ZP:()=>f,Vp:()=>g.Vp,ol:()=>g.ol});var a=s(2676),i=s(3496);s(9139),s(5866),s(8308);var n=s(5271),o=s(3867),r=s(726),u=s(6606);let l="https://engula.com",d={home:{zh:{title:"Engula | 髿§è½ãå
åé«æçæ°æ®åº",metaTitle:"Engula | 髿§è½ãå
åé«æçæ°æ®åº | å
¼å®¹ Redis ä¸ Valkey",description:`Engula \u{662F}\u{9AD8}\u{6027}\u{80FD}\u{3001}\u{5185}\u{5B58}\u{9AD8}\u{6548}\u{7684}\u{6570}\u{636E}\u{5E93}\u{FF0C}\u{9AD8}\u{5EA6}\u{517C}\u{5BB9} Redis \u{4E0E} Valkey\u{3002}\u{5178}\u{578B}\u{53EF}\u{8282}\u{7701} ${u.s7.typicalRange} \u{5185}\u{5B58}\u{FF0C}\u{5B98}\u{65B9}\u{6D4B}\u{8BD5}\u{96C6} ${u.$G.passRate} \u{4E00}\u{81F4}\u{3002}`,keywords:"Engula, Redis å
¼å®¹, Valkey å
¼å®¹, å
åé«ææ°æ®åº, 髿§è½æ°æ®åº, Redis æ¿ä»£, å
åæ°æ®åº"},en:{title:"Engula | High-Performance, Memory-Efficient Database",metaTitle:"Engula | High-Performance, Memory-Efficient Database | Redis & Valkey Compatible",description:`Engula is a high-performance, memory-efficient database that is highly compatible with Redis and Valkey. Typically saves ${u.s7.typicalRange} memory, with a ${u.$G.passRate} match on the official test suite.`,keywords:"Engula, Redis compatible, Valkey compatible, memory-efficient database, high-performance database, Redis alternative, in-memory database"}},docs:{zh:{title:"Engula | ææ¡£",metaTitle:"Engula | ææ¡£",description:"Engula ææ¡£ ââ äºè§£å¦ä½ä½¿ç¨ Engulaï¼ä¸æ¬¾å
¼å®¹ Redis ä¸ Valkey ç髿§è½ãå
åé«ææ°æ®åºã",keywords:"Engula, Engula ææ¡£, Redis å
¼å®¹æ°æ®åº, Valkey å
¼å®¹, æ°æ®åºææ¡£"},en:{title:"Engula | Docs",metaTitle:"Engula | Documentation",description:"Engula documentation - Learn how to use Engula, a high-performance, memory-efficient database compatible with Redis and Valkey.",keywords:"Engula, Engula documentation, Redis compatible database, Valkey compatible, database documentation"}}};function p(){let e=(0,o.Vi)(),t=(0,r.bh)(),s=e.page.routePath,i=(0,r.MS)(s),n="/"===i||"/index"===i,u=(n?d.home:d.docs)[t],p=`${l}${"/index"===i?"/":i}`,c="/"===i||"/index"===i?"/en":`/en${i}`,m=`${l}${c}`,g="en"===t?m:p,f=n?"/og-index.png":"/og-docs.png";return(0,a.jsxs)(o.ql,{children:[(0,a.jsx)("html",{lang:"en"===t?"en":"zh-CN"}),(0,a.jsx)("title",{children:u.title}),(0,a.jsx)("meta",{name:"title",content:u.metaTitle}),(0,a.jsx)("meta",{name:"description",content:u.description}),(0,a.jsx)("meta",{name:"keywords",content:u.keywords}),(0,a.jsx)("link",{rel:"alternate",hrefLang:"zh-CN",href:p}),(0,a.jsx)("link",{rel:"alternate",hrefLang:"en",href:m}),(0,a.jsx)("link",{rel:"alternate",hrefLang:"x-default",href:p}),(0,a.jsx)("meta",{property:"og:type",content:n?"website":"article"}),(0,a.jsx)("meta",{property:"og:url",content:g}),(0,a.jsx)("meta",{property:"og:title",content:u.metaTitle}),(0,a.jsx)("meta",{property:"og:description",content:u.description}),(0,a.jsx)("meta",{property:"og:image",content:f}),(0,a.jsx)("meta",{property:"og:locale",content:"en"===t?"en_US":"zh_CN"}),(0,a.jsx)("meta",{property:"twitter:card",content:"summary_large_image"}),(0,a.jsx)("meta",{property:"twitter:url",content:g}),(0,a.jsx)("meta",{property:"twitter:title",content:u.metaTitle}),(0,a.jsx)("meta",{property:"twitter:description",content:u.description}),(0,a.jsx)("meta",{property:"twitter:image",content:f})]})}function c(){return(0,a.jsxs)(o.ql,{children:[(0,a.jsx)("link",{rel:"preload",href:"/fonts/Inter-roman.var.woff2",as:"font",type:"font/woff2",crossOrigin:"anonymous"}),(0,a.jsx)("link",{rel:"preload",href:"/fonts/SourceSerif4-roman.var.woff2",as:"font",type:"font/woff2",crossOrigin:"anonymous"})]})}var m=s(4065),g=s(398);let f={...i.ZP,Layout:function(){return(0,n.useEffect)(()=>
1{if("undefined"!=typeof window&&("localhost"===window.location.hostname||"127.0.0.1"===window.location.hostname||window.location.hostname.includes("localhost"))){let e=console.warn;return console.warn=function(){for(var t,s=arguments.length,a=Array(s),i=0;i<s;i++)a[i]=arguments[i];let n=(null==(t=a[0])?void 0:t.toString())||"";n.includes("React Router Future Flag Warning")||n.includes("v7_startTransition")||n.includes("v7_relativeSplatPath")||e.apply(console,a)},()=>{console.warn=e}}},[]),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(c,{}),(0,a.jsx)(p,{}),(0,a.jsx)(i.ZP.Layout,{navTitle:(0,a.jsx)(m.T,{})})]})}}},3638:function(){},8892:function(e){e.exports=JSON.parse('{"IZ":"Intel(R) Xeon(R) 6982P-C \xb7 ubuntu 22.04 \xb7 ecs.c9i.2xlarge","Bt":"engula2.2.0.linux-amd64.el7","eC":"Redis 7.2.11","C5":"20260630-131728-6418","lj":1202,"Oj":"2026-06-30T13:46:15.042Z"}')},5741:function(e){e.exports=JSON.parse('{"Sp":{"totalUnits":176,"passedUnits":168,"failedUnits":8,"totalSubtests":4351,"passedSubtests":4325,"failedSubtests":26,"durationSec":2207,"runId":"20260630-131728-6418"},"Xx":[{"id":"runtest","label":"Run test","subItemId":"1.1","verdict":"fail","totalUnits":92,"passedUnits":84,"failedUnits":8,"totalSubtests":3129,"passedSubtests":3103,"failedSubtests":26,"durationSec":1202},{"id":"moduleapi","label":"Module API","subItemId":"1.16","verdict":"pass","totalUnits":40,"passedUnits":40,"failedUnits":0,"totalSubtests":473,"passedSubtests":473,"failedSubtests":0,"durationSec":209},{"id":"sentinel","label":"Sentinel","subItemId":"1.14","verdict":"pass","totalUnits":16,"passedUnits":16,"failedUnits":0,"totalSubtests":198,"passedSubtests":198,"failedSubtests":0,"durationSec":132},{"id":"cluster","label":"Cluster","subItemId":"1.15","verdict":"pass","totalUnits":28,"passedUnits":28,"failedUnits":0,"totalSubtests":551,"passedSubtests":551,"failedSubtests":0,"durationSec":664}],"Dl":[{"name":"unit/printver","status":"pass","group":"runtest"},{"name":"unit/dump","status":"pass","group":"runtest"},{"name":"unit/auth","status":"pass","group":"runtest"},{"name":"unit/protocol","status":"pass","group":"runtest"},{"name":"unit/keyspace","status":"pass","group":"runtest"},{"name":"unit/scan","status":"pass","group":"runtest"},{"name":"unit/info","status":"pass","group":"runtest"},{"name":"unit/info-command","status":"pass","group":"runtest"},{"name":"unit/type/string","status":"pass","group":"runtest"},{"name":"unit/type/incr","status":"fail","group":"runtest","failedCount":1,"failedSubtests":["INCR uses shared objects in the 0-9999 range"]},{"name":"unit/type/list","status":"pass","group":"runtest"},{"name":"unit/type/list-2","status":"pass","group":"runtest"},{"name":"unit/type/list-3","status":"pass","group":"runtest"},{"name":"unit/type/set","status":"fail","group":"runtest","failedCount":7,"failedSubtests":["SRANDMEMBER with a dict containing long chain","SMOVE basics - from regular set to intset","SMOVE basics - from intset to regular set","SMOVE non existing key","SMOVE non existing src set","SMOVE from regular set to non existing destination set","SMOVE from intset to non existing destination set"]},{"name":"unit/type/zset","status":"pass","group":"runtest"},{"name":"unit/type/hash","status":"pass","group":"runtest"},{"name":"unit/type/stream","status":"pass","group":"runtest"},{"name":"unit/type/stream-cgroups","status":"pass","group":"runtest"},{"name":"unit/sort","status":"pass","group":"runtest"},{"name":"unit/expire","status":"pass","group":"runtest"},{"name":"unit/other","status":"fail","group":"runtest","failedCount":1,"failedSubtests":["Don\'t rehash if redis has child process"]},{"name":"unit/multi","status":"pass","group":"runtest"},{"name":"unit/quit","status":"pass","group":"runtest"},{"name":"unit/aofrw","status":"pass","group":"runtest"},{"name":"unit/acl","status":"pass","group":"runtest"},{"name":"unit/acl-v2","status":"pass","group":"runtest"},{"name":"unit/latency-monitor","status":"pass","group":"runtest"},{"name":"integration/block-repl","status":"pass","group":"runtest"},{"name":"integration/replication","status":"pass","group":"runtest"},{"name":"integration/replication-2","status":"pass","group":"runtest"},{"name":"integration/replication-3","status":"pass","group":"runtest"},{"name":"integration/replication-4","status":"pass","group":"runtest"},{"name":"integration/replication-psync","status":"pass","group":"runtest"},{"name":"integration/replication-buffer","status":"pass","group":"runtest"},{"name":"integration/shutdown","status":"pass","group":"runtest"},{"name":"integration/aof","status":"pass","group":"runtest"},{"name":"integration/aof-race","status":"pass","group":"runtest"},{"name":"integration/aof-multi-part","status":"pass","group":"runtest"},{"name":"integration/rdb","status":"fail","group":"runtest","failedCount":1,"failedSubtests":["Test RDB load info"]},{"name":"integration/corrupt-dump","status":"pass","group":"runtest"},{"name":"integration/corrupt-dump-fuzzer","status":"pass","group":"runtest"},{"name":"integration/convert-zipmap-hash-on-load","status":"pass","group":"runtest"},{"name":"integration/convert-ziplist-hash-on-load","status":"pass","group":"runtest"},{"name":"integration/convert-ziplist-zset-on-load","status":"pass","group":"runtest"},{"name":"integration/logging","status":"pass","group":"runtest"},{"name":"integration/psync2","status":"pass","group":"runtest"},{"name":"integration/psync2-reg","status":"pass","group":"runtest"},{"name":"integration/psync2-pingoff","status":"pass","group":"runtest"},{"name":"integration/psync2-master-restart","status":"fail","group":"runtest","failedCount":2,"failedSubtests":["PSYNC2: Partial resync after Master restart using RDB aux fields with expire","PSYNC2: Full resync after Master restart when too many key expired"]},{"name":"integration/failover","status":"pass","group":"runtest"},{"name":"integration/redis-cli","status":"pass","group":"runtest"},{"name":"integration/redis-benchmark","status":"pass","group":"runtest"},{"name":"integration/dismiss-mem","status":"pass","group":"runtest"},{"name":"unit/pubsub","status":"pass","group":"runtest"},{"name":"unit/pubsubshard","status":"pass","group":"runtest"},{"name":"unit/slowlog","status":"pass","group":"runtest"},{"name":"unit/scripting","status":"pass","group":"runtest"},{"name":"unit/functions","status":"pass","group":"runtest"},{"name":"unit/maxmemory","status":"fail","group":"runtest","failedCount":8,"failedSubtests":["eviction due to input buffer of a dead client, client eviction: false","Without maxmemory small integers are shared","With maxmemory and non-LRU policy integers are still shared","maxmemory - only allkeys-* should remove non-volatile keys (volatile-lru)","maxmemory - only allkeys-* should remove non-volatile keys (volatile-random)","maxmemory - only allkeys-* should remove non-volatile keys (volatile-ttl)","replica buffer don\'t induce eviction","client tracking don\'t cause eviction feedback loop"]},{"name":"unit/introspection","status":"pass","group":"runtest"},{"name":"unit/introspection-2","status":"pass","group":"runtest"},{"name":"unit/limits","status":"pass","group":"runtest"},{"name":"unit/obuf-limits","status":"pass","group":"runtest"},{"name":"unit/bitops","status":"pass","group":"runtest"},{"name":"unit/bitfield","status":"pass","group":"runtest"},{"name":"unit/geo","status":"pass","group":"runtest"},{"name":"unit/memefficiency","status":"fail","group":"runtest","failedCount":5,"failedSubtests":["Active defrag","Active defrag eval scripts","Active defrag big keys","A
1ctive defrag big list","Active defrag edge case"]},{"name":"unit/hyperloglog","status":"pass","group":"runtest"},{"name":"unit/lazyfree","status":"pass","group":"runtest"},{"name":"unit/wait","status":"pass","group":"runtest"},{"name":"unit/pause","status":"pass","group":"runtest"},{"name":"unit/querybuf","status":"pass","group":"runtest"},{"name":"unit/tls","status":"pass","group":"runtest"},{"name":"unit/tracking","status":"fail","group":"runtest","failedCount":1,"failedSubtests":["Tracking invalidation message of eviction keys should be before response"]},{"name":"unit/oom-score-adj","status":"pass","group":"runtest"},{"name":"unit/shutdown","status":"pass","group":"runtest"},{"name":"unit/networking","status":"pass","group":"runtest"},{"name":"unit/client-eviction","status":"pass","group":"runtest"},{"name":"unit/violations","status":"pass","group":"runtest"},{"name":"unit/replybufsize","status":"pass","group":"runtest"},{"name":"unit/cluster/announced-endpoints","status":"pass","group":"runtest"},{"name":"unit/cluster/misc","status":"pass","group":"runtest"},{"name":"unit/cluster/cli","status":"pass","group":"runtest"},{"name":"unit/cluster/scripting","status":"pass","group":"runtest"},{"name":"unit/cluster/hostnames","status":"pass","group":"runtest"},{"name":"unit/cluster/human-announced-nodename","status":"pass","group":"runtest"},{"name":"unit/cluster/multi-slot-operations","status":"pass","group":"runtest"},{"name":"unit/cluster/slot-ownership","status":"pass","group":"runtest"},{"name":"unit/cluster/links","status":"pass","group":"runtest"},{"name":"unit/cluster/cluster-response-tls","status":"pass","group":"runtest"},{"name":"unit/cluster/failure-marking","status":"pass","group":"runtest"},{"name":"unit/cluster/sharded-pubsub","status":"pass","group":"runtest"},{"name":"unit/moduleapi/commandfilter","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/basics","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/fork","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/testrdb","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/infotest","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/moduleconfigs","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/infra","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/propagate","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/hooks","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/misc","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/blockonkeys","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/blockonbackground","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/scan","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/datatype","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/auth","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/keyspace_events","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/blockedclient","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/getkeys","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/test_lazyfree","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/defrag","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/keyspecs","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/hash","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/zset","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/list","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/stream","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/mallocsize","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/datatype2","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/cluster","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/aclcheck","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/subcommands","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/reply","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/cmdintrospection","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/eventloop","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/timer","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/publish","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/usercall","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/postnotifications","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/async_rm_call","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/moduleauth","status":"pass","group":"moduleapi"},{"name":"unit/moduleapi/rdbloadsave","status":"pass","group":"moduleapi"},{"name":"00-base.tcl","status":"pass","group":"sentinel"},{"name":"01-conf-update.tcl","status":"pass","group":"sentinel"},{"name":"02-slaves-reconf.tcl","status":"pass","group":"sentinel"},{"name":"03-runtime-reconf.tcl","status":"pass","group":"sentinel"},{"name":"04-slave-selection.tcl","status":"pass","group":"sentinel"},{"name":"05-manual.tcl","status":"pass","group":"sentinel"},{"name":"06-ckquorum.tcl","status":"pass","group":"sentinel"},{"name":"07-down-conditions.tcl","status":"pass","group":"sentinel"},{"name":"08-hostname-conf.tcl","status":"pass","group":"sentinel"}
1,{"name":"09-acl-support.tcl","status":"pass","group":"sentinel"},{"name":"10-replica-priority.tcl","status":"pass","group":"sentinel"},{"name":"11-port-0.tcl","status":"pass","group":"sentinel"},{"name":"12-master-reboot.tcl","status":"pass","group":"sentinel"},{"name":"13-info-command.tcl","status":"pass","group":"sentinel"},{"name":"14-debug-command.tcl","status":"pass","group":"sentinel"},{"name":"15-config-set-config-get.tcl","status":"pass","group":"sentinel"},{"name":"00-base.tcl","status":"pass","group":"cluster"},{"name":"01-faildet.tcl","status":"pass","group":"cluster"},{"name":"02-failover.tcl","status":"pass","group":"cluster"},{"name":"03-failover-loop.tcl","status":"pass","group":"cluster"},{"name":"04-resharding.tcl","status":"pass","group":"cluster"},{"name":"05-slave-selection.tcl","status":"pass","group":"cluster"},{"name":"06-slave-stop-cond.tcl","status":"pass","group":"cluster"},{"name":"07-replica-migration.tcl","status":"pass","group":"cluster"},{"name":"08-update-msg.tcl","status":"pass","group":"cluster"},{"name":"09-pubsub.tcl","status":"pass","group":"cluster"},{"name":"10-manual-failover.tcl","status":"pass","group":"cluster"},{"name":"11-manual-takeover.tcl","status":"pass","group":"cluster"},{"name":"12-replica-migration-2.tcl","status":"pass","group":"cluster"},{"name":"12.1-replica-migration-3.tcl","status":"pass","group":"cluster"},{"name":"13-no-failover-option.tcl","status":"pass","group":"cluster"},{"name":"14-consistency-check.tcl","status":"pass","group":"cluster"},{"name":"15-cluster-slots.tcl","status":"pass","group":"cluster"},{"name":"16-transactions-on-replica.tcl","status":"pass","group":"cluster"},{"name":"17-diskless-load-swapdb.tcl","status":"pass","group":"cluster"},{"name":"18-info.tcl","status":"pass","group":"cluster"},{"name":"19-cluster-nodes-slots.tcl","status":"pass","group":"cluster"},{"name":"20-half-migrated-slot.tcl","status":"pass","group":"cluster"},{"name":"21-many-slot-migration.tcl","status":"pass","group":"cluster"},{"name":"22-replica-in-sync.tcl","status":"pass","group":"cluster"},{"name":"25-pubsubshard-slot-migration.tcl","status":"pass","group":"cluster"},{"name":"26-pubsubshard.tcl","status":"pass","group":"cluster"},{"name":"28-cluster-shards.tcl","status":"pass","group":"cluster"},{"name":"29-slot-migration-response.tcl","status":"pass","group":"cluster"}]}')}},t={};function s(a){var i=t[a];if(void 0!==i)return i.exports;var n=t[a]={exports:{}};return e[a].call(n.exports,n,n.exports,s),n.exports}s.m=e,s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;s.t=function(a,i){if(1&i&&(a=this(a)),8&i||"object"==typeof a&&a&&(4&i&&a.__esModule||16&i&&"function"==typeof a.then))return a;var n=Object.create(null);s.r(n);var o={};e=e||[null,t({}),t([]),t(t)];for(var r=2&i&&a;"object"==typeof r&&!~e.indexOf(r);r=t(r))Object.getOwnPropertyNames(r).forEach(e=>{o[e]=()=>a[e]});return o.default=()=>a,s.d(n,o),n}})(),s.d=(e,t)=>{for(var a in t)s.o(t,a)&&!s.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce((t,a)=>(s.f[a](e,t),t),[])),s.u=e=>"static/js/async/"+e+"."+({1178:"2a250fa5",1343:"337e4220",1420:"f9837c69",174:"07728328",2037:"3fa26c0c",207:"c0a68579",2284:"a552278c",2409:"c775f74b",2578:"fa82b9c6",2659:"8a7c6c8b",2746:"e4e1d396",2805:"5a8ef0ba",2846:"71d63eab",2882:"797cde20",30:"2eb09185",3072:"9c563ecd",3153:"381ca9a6",321:"21c830a3",3215:"3c20ae48",3292:"bd367e09",3531:"1f432cf1",3716:"0fcaa08c",3726:"d8205b08",3745:"26b2e7e3",3888:"cc6a62a8",39:"fa98d882",4108:"b84ce93e",4239:"e70f43bb",4268:"bd169002",4317:"9d63553e",445:"d11220fb",4481:"53042bda",4506:"66932ec8",4571:"cfa5056b",4745:"e7daf3f5",479:"17c62773",4830:"1bbe957a",4851:"bc43a65c",4995:"bbeb034e",5007:"6de8c4db",5215:"f3b76bfc",5292:"9b41fad4",5448:"1339eda2",5475:"b5ff83b1",570:"d2117782",6030:"b49246c6",622:"d108b37d",6236:"2cae399d",643:"b64df14f",6492:"5835e19c",6567:"35cf966d",6597:"45907fdb",6829:"898d0b57",686:"94e500d2",7068:"05992423",708:"f9cb2c20",7295:"37231ecf",7307:"adbf939f",7414:"e98c4d86",7554:"9c3e
114a6",7693:"5a0fe77b",7722:"029d59d8",7925:"6a53db29",8081:"fe47de87",8250:"c402141d",8263:"7d000bbe",8294:"ac129c94",8441:"05d6a173",8486:"ccfbb5aa",8631:"5027590b",8864:"4e1fb681",888:"d21e00d2",8929:"679cff40",9121:"112ba6c3",9213:"6364cd32",9226:"81106fb4",9332:"c058edfb",9367:"d47fa4f4",9549:"d34e52bd",9649:"d267cd3c",9719:"1cce0ef4",9726:"5febbce0",9891:"97a44922",9944:"ce13c928",9987:"f6457369"})[e]+".js",s.miniCssF=e=>""+e+".css",s.h=()=>"917b02e72c7871da",s.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="engula-website:";s.l=function(a,i,n,o){if(e[a])return void e[a].push(i);if(void 0!==n)for(var r,u,l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var p=l[d];if(p.getAttribute("src")==a||p.getAttribute("data-webpack")==t+n){r=p;break}}r||(u=!0,(r=document.createElement("script")).charset="utf-8",r.timeout=120,s.nc&&r.setAttribute("nonce",s.nc),r.setAttribute("data-webpack",t+n),r.src=a),e[a]=[i];var c=function(t,s){r.onerror=r.onload=null,clearTimeout(m);var i=e[a];if(delete e[a],r.parentNode&&r.parentNode.removeChild(r),i&&i.forEach(function(e){return e(s)}),t)return t(s)},m=setTimeout(c.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=c.bind(null,r.onerror),r.onload=c.bind(null,r.onload),u&&document.head.appendChild(r)}})(),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e=[];s.O=(t,a,i,n)=>{if(a){n=n||0;for(var o=e.length;o>0&&e[o-1][2]>n;o--)e[o]=e[o-1];e[o]=[a,i,n];return}for(var r=1/0,o=0;o<e.length;o++){for(var[a,i,n]=e[o],u=!0,l=0;l<a.length;l++)(!1&n||r>=n)&&Object.keys(s.O).every(e=>s.O[e](a[l]))?a.splice(l--,1):(u=!1,n<r&&(r=n));if(u){e.splice(o--,1);var d=i();void 0!==d&&(t=d)}}return t}})(),s.p="/",s.rv=()=>"1.3.12",(()=>{var e={2980:0};s.f.j=function(t,a){var i=s.o(e,t)?e[t]:void 0;if(0!==i)if(i)a.push(i[2]);else{var n=new Promise((s,a)=>i=e[t]=[s,a]);a.push(i[2]=n);var o=s.p+s.u(t),r=Error();s.l(o,function(a){if(s.o(e,t)&&(0!==(i=e[t])&&(e[t]=void 0),i)){var n=a&&("load"===a.type?"missing":a.type),o=a&&a.target&&a.target.src;r.message="Loading chunk "+t+" failed.\n("+n+": "+o+")",r.name="ChunkLoadError",r.type=n,r.request=o,i[1](r)}},"chunk-"+t,t)}},s.O.j=t=>0===e[t];var t=(t,a)=>{var i,n,[o,r,u]=a,l=0;if(o.some(t=>0!==e[t])){for(i in r)s.o(r,i)&&(s.m[i]=r[i]);if(u)var d=u(s)}for(t&&t(a);l<o.length;l++)n=o[l],s.o(e,n)&&e[n]&&e[n][0](),e[n]=0;return s.O(d)},a=self.webpackChunkengula_website=self.webpackChunkengula_website||[];a.forEach(t.bind(null,0)),a.push=t.bind(null,a.push.bind(a))})(),s.ruid="[email protected]",s.O(void 0,["6212","3361","2118","8130"],function(){return s(1556)}),s.O(void 0,["6212","3361","2118","8130"],function(){return s(1661)}),s.O(void 0,["6212","3361","2118","8130"],function(){return s(1268)});var a=s.O(void 0,["6212","3361","2118","8130"],function(){return s(2421)});a=s.O(a)})();
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.