1"use strict";(self.webpackChunkengula_website=self.webpackChunkengula_website||[]).push([["3153"],{9870:function(e,n,i){i.r(n),i.d(n,{default:()=>a});var r=i(2676),d=i(453);function s(e){let n=Object.assign({h1:"h1",a:"a",h2:"h2",p:"p",strong:"strong",br:"br",h3:"h3",ul:"ul",li:"li"},(0,d.ah)(),e.components);return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsxs)(n.h1,{id:"åå¸è¯´æ",children:["åå¸è¯´æ",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#åå¸è¯´æ",children:"#"})]}),"\n",(0,r.jsxs)(n.h2,{id:"engula-v10-åå¸è¯´æ",children:["Engula v1.0 åå¸è¯´æ",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#engula-v10-åå¸è¯´æ",children:"#"})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"å叿¶é´çªå£ï¼"})," 2024 å¹´ 1 æ â 2024 å¹´ 11 æ",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.strong,{children:"éç¹ï¼"})," å缩è½åä¸åå
¸è®ç»ãå¯è§æµæ§ä¸ææ ãæµè¯ä¸å·¥å
·é¾ãç¨³å®æ§ä¿®å¤ã"]}),"\n",(0,r.jsxs)(n.h3,{id:"-亮ç¹",children:["\uD83D\uDE80 亮ç¹",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-亮ç¹",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"v1.0 çæ¬å®æäºå缩è½åä¸é
å¥å·¥å
·é¾è½å°ï¼å¼å
¥ ZSTD/FSST å缩ä¸èªéåºåå
¸ãå®åææ ä¸ç»è®¡è¾åºï¼å¹¶è¡¥é½æµè¯ä¸å叿µæ°´çº¿ã"}),"\n",(0,r.jsxs)(n.h3,{id:"-æ°ç¹æ§",children:["⨠æ°ç¹æ§",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-æ°ç¹æ§",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"å缩ä¸åå
¸ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added FSST support and split FSST/ZSTD build."}),"\n",(0,r.jsx)(n.li,{children:"Added adaptive dictionaries for ZSTD compression."}),"\n",(0,r.jsx)(n.li,{children:"Added KV compression for hashtable and t_hash compression support."}),"\n",(0,r.jsx)(n.li,{children:'Added "MC DICTINFO" command and "MC OBJECT" command for compression inspection.'}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"å¯è§æµæ§ä¸ææ ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added the engula info command to print internal statistics."}),"\n",(0,r.jsx)(n.li,{children:"Added new metrics and confirmed redis-exporter metrics."}),"\n",(0,r.jsx)(n.li,{children:"Added metrics and stats for dict recycle and LIST compression."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"é群ä¸è¿ç»´ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Cluster failover done."}),"\n",(0,r.jsx)(n.li,{children:"Added bgsave check."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"æµè¯ä¸å·¥å
·ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added ginkgo framework and updated ginkgo test cases."}),"\n",(0,r.jsx)(n.li,{children:"Added TCL test cases support."}),"\n",(0,r.jsx)(n.li,{children:"Added init.sh script for setting up development environment."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-æ¹è¿ä¸éæ",children:["\uD83D\uDEE0 æ¹è¿ä¸éæ",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-æ¹è¿ä¸éæ",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"å缩ä¸èµæºåæ¶ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Refactored mc compress and dict train flow."}),"\n",(0,r.jsx)(n.li,{children:"Enhanced dict recycle policy and split reclaim process for HT entries."}),"\n",(0,r.jsx)(n.li,{children:"Removed confused compress_stats_tot_try_cnt_ metrics."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"许å¯ä¸åè§ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"License will be expired 90 days after the compile time."}),"\n",(0,r.jsx)(n.li,{children:"Changed the license expire date from 90 days to 30 days."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"åå¸ä¸çæ¬ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Updated engula-server-lib version."}),"\n",(0,r.jsx)(n.li,{children:"Docs: update engula version to 1.0.1."}),"\n",(0,r.jsx)(n.li,{children:"Added engula-server Dockerfile and refined dockerfile/workflow image names."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-bug-ä¿®å¤",children:["\uD83D\uDC1B Bug ä¿®å¤",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-bug-ä¿®å¤",children:"#"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed invali
1d memory access in compress_cron_task for hash object recycle."}),"\n",(0,r.jsx)(n.li,{children:"Fixed wrong database id for ht element."}),"\n",(0,r.jsx)(n.li,{children:"Fixed rdb checksum parsing issue."}),"\n",(0,r.jsx)(n.li,{children:"Fixed serverPanic issue."}),"\n",(0,r.jsx)(n.li,{children:"Fixed exception in human_readable_to_size() when str_size is '0B'."}),"\n",(0,r.jsx)(n.li,{children:'Fixed "access after free" issue when AOF reloading.'}),"\n",(0,r.jsx)(n.li,{children:"Fixed memory double free in hrandfieldWithCountCommand()."}),"\n",(0,r.jsx)(n.li,{children:"Fixed misc compile errors on Linux/macOS (including hiredis)."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-åºç¡è®¾æ½ä¸-ci",children:["\uD83D\uDEE0 åºç¡è®¾æ½ä¸ CI",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-åºç¡è®¾æ½ä¸-ci",children:"#"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added workflow to auto release cross-platform tarball on tag."}),"\n",(0,r.jsx)(n.li,{children:"Added weekly auto build."}),"\n",(0,r.jsx)(n.li,{children:"Updated GitHub Actions workflows and build docker images."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"engula-v20-åå¸è¯´æ",children:["Engula v2.0 åå¸è¯´æ",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#engula-v20-åå¸è¯´æ",children:"#"})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"å叿¶é´çªå£ï¼"})," 2024 å¹´ 12 æ â 2025 å¹´ 3 æ",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.strong,{children:"éç¹ï¼"})," æ ¸å¿å
å弿éæãåºç¡ç¢çæ´çãæ°æ®ç»ææ¯æã"]}),"\n",(0,r.jsxs)(n.h3,{id:"-亮ç¹-1",children:["\uD83D\uDE80 亮ç¹",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-亮ç¹-1",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"æ¬çæ¬å¼å
¥ eallocator å
å弿ï¼å¹¶ä¸ Valkey 深度éæï¼å¥ å®é«æ§è½å
å管çåºç¡ï¼å
æ¬ ZSTD å缩ãMemory Block ç¢çæ´çï¼ä»¥åå¯¹å¤ææ°æ®ç±»åï¼HashãSetãListpackï¼çä¸é¨å¤çã"}),"\n",(0,r.jsxs)(n.h3,{id:"-æ°ç¹æ§-1",children:["⨠æ°ç¹æ§",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-æ°ç¹æ§-1",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"æ ¸å¿å¼æéæï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Integrated Valkey with eallocator and wrapped the key-value store into ekvstore."}),"\n",(0,r.jsx)(n.li,{children:"Introduced eallocator support for basic memory arena management."}),"\n",(0,r.jsx)(n.li,{children:"Added support for Mutable and Immutable memory blocks."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"å缩ä¸ç¼ç ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added support for ZSTD compression in earena."}),"\n",(0,r.jsx)(n.li,{children:"Implemented Variable Byte Encoding for integers."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"æ°æ®ç»ææ¯æï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added eallocator support for Hash objects and Set objects."}),"\n",(0,r.jsx)(n.li,{children:"Refactored Listpack to support Set and Hash objects efficiently."}),"\n",(0,r.jsx)(n.li,{children:"Implemented eobj serialization and deserialization."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"å¯è§æµæ§ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Introduced the engula info command to print internal statistics."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-æ¹è¿ä¸éæ-1",children:["\uD83D\uDEE0 æ¹è¿ä¸éæ",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-æ¹è¿ä¸éæ-1",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"ç¢çæ´çï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Rolled out Memory Defragmentation Phase 2 (merging blocks) and Phase 3."}),"\n",(0,r.jsx)(n.li,{children:"Added background threads specifically for zip and defragmentation tasks."}),"\n",(0,r.jsx)(n.li,{children:"Optimization: Empty blocks are no longer added to the defrag request list."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"å
å管çï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Supported up to 32KB record contents in dense/sparse memory blocks."}),"\n",(0,r.jsx)(n.li,{children:"Optimized async deletion using a waitable queue in batch mode to reduce CPU usage."}),"\n",(0,r.jsx)(n.li,{children:"Refactored elpobj pointers."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-bug-ä¿®å¤-1",children:["\uD83D\uDC1B Bug ä¿®å¤",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-bug-ä¿®å¤-1",children:"#"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed ZUNION errors when mixing Set and ZSet types."}),"\n",(0,r.jsx)(n.li,{children:"Fixed bugs related to HINCRBY results not saving to listpack."}),"\n",(0,r.jsx)(n.li,{children:'Resolved memory leaks in e-record and fixed "access after free" issues.'}),"\n",(0,r.jsx)(n.li,{children:"Fixed Universal Test (UT) errors for bit operations."}),"\n"]}),"\n",(0,r.jsxs)(n.h2,{id:"engula-v21-åå¸è¯´æ",children:["Engula v2.1 åå¸è¯´æ",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#engula-v21-åå¸è¯´æ",children:"#"})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"å叿¶é´çªå£ï¼"})," 2025 å¹´ 4 æ â 2025 å¹´ 11 æ",(0,r.jsx)(n.br,{}),"\n",(0,r.jsx)(n.strong,{children:"éç¹ï¼"})," æ§è½è°ä¼ã大 Value æ¯æãæ¨¡åç³»ç»ã䏿¸¸åæ¥ï¼Valkey 8.1 / Redis 7.2ï¼ã"]}),"\n",(0,r.jsxs)(n.h3,{id:"-亮ç¹-2",children:["\uD83D\uDE80 亮ç¹",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-亮ç¹-2",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:"2.1 çæ¬èç¦æ§è½ä¸å¯æ©å±æ§ï¼å
æ¬ I/O 线ç¨ä¸åå¸è¡¨ä¼åçæ¾èæ§è½æåï¼å¹¶æ°å¢å¯¹ 4GB ä»¥ä¸ Value çæ¯æãåæ¶å¯¹é½ Valkeyï¼8.1.4ï¼ä¸ Redisï¼7.2ï¼çææ°ä¸æ¸¸çæ¬å
¼å®¹æ§ã"}),"\n",(0,r.jsxs)(n.h3,{id:"-æ°ç¹æ§-2",children:["⨠æ°ç¹æ§",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-æ°ç¹æ§-2",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"æ©å±æ§ä¸åå¨ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added supp
1ort for values larger than 4GB."}),"\n",(0,r.jsx)(n.li,{children:"Implemented Active Defragmentation."}),"\n",(0,r.jsx)(n.li,{children:"Added support for compress groups."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"模åç³»ç»ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added Engula module support."}),"\n",(0,r.jsx)(n.li,{children:"Implemented Module GIL (Global Interpreter Lock) support."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"䏿¸¸å
¼å®¹æ§ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Merged Valkey 8.1.4 and Valkey 8.1.1."}),"\n",(0,r.jsx)(n.li,{children:"Adapted codebase to support Redis 7.2 and related unit tests."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-æ§è½æ¹è¿",children:["â¡ æ§è½æ¹è¿",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-æ§è½æ¹è¿",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"I/O ä¸çº¿ç¨ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Performance improvements for 8 IO threads and 2 IO threads."}),"\n",(0,r.jsx)(n.li,{children:"Added async IO notify functionality."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"åå¸è¡¨ä¼åï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Improved overall performance for hashtable GET operations."}),"\n",(0,r.jsx)(n.li,{children:"Optimized rehash performance and reduced decompression counts for HMGET."}),"\n",(0,r.jsx)(n.li,{children:"Implemented memory prefetch for rehash operations."}),"\n"]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"å
åä¸å»¶è¿ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Reduced p99 latency."}),"\n",(0,r.jsx)(n.li,{children:"Implemented quick async free."}),"\n",(0,r.jsx)(n.li,{children:"Disabled lazyfree_lazy_user_flush by default to optimize flushing behavior."}),"\n",(0,r.jsx)(n.li,{children:"Supported 64KB page size for ARM64 architecture."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-åºç¡è®¾æ½ä¸-ci-1",children:["\uD83D\uDEE0 åºç¡è®¾æ½ä¸ CI",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-åºç¡è®¾æ½ä¸-ci-1",children:"#"})]}),"\n",(0,r.jsx)(n.p,{children:(0,r.jsx)(n.strong,{children:"æå»ºç³»ç»ï¼"})}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Added automated packaging for Linux EL7 (CentOS 7) tarballs."}),"\n",(0,r.jsx)(n.li,{children:"Added montplex/ubuntu-build docker image for actions."}),"\n",(0,r.jsx)(n.li,{children:"Updated GitHub Actions workflows significantly."}),"\n"]}),"\n",(0,r.jsxs)(n.h3,{id:"-bug-ä¿®å¤-2",children:["\uD83D\uDC1B Bug ä¿®å¤",(0,r.jsx)(n.a,{className:"header-anchor","aria-hidden":"true",href:"#-bug-ä¿®å¤-2",children:"#"})]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Fixed VM_HSet bug in the module system."}),"\n",(0,r.jsx)(n.li,{children:"Fixed issues related to test scripts."}),"\n",(0,r.jsx)(n.li,{children:"Addressed compilation tasks in eallocator."}),"\n"]})]})}function l(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:n}=Object.assign({},(0,d.ah)(),e.components);return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(s,{...e})}):s(e)}let a=l;l.__RSPRESS_PAGE_META={},l.__RSPRESS_PAGE_META["zh%2Fdocs%2Frelease-notes.md"]={toc:[{text:"Engula v1.0 åå¸è¯´æ",id:"engula-v10-åå¸è¯´æ",depth:2},{text:"\uD83D\uDE80 亮ç¹",id:"-亮ç¹",depth:3},{text:"⨠æ°ç¹æ§",id:"-æ°ç¹æ§",depth:3},{text:"\uD83D\uDEE0 æ¹è¿ä¸éæ",id:"-æ¹è¿ä¸éæ",depth:3},{text:"\uD83D\uDC1B Bug ä¿®å¤",id:"-bug-ä¿®å¤",depth:3},{text:"\uD83D\uDEE0 åºç¡è®¾æ½ä¸ CI",id:"-åºç¡è®¾æ½ä¸-ci",depth:3},{text:"Engula v2.0 åå¸è¯´æ",id:"engula-v20-åå¸è¯´æ",depth:2},{text:"\uD83D\uDE80 亮ç¹",id:"-亮ç¹-1",depth:3},{text:"⨠æ°ç¹æ§",id:"-æ°ç¹æ§-1",depth:3},{text:"\uD83D\uDEE0 æ¹è¿ä¸éæ",id:"-æ¹è¿ä¸éæ-1",depth:3},{text:"\uD83D\uDC1B Bug ä¿®å¤",id:"-bug-ä¿®å¤-1",depth:3},{text:"Engula v2.1 åå¸è¯´æ",id:"engula-v21-åå¸è¯´æ",depth:2},{text:"\uD83D\uDE80 亮ç¹",id:"-亮ç¹-2",depth:3},{text:"⨠æ°ç¹æ§",id:"-æ°ç¹æ§-2",depth:3},{text:"â¡ æ§è½æ¹è¿",id:"-æ§è½æ¹è¿",depth:3}
1,{text:"\uD83D\uDEE0 åºç¡è®¾æ½ä¸ CI",id:"-åºç¡è®¾æ½ä¸-ci-1",depth:3},{text:"\uD83D\uDC1B Bug ä¿®å¤",id:"-bug-ä¿®å¤-2",depth:3}],title:"åå¸è¯´æ",headingTitle:"åå¸è¯´æ",frontmatter:{}}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.