<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Valkey on Tarragon</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/vendors/valkey/</link><description>Recent content in Valkey on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Fri, 01 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/backend/02-cache-redis/vendors/valkey/index.xml" rel="self" type="application/rss+xml"/><item><title>Valkey 相容性驗證與 io-threads 調校：drop-in 切換與多執行緒的實機判讀</title><link>https://tarrragon.github.io/blog/backend/02-cache-redis/vendors/valkey/redis-compatibility-and-io-threads/</link><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/02-cache-redis/vendors/valkey/redis-compatibility-and-io-threads/</guid><description>&lt;blockquote>
&lt;p>本文是 &lt;a href="https://tarrragon.github.io/blog/backend/02-cache-redis/vendors/valkey/" data-link-title="Valkey" data-link-desc="Redis fork、Linux Foundation 託管、BSD 授權">Valkey&lt;/a> overview 的 implementation-layer deep article。選型層（為何 fork、授權治理、何時選 Valkey）見 overview；本文只處理「決定用 Valkey 後，相容性怎麼驗、執行緒怎麼調」。命令實機驗證於 &lt;code>valkey/valkey:8&lt;/code> image（valkey_version 8.1.8）、最後檢查日 2026-06-16；效能數字以 &lt;a href="https://valkey.io/blog/">valkey.io 官方 benchmark&lt;/a> 為準。&lt;/p>&lt;/blockquote>
&lt;h2 id="100-相容要能驗證才敢切">「100% 相容」要能驗證才敢切&lt;/h2>
&lt;p>Valkey 從 Redis 7.2.4 fork、宣稱 100% API 相容、drop-in 替換——這對選型是好消息，對上線前的工程師卻是一個需要證據的斷言。把 production 的 Redis 換成 Valkey，最怕的不是「大部分指令能跑」，而是某個邊角行為、某個 client library 的版本協商、某個 module 沒有對應 fork，在切換後才浮現。相容性不能靠信任，要靠驗證。&lt;/p>
&lt;p>驗證的起點是一個容易被忽略的細節：Valkey 的 &lt;code>INFO server&lt;/code> 同時回報兩個版本號。&lt;/p>





