戰(zhàn):從選型到配置排錯(cuò)全指南)
剛在Windows 11上裝完Redis趁熱把整個(gè)過(guò)程梳理成一篇可以直接照做的實(shí)戰(zhàn)記錄。這篇文章對(duì)標(biāo)的是“在win11下把Redis跑起來(lái)”這條主線從選版本、解壓、注冊(cè)服務(wù)、改配置到可視化客戶端連庫(kù)、Java項(xiàng)目里踩過(guò)的連接坑一次說(shuō)清楚。1. 安裝前必須弄清的三件事1.1 Redis在Windows下的“官方缺位”問(wèn)題Redis官方其實(shí)是不提供Windows版本的。官網(wǎng)下載頁(yè)只掛Linux和macOS的包Windows用戶要裝Redis本質(zhì)上用的都是第三方移植版本。這個(gè)背景決定了你在網(wǎng)上搜“Redis下載”看到的教程五花八門(mén)版本也新舊不一搞不好就裝了個(gè)十來(lái)年前的3.x老古董。我先說(shuō)結(jié)論Windows下最省心、用的最多的版本是tporadowski維護(hù)的Redis 5.0.14.1移植版GitHub項(xiàng)目名叫做“redis-windows”。這個(gè)版本基于Redis 5.0.x官方源碼改造提供msi安裝包和zip壓縮包兩種形式在Windows 10、Windows 11上都跑得挺穩(wěn)日常開(kāi)發(fā)、本地緩存、分布式鎖測(cè)試、甚至小規(guī)模生產(chǎn)環(huán)境我都見(jiàn)過(guò)有人在用。為什么不是微軟維護(hù)的那個(gè)版本微軟確實(shí)在GitHub上維護(hù)過(guò)Redis 3.2.100的Windows分支但那個(gè)倉(cāng)庫(kù)已經(jīng)停止維護(hù)很久了。3.x的Redis缺少后續(xù)版本里新增的數(shù)據(jù)結(jié)構(gòu)、Lua腳本優(yōu)化、異步I/O能力在高并發(fā)場(chǎng)景下性能和穩(wěn)定性都有差距。既然有5.0.14.1這個(gè)維護(hù)得還算勤快的選擇就別去折騰老版本了。1.2 版本選型為什么是5.0.14.1而不是更新版本你可能會(huì)問(wèn)現(xiàn)在Linux上的Redis都出到7.x了為什么Windows這邊還在用5.0.x原因很直接Windows移植版的更新速度取決于有沒(méi)有人愿意持續(xù)做這個(gè)適配工作。tporadowski把版本停在了5.0.14.1再往后就沒(méi)有繼續(xù)更新了。但這并不意味著5.0不能用——實(shí)際上Redis 5.0引入了Stream數(shù)據(jù)結(jié)構(gòu)支持了新的集群管理工具對(duì)于絕大多數(shù)應(yīng)用場(chǎng)景來(lái)說(shuō)功能完全夠用。我的建議是如果只是本地開(kāi)發(fā)調(diào)試、項(xiàng)目里做緩存中間件5.0.14.1完全夠用別糾結(jié)版本號(hào)。如果確實(shí)需要更新的Redis特性比如7.0的Function功能、更精細(xì)的內(nèi)存管理參數(shù)那就走WSL2或者Docker Desktop跑Linux容器里的官方Redis這是后話了后面我會(huì)單獨(dú)聊這個(gè)選項(xiàng)。1.3 三種安裝方式對(duì)比怎么選才不后悔在Windows下跑Redis大概有三條路我一一說(shuō)下利弊。第一種綠色解壓版。下載zip包解壓到任意目錄雙擊redis-server.exe就跑了。這是最快的方式適合臨時(shí)要用、不想污染系統(tǒng)的場(chǎng)景。缺點(diǎn)是每次開(kāi)機(jī)都要手動(dòng)啟動(dòng)關(guān)掉窗口Redis就停了不持久。第二種注冊(cè)為Windows服務(wù)。用redis-server.exe的service命令把Redis裝成系統(tǒng)服務(wù)設(shè)為開(kāi)機(jī)自啟后臺(tái)運(yùn)行不占窗口。這是目前最推薦的方案日常開(kāi)發(fā)體驗(yàn)最好。裝完之后用net start redis、net stop redis來(lái)控制啟停管理起來(lái)非常順手。第三種Docker Desktop或WSL2里跑Linux容器。這本質(zhì)上不是“在Windows上裝Redis”而是在Windows上虛擬出一個(gè)Linux環(huán)境再在Linux里跑官方Redis。好處是版本新、和Linux生產(chǎn)環(huán)境一致壞處是Docker Desktop本身吃內(nèi)存WSL2的網(wǎng)絡(luò)和文件系統(tǒng)在部分機(jī)器上有性能損耗。我見(jiàn)過(guò)有人在win11上用Docker跑Redis主從集群思路沒(méi)問(wèn)題但如果只是想本地跑個(gè)Redis連一下沒(méi)必要上這么重的方案。綜合下來(lái)我的建議是先用綠色解壓版快速驗(yàn)證再把服務(wù)注冊(cè)進(jìn)去做長(zhǎng)期使用一套流程走下來(lái)也就十分鐘的事。2. 一步步完成Redis安裝win11實(shí)操記錄2.1 下載與解壓的正確姿勢(shì)先說(shuō)下載。去GitHub搜“redis-windows”在Release頁(yè)面找到Redis-x64-5.0.14.1.zip這個(gè)壓縮包下載下來(lái)。如果GitHub下載速度不理想也可以找國(guó)內(nèi)的技術(shù)社區(qū)鏡像或者網(wǎng)盤(pán)資源但下載完記得校驗(yàn)一下文件哈希防一手篡改。解壓的時(shí)候有個(gè)細(xì)節(jié)要注意不要解壓到C:\Program Files這類帶空格的路徑下也不要放在系統(tǒng)保護(hù)的目錄里。Redis的配置文件和運(yùn)行日志需要寫(xiě)權(quán)限裝在Program Files下后面容易遇到各種權(quán)限問(wèn)題。我給的建議是解壓到D:\Redis或者C:\Redis這種純英文、無(wú)空格的路徑下。解壓完成后你會(huì)看到這樣一個(gè)目錄結(jié)構(gòu)Redis/ ├── redis-server.exe 服務(wù)端主程序 ├── redis-cli.exe 命令行客戶端 ├── redis-check-aof.exe AOF文件修復(fù)工具 ├── redis-check-rdb.exe RDB文件修復(fù)工具 ├── redis-benchmark.exe 性能壓測(cè)工具 ├── redis.windows.conf 默認(rèn)配置文件注意是windows專用 ├── redis.windows-service.conf 服務(wù)模式專用配置 └── sentinel.conf 哨兵配置模板這里我要專門(mén)提一下配置文件的區(qū)別。壓縮包里自帶兩個(gè)conf文件redis.windows.conf和redis.windows-service.conf。你運(yùn)行redis-server.exe不帶任何參數(shù)時(shí)用的是內(nèi)置默認(rèn)配置和這兩個(gè)文件都沒(méi)關(guān)系如果你雙擊redis-server.exe它其實(shí)是不加載任何配置文件的。想要讓Redis按你的配置來(lái)跑得手動(dòng)指定配置文件路徑這個(gè)坑很多人第一次都會(huì)踩。2.2 注冊(cè)為Windows服務(wù)實(shí)現(xiàn)開(kāi)機(jī)自啟把Redis裝成服務(wù)是體驗(yàn)最好的一種方式干凈利落。用管理員身份打開(kāi)PowerShell或命令提示符win11下按Win鍵輸入powershell右鍵選擇“以管理員身份運(yùn)行”cd到Redis目錄執(zhí)行redis-server.exe --service-install redis.windows-service.conf --service-name Redis --loglevel verbose這個(gè)命令的關(guān)鍵參數(shù)我拆開(kāi)解釋一下--service-install通知redis-server以服務(wù)安裝模式運(yùn)行而不是正常啟動(dòng)。redis.windows-service.conf指定服務(wù)模式下的配置文件。為什么不用redis.windows.conf因?yàn)榉?wù)版配置里默認(rèn)把daemonize no和logfile做了調(diào)整更適合后臺(tái)運(yùn)行。--service-name Redis給這個(gè)服務(wù)取名字叫Redis還是Redis5隨你只要不沖突就行。--loglevel verbose日志級(jí)別調(diào)試期用verbose能看到更多信息跑穩(wěn)定后可以改回notice。執(zhí)行完如果輸出Redis successfully installed as a service.就說(shuō)明裝好了。接下來(lái)啟動(dòng)它redis-server.exe --service-start --service-name Redis也可以用Windows服務(wù)管理器來(lái)啟停WinR輸入services.msc找到名為Redis的服務(wù)右鍵啟動(dòng)。設(shè)成開(kāi)機(jī)自啟也很簡(jiǎn)單右鍵該服務(wù)屬性啟動(dòng)類型改成“自動(dòng)”。如果不想開(kāi)機(jī)自啟保持“手動(dòng)”就行需要用的時(shí)候再啟動(dòng)。2.3 配置環(huán)境變量讓redis-cli命令全局可用服務(wù)跑起來(lái)之后還有個(gè)提升體驗(yàn)的小操作——把Redis目錄加入系統(tǒng)PATH環(huán)境變量。這樣你在任意目錄的終端里都能直接敲redis-cli不用每次cd到Redis目錄。步驟很簡(jiǎn)單Win鍵搜索“編輯系統(tǒng)環(huán)境變量”打開(kāi)系統(tǒng)屬性的高級(jí)選項(xiàng)卡。點(diǎn)擊“環(huán)境變量”在下半部分的“系統(tǒng)變量”里找到Path雙擊打開(kāi)編輯。新建一行填上你的Redis解壓路徑比如D:\Redis。確定保存重新打開(kāi)一個(gè)終端窗口敲redis-cli ping如果返回PONG就說(shuō)明環(huán)境變量生效了。這里有個(gè)小細(xì)節(jié)修改環(huán)境變量后已經(jīng)打開(kāi)的終端窗口不會(huì)立即生效需要重新開(kāi)一個(gè)窗口才行。別在那里白等半天以為沒(méi)配好。2.4 啟動(dòng)、停止與自檢命令速查服務(wù)裝完之后日常控制Redis只需要記這幾個(gè)命令操作命令啟動(dòng)服務(wù)net start Redis 或 redis-server.exe --service-start --service-name Redis停止服務(wù)net stop Redis 或 redis-server.exe --service-stop --service-name Redis查看狀態(tài)sc query Redis連接自檢redis-cli ping卸載服務(wù)redis-server.exe --service-uninstall --service-name Redis自檢的時(shí)候redis-cli ping返回PONG就說(shuō)明服務(wù)端正常。如果你想驗(yàn)證Redis確實(shí)在工作可以玩一下最簡(jiǎn)單的寫(xiě)讀redis-cli 127.0.0.1:6379 set hello world OK 127.0.0.1:6379 get hello world能返回這些說(shuō)明整個(gè)安裝鏈路已經(jīng)通了。3. 必改的三組配置redis.windows-service.conf詳解Redis裝好只是第一步真正決定它能不能穩(wěn)定融入你開(kāi)發(fā)環(huán)境的是配置文件。我用的還是服務(wù)模式自帶的redis.windows-service.conf用記事本或VS Code打開(kāi)重點(diǎn)改以下幾處。3.1 保護(hù)模式、綁定地址與密碼Redis默認(rèn)配置里有三個(gè)安全相關(guān)參數(shù)protected-mode yes、bind 127.0.0.1、requirepass初始值為空。這三者的組合決定了誰(shuí)能訪問(wèn)你的Redis。protected-mode是Redis的保護(hù)機(jī)制。當(dāng)它開(kāi)啟時(shí)如果你沒(méi)有顯式設(shè)置bind或者密碼Redis會(huì)拒絕來(lái)自非本機(jī)的連接請(qǐng)求。這個(gè)設(shè)計(jì)本意是安全的但很多人不小心在配置里改了bind、忘了設(shè)置密碼結(jié)果Redis直接裸奔在局域網(wǎng)里被掃描工具命中后就是被挖礦、被清空數(shù)據(jù)的下場(chǎng)。我的建議是保持三件套protected-mode yes bind 127.0.0.1 requirepass yourownpasswordbind把監(jiān)聽(tīng)地址限制在本機(jī)外面根本連不上你的6379端口requirepass給Redis加訪問(wèn)密碼即使本機(jī)其他用戶想連也需要憑證。本地開(kāi)發(fā)場(chǎng)景這個(gè)配置已經(jīng)是銅墻鐵壁了。改完密碼之后redis-cli連接也需要帶上密碼才能執(zhí)行命令redis-cli -a yourownpassword注意在命令行直接帶密碼會(huì)留下歷史記錄痕跡所以我更推薦連上之后用AUTH命令127.0.0.1:6379 AUTH yourownpassword OK 127.0.0.1:6379 CONFIG GET requirepass3.2 持久化策略RDB與AOF的取舍Redis是內(nèi)存數(shù)據(jù)庫(kù)數(shù)據(jù)默認(rèn)放在內(nèi)存里如果進(jìn)程退出內(nèi)存里的數(shù)據(jù)就沒(méi)了。要防止數(shù)據(jù)丟失就得靠持久化。Redis提供兩種持久化機(jī)制RDB快照按時(shí)間間隔把內(nèi)存中的數(shù)據(jù)集快照寫(xiě)入磁盤(pán)。優(yōu)點(diǎn)是文件緊湊、恢復(fù)速度快缺點(diǎn)是如果Redis異常退出最后一次快照之后寫(xiě)入的數(shù)據(jù)會(huì)丟失。默認(rèn)配置里Redis會(huì)在滿足一定寫(xiě)入條件時(shí)自動(dòng)生成RDB文件。AOF追加日志把每次寫(xiě)操作以日志形式追加到文件里。優(yōu)點(diǎn)是數(shù)據(jù)安全性高最多丟失一兩秒的數(shù)據(jù)缺點(diǎn)是文件體積越來(lái)越大恢復(fù)速度比RDB慢。關(guān)鍵信息在這里Windows移植版雖然支持RDB持久化但對(duì)AOF的支持是受限的AOF重寫(xiě)B(tài)GREWRITEAOF功能在Windows下經(jīng)常出問(wèn)題。我查過(guò)相關(guān)issue也實(shí)際試過(guò)在Windows 5.0.14.1上開(kāi)啟AOF后重寫(xiě)時(shí)容易阻塞甚至報(bào)錯(cuò)。所以我的建議是Windows下做開(kāi)發(fā)調(diào)試用默認(rèn)的RDB就夠了如果對(duì)數(shù)據(jù)安全有較高要求的場(chǎng)景優(yōu)先考慮把Redis放到Linux環(huán)境WSL2或Docker里跑別在Windows版上糾結(jié)AOF。這不是Windows版有多差而是移植版本身就沒(méi)把AOF這條鏈路做完整。唯二要確認(rèn)的參數(shù)是快照觸發(fā)條件和快照文件保存路徑save 900 1 save 300 10 save 60 10000 dir ./這三行save的含義很好理解900秒內(nèi)如果至少有1個(gè)key發(fā)生變化就做一次快照300秒內(nèi)有10個(gè)key變化做一次60秒內(nèi)有10000個(gè)key變化做一次。實(shí)際開(kāi)發(fā)中如果你只是做緩存Redis數(shù)據(jù)丟了可以從數(shù)據(jù)庫(kù)重建那甚至可以關(guān)掉持久化把三行save全部注釋掉換取更高的寫(xiě)入性能。3.3 內(nèi)存上限與淘汰策略這個(gè)配置在Windows下尤其值得注意。Redis安裝在Windows上時(shí)默認(rèn)情況下會(huì)使用系統(tǒng)的物理內(nèi)存上限作為可分配內(nèi)存但Windows對(duì)內(nèi)存的分配方式和Linux有差異極端情況下Redis可能占用過(guò)多內(nèi)存把系統(tǒng)拖垮。所以明確設(shè)置maxmemory非常重要maxmemory 512mb maxmemory-policy allkeys-lru512mb是給本地開(kāi)發(fā)環(huán)境定的合理上限你可以根據(jù)機(jī)器配置調(diào)整。maxmemory-policy設(shè)置的是內(nèi)存達(dá)到上限后的淘汰策略allkeys-lru表示在所有key中按最近最少使用LRU算法淘汰。如果跑的是緩存場(chǎng)景這個(gè)策略最合適如果某個(gè)key設(shè)置了過(guò)期時(shí)間、希望優(yōu)先淘汰快過(guò)期的數(shù)據(jù)可以改成volatile-lru。這里有個(gè)Windows版特有的坑在舊版本比如3.x的Windows移植版上當(dāng)內(nèi)存超過(guò)maxmemory并且沒(méi)有配置淘汰策略時(shí)Redis可能會(huì)直接退出而不是拒絕寫(xiě)入。5.0.14.1版本要好一些但為了保險(xiǎn)起見(jiàn)我還是建議把maxmemory和maxmemory-policy都顯式配上別依賴默認(rèn)行為。4. 可視化連接與開(kāi)發(fā)實(shí)戰(zhàn)4.1 用Redis Desktop ManagerRDM連接Redis命令行操作對(duì)新手不算友好特別是看key里的數(shù)據(jù)、查看過(guò)期時(shí)間、觀察內(nèi)存占用這些操作有圖形界面能省很多事。Windows下最主流的Redis可視化客戶端是Redis Desktop ManagerRDM它的新版改叫Redis Insight但社區(qū)里很多人還在用舊版RDM。安裝RDM之后新建連接填入以下信息字段填寫(xiě)內(nèi)容Host127.0.0.1Port6379Password你在requirepass里設(shè)置的密碼Connection Name隨便起比如local-redis如果本機(jī)就跑著Redis服務(wù)Host必須填127.0.0.1千萬(wàn)別填localhost走了IPv6那邊部分版本解析會(huì)有問(wèn)題。連接成功后你能在左側(cè)樹(shù)狀列表里看到所有key點(diǎn)擊任意key就能查看value內(nèi)容和TTL過(guò)期時(shí)間。RDM還支持命令行面板等于把redis-cli搬進(jìn)了圖形界面調(diào)試的時(shí)候不用來(lái)回切窗口。4.2 Spring Boot / Lettuce 連接時(shí)的經(jīng)典報(bào)錯(cuò)開(kāi)發(fā)Java項(xiàng)目時(shí)Spring Boot用的是Lettuce這個(gè)Redis客戶端庫(kù)。最常見(jiàn)的報(bào)錯(cuò)就是熱搜詞里那條Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException。這個(gè)報(bào)錯(cuò)翻譯成大白話就是Lettuce發(fā)給Redis的命令在指定時(shí)間內(nèi)沒(méi)有收到響應(yīng)客戶端等不及主動(dòng)放棄了。但注意命令超時(shí)不代表命令沒(méi)被執(zhí)行。Redis收到命令后會(huì)繼續(xù)執(zhí)行只是響應(yīng)回傳慢了這是Lettuce設(shè)計(jì)上最坑的地方——超時(shí)后客戶端不知道命令到底執(zhí)行了沒(méi)有導(dǎo)致重復(fù)執(zhí)行可能產(chǎn)生重復(fù)數(shù)據(jù)。根據(jù)我的排查經(jīng)驗(yàn)出現(xiàn)這個(gè)報(bào)錯(cuò)通常有三個(gè)原因按概率從高到低排第一Redis連接的數(shù)據(jù)庫(kù)數(shù)量過(guò)多或Key過(guò)多阻塞了主線程。Redis是單線程模型一條阻塞命令比如KEYS user_*可能會(huì)卡住所有后續(xù)命令。Lettuce等不及就超時(shí)了。解決辦法是給Spring Boot配置加長(zhǎng)超時(shí)時(shí)間spring.redis.timeout: 5000ms并在業(yè)務(wù)代碼里避免使用KEYS命令用SCAN代替。第二Windows防火墻或殺毒軟件攔截了6379端口的通信。win11的防火墻默認(rèn)對(duì)入站連接有嚴(yán)格規(guī)則。如果你是從宿主機(jī)連接虛擬機(jī)里的Redis或者Docker端口映射沒(méi)配好都會(huì)導(dǎo)致連接建立成功但數(shù)據(jù)傳輸超時(shí)。這一步可以通過(guò)在Windows安全中心里給6379端口加一條入站放行規(guī)則解決也可以暫時(shí)關(guān)掉安全軟件測(cè)試。第三Redis所在機(jī)器的CPU被占滿。Windows上跑Redis特別是還有別的重量級(jí)應(yīng)用同時(shí)運(yùn)行Redis線程被調(diào)度延遲會(huì)很明顯。打開(kāi)任務(wù)管理器看看CPU使用率如果一直在90%以上大概率是啟動(dòng)方式太“佛系”了把配置里的maxmemory調(diào)小一點(diǎn)或者給Redis單獨(dú)留出足夠的內(nèi)存。4.3 常用命令與數(shù)據(jù)類型速查Redis能混到今天這個(gè)地位和它的數(shù)據(jù)結(jié)構(gòu)豐富程度關(guān)系很大。下面這幾類命令值得記下面試題里出現(xiàn)頻率也高String字符串最基礎(chǔ)的KV結(jié)構(gòu)。SET user:1:name zhangsan、GET user:1:name、INCR pageview。內(nèi)部存儲(chǔ)可以是字符串、整數(shù)、浮點(diǎn)數(shù)。Hash哈希適合存對(duì)象。HSET user:1 name zhangsan age 18、HGETALL user:1。比序列化成JSON字符串存String更方便可以單獨(dú)修改某個(gè)字段。List列表底層是雙向鏈表。LPUSH queue task1、RPOP queue。最經(jīng)典的應(yīng)用是做消息隊(duì)列生產(chǎn)者LPUSH、消費(fèi)者RPOP配合BRPOP還能實(shí)現(xiàn)阻塞消費(fèi)。Set集合自動(dòng)去重。SADD tags:article:1 redis、SISMEMBER tags:article:1 redis。微博的共同好友、標(biāo)簽系統(tǒng)靠集合的交并集運(yùn)算很輕松。ZSet有序集合帶分?jǐn)?shù)的集合。ZADD leaderboard 100 user1、ZREVRANGE leaderboard 0 9 WITHSCORES。排行榜場(chǎng)景的第一選擇。還有一個(gè)必會(huì)的命令是TTL查看key的剩余過(guò)期時(shí)間。設(shè)置過(guò)期時(shí)間用EXPIRE key seconds。做緩存時(shí)給每個(gè)key設(shè)置合理的TTL既能保證數(shù)據(jù)新鮮度也能降低內(nèi)存淘汰壓力這是最日常的運(yùn)維基本功。5. 安裝與使用中踩過(guò)的坑排錯(cuò)實(shí)錄5.1 服務(wù)安裝失敗權(quán)限與殺毒軟件在win11上執(zhí)行redis-server.exe --service-install最常見(jiàn)的一種報(bào)錯(cuò)是拒絕訪問(wèn)或者服務(wù)名已存在。我遇到過(guò)的一種情況是之前裝過(guò)老版本Redis服務(wù)沒(méi)卸載干凈再裝新版本時(shí)Redis這個(gè)名字已經(jīng)被占用了。解決辦法是先卸載redis-server.exe --service-uninstall然后重新安裝服務(wù)如果還是提示服務(wù)存在就去services.msc里找到殘留的Redis服務(wù)手動(dòng)刪除。還有一次是360或Windows Defender攔截了redis-server.exe。這類安全軟件會(huì)把Redis注冊(cè)服務(wù)的行為誤判為惡意操作彈窗讓你“允許”或“拒絕”。解決辦法是解壓前先把Redis目錄加入安全軟件的白名單或者安裝時(shí)臨時(shí)退出相關(guān)軟件裝好服務(wù)再恢復(fù)。我自己驗(yàn)證過(guò)確實(shí)是因?yàn)檫@個(gè)原因?qū)е路?wù)裝不上去。5.2 啟動(dòng)后立即退出窗口一閃就沒(méi)了雙擊redis-server.exe窗口彈出來(lái)一瞬就消失這是Windows用戶最常見(jiàn)的問(wèn)題。原因通常是配置文件里有語(yǔ)法錯(cuò)誤、端口被占用、或者工作目錄不對(duì)。排查方法是不要雙擊在終端里手動(dòng)啟動(dòng)redis-server.exe redis.windows.conf這樣錯(cuò)誤信息會(huì)直接打在終端里不會(huì)一閃而過(guò)。最常見(jiàn)的兩種報(bào)錯(cuò)Cant open the log file: No such file or directory配置里logfile指定的路徑不存在去配置里改一下。Could not create server TCP listening socket *:6379: bind: Address already in use端口被占用。用netstat -ano | findstr 6379查看占用進(jìn)程然后殺掉它或改Redis端口。還有一個(gè)容易被忽略的問(wèn)題redis-server.exe啟動(dòng)時(shí)它會(huì)嘗試讀取同目錄下的配置文件如果你把它復(fù)制到了別的目錄卻沒(méi)有把配置文件一起復(fù)制它會(huì)提示找不到配置文件。所以解壓之后盡量保持文件完整別只復(fù)制exe出來(lái)。5.3 連接被拒絕檢查三處再重啟服務(wù)redis-cli ping返回Could not connect to Redis at 127.0.0.1:6379: No connection could be made這個(gè)報(bào)錯(cuò)遇到的人特別多。按以下順序排查Redis服務(wù)有沒(méi)有啟動(dòng)。net start Redis或sc query Redis看下?tīng)顟B(tài)大概率是忘了啟動(dòng)。端口有沒(méi)有被監(jiān)聽(tīng)。netstat -ano | findstr 6379如果有進(jìn)程監(jiān)聽(tīng)但連不上可能是但bind配置有問(wèn)題。配置文件的保護(hù)模式有沒(méi)有擋住你。如果Redis版本支持但你在redis.windows.conf里改了bind為0.0.0.0且沒(méi)設(shè)置密碼protected-mode會(huì)自動(dòng)開(kāi)啟保護(hù)拒絕非本機(jī)連接。所以要么保持bind 127.0.0.1要么設(shè)置requirepass。改完配置文件后記得重啟Redis服務(wù)才能生效net stop Redis net start Redis對(duì)Windows服務(wù)來(lái)說(shuō)不會(huì)自動(dòng)熱加載配置文件你必須重啟進(jìn)程才能讓改動(dòng)生效。5.4 內(nèi)存占用飆升與虛擬內(nèi)存的聯(lián)動(dòng)問(wèn)題win11裝Redis的人還經(jīng)常搜“win11虛擬內(nèi)存設(shè)置多少合適”這和Redis的關(guān)系在于Redis進(jìn)程占用的物理內(nèi)存達(dá)到一定規(guī)模后Windows會(huì)把它的一部分換到虛擬內(nèi)存頁(yè)面文件里。如果你的虛擬內(nèi)存設(shè)置過(guò)小Redis在寫(xiě)入大量數(shù)據(jù)時(shí)可能出現(xiàn)Out of memory報(bào)錯(cuò)。我的經(jīng)驗(yàn)是給Redis分配maxmemory時(shí)要小于或等于物理內(nèi)存的一半同時(shí)保證Win11的系統(tǒng)虛擬內(nèi)存至少是物理內(nèi)存的1.5倍。游戲本16GB物理內(nèi)存頁(yè)面文件設(shè)置成至少24GB比較穩(wěn)妥。當(dāng)然這和個(gè)人工作負(fù)載有關(guān)但這條經(jīng)驗(yàn)實(shí)測(cè)下來(lái)能避免很多莫名其妙的內(nèi)存不足問(wèn)題。5.5 Redis命令阻塞分析與長(zhǎng)耗時(shí)命令排查當(dāng)項(xiàng)目緩存復(fù)雜了以后概率會(huì)遇到Redis突然響應(yīng)變慢的情況。Windows版Redis沒(méi)有Linux下那么完善的慢查詢?nèi)罩緳C(jī)制但基本思路是相通的。如果你發(fā)現(xiàn)眾多業(yè)務(wù)都在等待Redis響應(yīng)優(yōu)先排查有沒(méi)有人在終端或代碼里跑KEYS *這個(gè)命令會(huì)遍歷全部key在key數(shù)量大的時(shí)候阻塞毫秒甚至秒級(jí)。有沒(méi)有超大value比如有人把一份幾十MB的數(shù)據(jù)塞進(jìn)一個(gè)String里。有沒(méi)有在主線程里執(zhí)行耗時(shí)操作比如SORT、LREM、ZRANGEBYSCORE帶大量返回值。解決思路是分拆大key、使用SCAN代替KEYS、把耗時(shí)操作放到業(yè)務(wù)線程池異步處理。Redis本身不弱weak的是使用方式。結(jié)尾安裝Redis這件事難點(diǎn)不在“下一步、下一步”而在于你選的版本和運(yùn)行方式到底適不適合自己當(dāng)前的場(chǎng)景。我自己在win11下前后重裝過(guò)好幾次試過(guò)官方源碼本地編譯放棄依賴缺失太多、試過(guò)Docker跑容器好用但太重、也試過(guò)微軟老掉的3.2能跑但不推薦最后沉淀下來(lái)最順手的還是這套5.0.14.1綠色解壓版配合服務(wù)注冊(cè)的組合。把配置文件里那幾個(gè)關(guān)鍵參數(shù)一次調(diào)對(duì)后面基本不用再管它。最后分享一個(gè)小技巧如果只是寫(xiě)代碼時(shí)臨時(shí)要用不想注冊(cè)服務(wù)、不想改環(huán)境變量直接把redis-server.exe和redis-cli.exe兩個(gè)文件復(fù)制到你的項(xiàng)目工具目錄下要用的時(shí)候雙擊服務(wù)端再用redis-cli連接用完關(guān)掉即可。這個(gè)“隨項(xiàng)目走”的方式不污染系統(tǒng)也方便帶到別的機(jī)器上使用。裝上Redis只是第一步后續(xù)怎么用好它的數(shù)據(jù)類型、事務(wù)、分布式鎖才是真正拉開(kāi)差距的地方。