PageSourceSearch

https://montplex.com/static/js/index.770f1953.js

js montplex.com collected 2026-10-03 21:16:09 UTC 63,502 bytes, 1 lines download raw bytes

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.