&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="ln">1&lt;/span>&lt;span class="cl">docker &lt;span class="nb">exec&lt;/span> valkey valkey-cli INFO server &lt;span class="p">|&lt;/span> grep -E &lt;span class="s2">&amp;#34;redis_version|valkey_version|server_name&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">2&lt;/span>&lt;span class="cl">&lt;span class="c1"># redis_version:7.2.4 ← client library 以此協商相容行為&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">3&lt;/span>&lt;span class="cl">&lt;span class="c1"># server_name:valkey&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="ln">4&lt;/span>&lt;span class="cl">&lt;span class="c1"># valkey_version:8.1.8 ← Valkey 自身的演進線&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>這個雙版本回報就是相容性的機制本身：client library 看到 &lt;code>redis_version:7.2.4&lt;/code>，就以 Redis 7.2.4 的協定與行為運作，完全不知道背後是 Valkey；&lt;code>valkey_version&lt;/code> 才是 Valkey 自己的版本，記錄它在 fork 之後加了什麼（例如 8.x 的多執行緒）。理解這條雙線——「對外裝成 Redis 7.2.4、對內持續演進」——是判斷相容性邊界的鑰匙。&lt;/p>
&lt;p>對大規模生產驗證，&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/cases/tinder-elasticache-valkey-matching/" data-link-title="9.C6 Tinder：ElastiCache for Valkey 撐 4700 萬月活的配對引擎" data-link-desc="Tinder 用 Amazon ElastiCache for Valkey 提供配對引擎所需的次毫秒延遲快取層">Tinder 的配對引擎&lt;/a>是現成的證據：4700 萬月活、每次滑動讀多個 cache、sub-millisecond 延遲，跑在 Amazon ElastiCache for Valkey 上——這個規模的服務跑在 Valkey 上，本身就是相容性的背書。另一個訊號是 AWS 在 2024 把 ElastiCache 的 default engine 從 Redis 改成 Valkey（AWS 宣稱成本較 Redis OSS 低約 20%、以 &lt;a href="https://aws.amazon.com/elasticache/pricing/">ElastiCache 定價&lt;/a> 為準、最後檢查日 2026-06-16）。這些都是外部背書，但各服務有自己的 client library、module 與邊角用法，仍需自行驗證。&lt;/p>
&lt;h2 id="核心概念相容性的三層邊界">核心概念：相容性的三層邊界&lt;/h2>
&lt;p>「100% 相容」在不同層次有不同的精確度，驗證要分三層做。&lt;/p>
&lt;p>&lt;strong>協定與核心指令層：完全相容&lt;/strong>。string / hash / list / set / sorted set / stream / hyperloglog / geo 的所有指令、TTL / eviction / persistence / pub-sub / transaction、RESP 協定——這層是 fork 自 Redis 7.2.4 的部分，行為一致。所有標準 Redis client library 透過 &lt;code>redis_version&lt;/code> 協商，直接連、不改 code。&lt;/p>
&lt;p>&lt;strong>檔案格式層：相容&lt;/strong>。RDB 與 AOF 的檔案格式跟 Redis 7.2.4 一致，可以直接把 Redis 的資料目錄拷給 Valkey 載入——這是 drop-in 遷移的基礎，不需要 dump / reload。&lt;/p>
&lt;p>&lt;strong>生態與新功能層：要逐項確認&lt;/strong>。Redis 7.4+ 在 fork 之後新增的功能（Valkey 不一定跟進）、Redis Stack 的商業 module（RedisJSON / RedisSearch，Valkey 有自己的 valkey-search / valkey-bloom 但不是同一套）、偏 Redis Inc 的監控工具（RedisInsight 部分 vendor-specific 命令）——這層是相容性的真實風險所在，驗證要集中在這裡。&lt;/p></description><content:encoded><![CDATA[<blockquote>
<p>本文是 <a href="/blog/backend/02-cache-redis/vendors/valkey/" data-link-title="Valkey" data-link-desc="Redis fork、Linux Foundation 託管、BSD 授權">Valkey</a> overview 的 implementation-layer deep article。選型層（為何 fork、授權治理、何時選 Valkey）見 overview；本文只處理「決定用 Valkey 後，相容性怎麼驗、執行緒怎麼調」。命令實機驗證於 <code>valkey/valkey:8</code> image（valkey_version 8.1.8）、最後檢查日 2026-06-16；效能數字以 <a href="https://valkey.io/blog/">valkey.io 官方 benchmark</a> 為準。</p></blockquote>
<h2 id="100-相容要能驗證才敢切">「100% 相容」要能驗證才敢切</h2>
<p>Valkey 從 Redis 7.2.4 fork、宣稱 100% API 相容、drop-in 替換——這對選型是好消息，對上線前的工程師卻是一個需要證據的斷言。把 production 的 Redis 換成 Valkey，最怕的不是「大部分指令能跑」，而是某個邊角行為、某個 client library 的版本協商、某個 module 沒有對應 fork，在切換後才浮現。相容性不能靠信任，要靠驗證。</p>
<p>驗證的起點是一個容易被忽略的細節：Valkey 的 <code>INFO server</code> 同時回報兩個版本號。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl">docker <span class="nb">exec</span> valkey valkey-cli INFO server <span class="p">|</span> grep -E <span class="s2">&#34;redis_version|valkey_version|server_name&#34;</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl"><span class="c1"># redis_version:7.2.4    ← client library 以此協商相容行為</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"># server_name:valkey</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"># valkey_version:8.1.8   ← Valkey 自身的演進線</span></span></span></code></pre></div><p>這個雙版本回報就是相容性的機制本身：client library 看到 <code>redis_version:7.2.4</code>，就以 Redis 7.2.4 的協定與行為運作，完全不知道背後是 Valkey；<code>valkey_version</code> 才是 Valkey 自己的版本，記錄它在 fork 之後加了什麼（例如 8.x 的多執行緒）。理解這條雙線——「對外裝成 Redis 7.2.4、對內持續演進」——是判斷相容性邊界的鑰匙。</p>
<p>對大規模生產驗證，<a href="/blog/backend/09-performance-capacity/cases/tinder-elasticache-valkey-matching/" data-link-title="9.C6 Tinder：ElastiCache for Valkey 撐 4700 萬月活的配對引擎" data-link-desc="Tinder 用 Amazon ElastiCache for Valkey 提供配對引擎所需的次毫秒延遲快取層">Tinder 的配對引擎</a>是現成的證據：4700 萬月活、每次滑動讀多個 cache、sub-millisecond 延遲，跑在 Amazon ElastiCache for Valkey 上——這個規模的服務跑在 Valkey 上，本身就是相容性的背書。另一個訊號是 AWS 在 2024 把 ElastiCache 的 default engine 從 Redis 改成 Valkey（AWS 宣稱成本較 Redis OSS 低約 20%、以 <a href="https://aws.amazon.com/elasticache/pricing/">ElastiCache 定價</a> 為準、最後檢查日 2026-06-16）。這些都是外部背書，但各服務有自己的 client library、module 與邊角用法，仍需自行驗證。</p>
<h2 id="核心概念相容性的三層邊界">核心概念：相容性的三層邊界</h2>
<p>「100% 相容」在不同層次有不同的精確度，驗證要分三層做。</p>
<p><strong>協定與核心指令層：完全相容</strong>。string / hash / list / set / sorted set / stream / hyperloglog / geo 的所有指令、TTL / eviction / persistence / pub-sub / transaction、RESP 協定——這層是 fork 自 Redis 7.2.4 的部分，行為一致。所有標準 Redis client library 透過 <code>redis_version</code> 協商，直接連、不改 code。</p>
<p><strong>檔案格式層：相容</strong>。RDB 與 AOF 的檔案格式跟 Redis 7.2.4 一致，可以直接把 Redis 的資料目錄拷給 Valkey 載入——這是 drop-in 遷移的基礎，不需要 dump / reload。</p>
<p><strong>生態與新功能層：要逐項確認</strong>。Redis 7.4+ 在 fork 之後新增的功能（Valkey 不一定跟進）、Redis Stack 的商業 module（RedisJSON / RedisSearch，Valkey 有自己的 valkey-search / valkey-bloom 但不是同一套）、偏 Redis Inc 的監控工具（RedisInsight 部分 vendor-specific 命令）——這層是相容性的真實風險所在，驗證要集中在這裡。</p>
<p>驗證的操作順序：先確認 client library 連得上且核心指令正常（第一層），再確認資料能載入（第二層），最後盤點你實際用到的 module 與 7.4+ 功能（第三層）。前兩層幾乎必過，工夫花在第三層。</p>
<h2 id="配置io-threads-多執行緒調校">配置：io-threads 多執行緒調校</h2>
<p>Valkey 跟 Redis 7.2.4 拉開的第一個實質技術差異是執行緒模型。Redis 的命令處理是單執行緒（I/O threads 只分擔 socket 讀寫，命令仍在主執行緒），Valkey 8.x 把更多 I/O 路徑非同步化，在多核機器上能讓單實例吞吐明顯高於 Redis——具體倍數依 workload 與核數而定，以 <a href="https://valkey.io/blog/">valkey.io 官方 benchmark</a> 為準，這裡不複述未經自己壓測的數字。</p>
<p>執行緒由 <code>io-threads</code> 控制，預設 1（單執行緒，跟 Redis 行為一致）：</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="ln">1</span><span class="cl"><span class="c1"># 確認目前執行緒數（預設 1）</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">valkey-cli CONFIG GET io-threads
</span></span><span class="line"><span class="ln">3</span><span class="cl"><span class="c1"># 1) &#34;io-threads&#34;</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl"><span class="c1"># 2) &#34;1&#34;</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">
</span></span><span class="line"><span class="ln">6</span><span class="cl"><span class="c1"># 調高 I/O 執行緒數（建議不超過機器實體核數、留核給其他進程）</span>
</span></span><span class="line"><span class="ln">7</span><span class="cl"><span class="c1"># redis.conf / valkey.conf:</span>
</span></span><span class="line"><span class="ln">8</span><span class="cl"><span class="c1">#   io-threads 4</span></span></span></code></pre></div><p>調校判讀：</p>
<ul>
<li><code>io-threads</code> 是啟動參數，多數版本需要重啟生效（不是所有 CONFIG SET 都能熱套），改 conf 後 rolling restart</li>
<li>設定值對齊機器核數但留 headroom，例如 8 核機器設 4-6，不要設滿</li>
<li>單核或低核機器設 1（預設）即可，多執行緒在核數不足時沒有收益反而增加切換開銷</li>
<li>I/O 密集（大量小命令、高連線數）的 workload 收益最明顯；CPU 密集的重命令（大 Lua、大 collection 操作）收益有限</li>
</ul>
<p>調完用實際 workload 壓測驗證，不要假設「開了就快」——執行緒配置的收益高度依賴 workload 形狀。</p>
<h2 id="production-故障演練">Production 故障演練</h2>
<h3 id="case-1切換後-module-指令報-unknown-command">Case 1：切換後 module 指令報 unknown command</h3>
<p><strong>徵兆</strong>：drop-in 換成 Valkey 後核心功能正常，但某些路徑報 <code>ERR unknown command 'JSON.SET'</code> 或 <code>FT.SEARCH</code>，application 部分功能失效。</p>
<p><strong>根因</strong>：用到了 Redis Stack 的商業 module（RedisJSON / RedisSearch）。這些 module 不在 fork 範圍內，Valkey 有自己的 valkey-search / valkey-bloom，但不是同一套指令、需要另外安裝。</p>
<p><strong>修法</strong>：</p>
<ol>
<li>切換前用 <code>MODULE LIST</code> 在原 Redis 上盤點所有載入的 module</li>
<li>逐個確認 Valkey 是否有對應替代（valkey-search 對 RedisSearch 等），確認指令相容度</li>
<li>沒有對應的 module，評估改用 module-free 設計（例如把 JSON 操作拉回 application 層）</li>
<li>重度依賴 Redis Stack 商業 module 的場景，相容性邊界在這裡，可能該留在 <a href="/blog/backend/02-cache-redis/vendors/redis/" data-link-title="Redis" data-link-desc="OSS in-memory data structure store、cache 主流">Redis</a> Inc 商業版</li>
</ol>
<h3 id="case-2client-library-太舊協商失敗">Case 2：client library 太舊、協商失敗</h3>
<p><strong>徵兆</strong>：絕大多數 client 正常，但某個老服務的 client library 連 Valkey 報協定錯誤或行為異常。</p>
<p><strong>根因</strong>：Valkey 回報 <code>redis_version:7.2.4</code>，client library 若太舊（不支援 Redis 7.2 對應的協定特性，例如 RESP3）會協商失敗。這不是 Valkey 的問題，是 client 本來就跟不上 Redis 7.2。</p>
<p><strong>修法</strong>：</p>
<ol>
<li><code>valkey-cli INFO server</code> 確認回報的 <code>redis_version</code>，對照 client library 支援到哪個 Redis 版本</li>
<li>升級過舊的 client library 到支援 Redis 7.2 的版本</li>
<li>必要時 client 端強制用 RESP2（多數 library 可配置），避開 RESP3 協商</li>
<li>這類問題在升級 Redis 7.2 時也會遇到，不是 Valkey 特有</li>
</ol>
<h3 id="case-3監控工具部分指標消失">Case 3：監控工具部分指標消失</h3>
<p><strong>徵兆</strong>：切換後 RedisInsight 或某監控 dashboard 部分面板空白、某些 vendor-specific 命令回錯。</p>
<p><strong>根因</strong>：RedisInsight 等 Redis Inc 工具有部分偏 Redis 商業版的命令，Valkey 不一定實作。核心指標（memory / hit rate / connections）通用，但 vendor-specific 的進階面板可能缺。</p>
<p><strong>修法</strong>：</p>
<ol>
<li>監控改用通用工具：<code>valkey-cli INFO</code>、Prometheus + redis_exporter（相容 Valkey）、Grafana</li>
<li>核心指標（<code>used_memory</code> / <code>keyspace_hits</code> / <code>connected_clients</code>）在 Valkey 完全相容，監控覆蓋不受影響</li>
<li>把監控的相容性納入切換前驗證清單，不要切換後才發現面板空白</li>
<li>對應 <a href="/blog/backend/02-cache-redis/vendors/redis/memory-eviction-tuning/" data-link-title="Redis 記憶體與淘汰調校：maxmemory-policy、LFU 與碎片化的實戰判讀" data-link-desc="Redis 的記憶體是一條會在半夜爆掉的曲線：maxmemory 設多少、policy 選 LRU 還 LFU、碎片化什麼時候開始吃掉 30% RAM、OOM 時 noeviction 怎麼讓寫入全部失敗。本文展開 Redis 記憶體會計模型、eviction policy 的選型判讀、5 個把記憶體配置寫成 production 事故的踩坑，以及單機記憶體撞牆後該往 cluster 還是 DragonflyDB 走的邊界">記憶體</a> 與 <a href="/blog/backend/02-cache-redis/vendors/redis/connection-pipeline-latency/" data-link-title="Redis 連線與 pipeline：RTT 稅、連線池與一次往返打包多命令" data-link-desc="Redis 單命令通常微秒級執行，但 application 端量到的延遲是毫秒級——差距全在網路往返（RTT）。pipelining 的本質不是『批次發命令』，是把 N 次 RTT 壓成 1 次。本文展開 RTT 會計、連線池配置、pipeline 與 MULTI 的差異、5 個把連線與往返寫成延遲與正確性問題的 production 踩坑，以及連線模型撞牆的邊界">連線</a> 調校用到的 INFO 指標，這些在 Valkey 都通用</li>
</ol>
<h3 id="case-4io-threads-開太多效能反而下降">Case 4：io-threads 開太多、效能反而下降</h3>
<p><strong>徵兆</strong>：把 <code>io-threads</code> 從 1 調到 16 想榨效能，結果延遲不降反升、CPU 使用率異常。</p>
<p><strong>根因</strong>：<code>io-threads</code> 設成超過機器實體核數，執行緒互搶 CPU、context switch 開銷超過平行收益。或 workload 是 CPU 密集（重命令），I/O 多執行緒對它沒幫助。</p>
<p><strong>修法</strong>：</p>
<ol>
<li><code>io-threads</code> 不超過實體核數，留 headroom 給 OS 與其他進程（8 核設 4-6）</li>
<li>用實際 workload 壓測對比不同 io-threads 值的延遲與吞吐，不要憑感覺調滿</li>
<li>CPU 密集 workload 收益有限，問題可能在命令本身太重（大 collection / 大 Lua），先優化命令</li>
<li>多執行緒解的是 I/O 平行度，不是單命令執行速度，分清楚瓶頸在哪</li>
</ol>
<h3 id="case-5以為換-valkey-就解決了-redis-的記憶體--fork-問題">Case 5：以為換 Valkey 就解決了 Redis 的記憶體 / fork 問題</h3>
<p><strong>徵兆</strong>：因為 Redis 的 fork 延遲尖峰或記憶體 OOM 而切到 Valkey，切完發現同樣的尖峰與 OOM 還在。</p>
<p><strong>根因</strong>：Valkey fork 自 Redis 7.2.4，繼承了 Redis 的記憶體模型、eviction 演算法、AOF/RDB fork 機制。這些行為在 Valkey 上完全一致——Valkey 的差異在執行緒與授權，不在記憶體與持久化架構。</p>
<p><strong>修法</strong>：</p>
<ol>
<li>記憶體 / 淘汰 / fork 的調校在 Valkey 上跟 Redis 完全一樣，直接套用 <a href="/blog/backend/02-cache-redis/vendors/redis/memory-eviction-tuning/" data-link-title="Redis 記憶體與淘汰調校：maxmemory-policy、LFU 與碎片化的實戰判讀" data-link-desc="Redis 的記憶體是一條會在半夜爆掉的曲線：maxmemory 設多少、policy 選 LRU 還 LFU、碎片化什麼時候開始吃掉 30% RAM、OOM 時 noeviction 怎麼讓寫入全部失敗。本文展開 Redis 記憶體會計模型、eviction policy 的選型判讀、5 個把記憶體配置寫成 production 事故的踩坑，以及單機記憶體撞牆後該往 cluster 還是 DragonflyDB 走的邊界">Redis 記憶體調校</a> 與 <a href="/blog/backend/02-cache-redis/vendors/redis/persistence-fork-latency/" data-link-title="Redis 持久化與 fork latency：AOF、RDB 與那一次卡住整個 cluster 的 fork" data-link-desc="Redis 的 RDB save 與 AOF rewrite 都靠一次 fork()，而 fork 在大記憶體實例上會凍結主執行緒數百毫秒、複製分頁讓記憶體逼近翻倍。本文展開 AOF / RDB 的機制與 fsync 取捨、copy-on-write 的記憶體放大、5 個把持久化寫成延遲尖峰與資料遺失的 production 踩坑，以及 cache 場景到底要不要持久化的邊界">persistence / fork latency</a></li>
<li>fork 尖峰是 Redis 系列的共同架構限制，要根治走 <a href="/blog/backend/02-cache-redis/vendors/dragonflydb/" data-link-title="DragonflyDB" data-link-desc="高效能 Redis / Memcached 相容替代、多核架構">DragonflyDB</a> 的 fork-less 機制，不是換 Valkey</li>
<li>切換 Valkey 的理由應該是授權合規、多執行緒吞吐或 managed 成本，不是記憶體問題</li>
<li>切換前釐清痛點：是授權 / 成本（Valkey 解）還是記憶體 / fork 架構（Valkey 不解）</li>
</ol>
<h2 id="capacity--cost-邊界">Capacity / cost 邊界</h2>
<p>Valkey 的容量判讀，多數沿用 Redis（同源），差異集中在執行緒與授權成本：</p>
<table>
  <thead>
      <tr>
          <th>維度</th>
          <th>Valkey 的情況</th>
          <th>判讀</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>核心指標（記憶體 / hit rate）</td>
          <td>跟 Redis 完全一致</td>
          <td>直接套用 Redis 的容量判讀</td>
      </tr>
      <tr>
          <td><code>io-threads</code></td>
          <td>預設 1、可調至接近核數</td>
          <td>多核 + I/O 密集才有收益、需壓測驗證</td>
      </tr>
      <tr>
          <td>單實例吞吐</td>
          <td>多執行緒下高於 Redis（依 workload）</td>
          <td>以 valkey.io benchmark 為準、自己壓測</td>
      </tr>
      <tr>
          <td>授權成本</td>
          <td>BSD 3-clause、商業使用無限制</td>
          <td>合規敏感場景的決定性優勢</td>
      </tr>
      <tr>
          <td>managed 成本</td>
          <td>ElastiCache for Valkey 約低 Redis 20%</td>
          <td>AWS 生態的成本優化路徑</td>
      </tr>
  </tbody>
</table>
<p>撞牆後的路由判斷：</p>
<ul>
<li><strong>記憶體 / fork 是瓶頸</strong>：Valkey 同源、不解這層，走 <a href="/blog/backend/02-cache-redis/vendors/dragonflydb/" data-link-title="DragonflyDB" data-link-desc="高效能 Redis / Memcached 相容替代、多核架構">DragonflyDB</a>（fork-less + 更省記憶體）或 Redis 系列的 <a href="/blog/backend/02-cache-redis/vendors/redis/cluster-resharding/" data-link-title="Redis Cluster Re-sharding：source = target，但 topology 重劃的 5 段流程" data-link-desc="Redis cluster re-sharding 是 5 type migration 漏類實證 — source / target 同 cluster、無 schema / paradigm 差、但 16384 slot 重分配是核心；本文涵蓋 4 種 re-sharding driver、slot migration 機制、redis-cli --cluster rebalance / reshard 工具、5 個 production 踩雷（cluster busy / replica lag / client cache stale / cross-slot transaction / monitor gap）">Cluster 分片</a>。</li>
<li><strong>需要 Redis Stack 商業 module</strong>：Valkey 的 valkey-search / valkey-bloom 覆蓋不到全部，重度依賴走 <a href="/blog/backend/02-cache-redis/vendors/redis/" data-link-title="Redis" data-link-desc="OSS in-memory data structure store、cache 主流">Redis</a> Inc 商業版。</li>
<li><strong>不想自管</strong>：<a href="/blog/backend/02-cache-redis/vendors/aws-elasticache/" data-link-title="AWS ElastiCache" data-link-desc="AWS managed Redis / Valkey / Memcached">ElastiCache for Valkey</a> 是 AWS 的 default engine，managed failover / snapshot / patching 全託管，成本比 ElastiCache for Redis 低約 20%。</li>
</ul>
<h2 id="整合--下一步">整合 / 下一步</h2>
<p>Valkey 的 deep article 大量複用 Redis 的調校知識（同源），它自己的獨特性在相容性驗證、執行緒與授權：</p>
<ul>
<li><strong>跟 <a href="/blog/backend/02-cache-redis/vendors/redis/" data-link-title="Redis" data-link-desc="OSS in-memory data structure store、cache 主流">Redis 全系列 deep article</a></strong>：記憶體、持久化、Sentinel、連線的調校在 Valkey 上完全一致，Valkey 不重寫這些，直接套用。</li>
<li><strong>跟 <a href="/blog/backend/02-cache-redis/vendors/aws-elasticache/" data-link-title="AWS ElastiCache" data-link-desc="AWS managed Redis / Valkey / Memcached">ElastiCache for Valkey</a></strong>：managed Valkey 把執行緒與 failover 託管，省掉自管的調校與演練。</li>
<li><strong>跟 <a href="/blog/backend/09-performance-capacity/cases/tinder-elasticache-valkey-matching/" data-link-title="9.C6 Tinder：ElastiCache for Valkey 撐 4700 萬月活的配對引擎" data-link-desc="Tinder 用 Amazon ElastiCache for Valkey 提供配對引擎所需的次毫秒延遲快取層">Tinder 的 ElastiCache for Valkey 案例</a></strong>：4700 萬月活的 sub-millisecond 配對引擎是相容性與規模化的生產證據，但 module / client 的相容性仍需逐案驗證。</li>
<li><strong>跟 <a href="/blog/backend/02-cache-redis/vendors/dragonflydb/" data-link-title="DragonflyDB" data-link-desc="高效能 Redis / Memcached 相容替代、多核架構">DragonflyDB</a></strong>：兩者都打「Redis 相容 + 更好的執行緒」，但 Valkey 是 fork（同源、最高相容），DragonflyDB 是 C++ 重寫（相容核心但架構不同），選型差異在相容度 vs 架構激進度。</li>
</ul>
<h2 id="相關連結">相關連結</h2>
<ul>
<li>上游 vendor 頁：<a href="/blog/backend/02-cache-redis/vendors/valkey/" data-link-title="Valkey" data-link-desc="Redis fork、Linux Foundation 託管、BSD 授權">Valkey</a></li>
<li>同源 deep article：<a href="/blog/backend/02-cache-redis/vendors/redis/memory-eviction-tuning/" data-link-title="Redis 記憶體與淘汰調校：maxmemory-policy、LFU 與碎片化的實戰判讀" data-link-desc="Redis 的記憶體是一條會在半夜爆掉的曲線：maxmemory 設多少、policy 選 LRU 還 LFU、碎片化什麼時候開始吃掉 30% RAM、OOM 時 noeviction 怎麼讓寫入全部失敗。本文展開 Redis 記憶體會計模型、eviction policy 的選型判讀、5 個把記憶體配置寫成 production 事故的踩坑，以及單機記憶體撞牆後該往 cluster 還是 DragonflyDB 走的邊界">Redis 記憶體與淘汰調校</a>、<a href="/blog/backend/02-cache-redis/vendors/redis/persistence-fork-latency/" data-link-title="Redis 持久化與 fork latency：AOF、RDB 與那一次卡住整個 cluster 的 fork" data-link-desc="Redis 的 RDB save 與 AOF rewrite 都靠一次 fork()，而 fork 在大記憶體實例上會凍結主執行緒數百毫秒、複製分頁讓記憶體逼近翻倍。本文展開 AOF / RDB 的機制與 fsync 取捨、copy-on-write 的記憶體放大、5 個把持久化寫成延遲尖峰與資料遺失的 production 踩坑，以及 cache 場景到底要不要持久化的邊界">persistence 與 fork latency</a></li>
<li>平行 vendor：<a href="/blog/backend/02-cache-redis/vendors/aws-elasticache/" data-link-title="AWS ElastiCache" data-link-desc="AWS managed Redis / Valkey / Memcached">AWS ElastiCache</a>（default engine 即 Valkey）、<a href="/blog/backend/02-cache-redis/vendors/dragonflydb/" data-link-title="DragonflyDB" data-link-desc="高效能 Redis / Memcached 相容替代、多核架構">DragonflyDB</a></li>
<li>Methodology：<a href="/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/" data-link-title="Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證" data-link-desc="vendor overview 飽和後要寫單一功能深度文章、需要選題與結構依據時回來。這套方法論的驗證來源與 cadence variant 在高風險場景（同 vendor sub-tool 系列）的實證。">Vendor 深度技術文章寫作方法論</a></li>
</ul>
]]></content:encoded></item></channel></rss>