ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Redis安装部署指南:Windows与Linux从零到生产级配置

Redis安装部署指南:Windows与Linux从零到生产级配置 1. 写在安装之前做后端开发的只要项目里用到缓存、session共享、排行榜或者消息队列Redis基本是绕不开的那一个。不管你用的是Spring Boot、Express还是GinRedis装不好后面写再多代码也跑不起来。这篇文章要解决的就是这个问题从零开始把Redis装到你的Windows电脑和Linux服务器上不走弯路不踩多余坑。先说几个需要提前知道的事实能帮你省下大把时间Windows版的Redis官方其实不直接提供我们用的是微软维护的移植版本和第三方社区稳定版。Linux版的Redis最省心的方式是源码编译安装因为很多Linux发行版的软件源里Redis版本偏旧有些甚至没有。安装完成后第一件事不是写代码是用redis-cli ping确认通没通再顺手做个开机自启不然服务器一重启Redis挂了线上马上出问题。这篇文章适合谁看刚接触Redis的小白、准备把Redis部署到服务器上的后端开发、还有被网上各种残缺教程坑过的人。内容分Windows和Linux两条线每一步都给了具体命令和截图级说明照着敲就能跑通。2. Windows下安装Redis2.1 选择合适的Windows版本先说一个很多人搞不清楚的地方Redis官网redis.io其实不提供Windows安装包。官方推荐的是用WSL2跑Linux版但对大多数人来说直接装一个原生的Windows版更省事尤其是本地开发调试的时候。目前在Windows上装Redis主流有三个选择方案说明适用场景Microsoft Archive版微软官方开源的Redis 3.x/5.x Windows移植版老项目兼容用了不推荐新项目tporadowski/redis社区维护的Windows移植版支持Redis 5.x/7.x性能稳定最推荐本地开发和测试首选MemuraiRedis API兼容的Windows原生服务商业/免费混合生产环境需要商业支持再考虑我本地用的是tporadowski的redis-7.0.x版本从GitHub Releases页面下载zip压缩包就行不用安装解压即用zip包大概10MB左右。别去下载那些来路不明的exe安装包很多捆绑了乱七八糟的东西。下载下来之后解压到你觉得合适的目录比如D:\Program Files\Redis里面会包含下面这些关键文件redis-server.exe # 服务端主程序 redis-cli.exe # 命令行客户端 redis.windows.conf # 配置文件默认配置 redis-benchmark.exe # 性能测试工具 redis-check-aof.exe # AOF文件修复工具 redis-check-rdb.exe # RDB快照文件检查工具2.2 三种方式启动Redis服务我把能用得上的启动方式都试了一遍各有利弊主要看你是临时用一下还是长期要用。先是最简单的临时启动方式双击redis-server.exe或者用命令行进到目录里执行redis-server.exe这种方式启动的Redis用的是默认配置端口6379无密码数据存到硬盘上的dump.rdb文件里。关掉命令窗口服务就停了数据会保存在当前目录的快照文件里下次启动还能恢复。适合你要快速调一下缓存逻辑不想被后台进程干扰的情况。第二种是指定配置文件启动redis-server.exe redis.windows.conf用哪个配置文件就执行对应命令Redis会按照配置里的端口、持久化策略、密码等参数启动。注意配置文件路径没写的话Redis会把该文件当成“不存在的配置”直接以默认参数启动经常有人栽在这里。录制路径建议写绝对路径比如redis-server.exe D:\Program Files\Redis\redis.windows.conf。第三种是最推荐的——注册成Windows服务开机自动启动redis-server.exe --service-install redis.windows.conf --service-name RedisService安装完服务后可以顺手把服务改成自动启动# 打开服务管理器找到RedisService改启动类型为“自动” # 或者用命令行操作 sc config RedisService start auto启动服务redis-server.exe --service-start --service-name RedisService这一模式我用得最多。跑一次注册之后Windows重启了Redis自己起根本不用操心。要卸载服务的时候执行redis-server.exe --service-uninstall --service-name RedisService这里有个小细节如果你之前的Redis进程已经被命令行方式占用6379端口启动服务的时候会报错先用redis-cli -p 6379 shutdown把原进程关掉再启服务。2.3 验证Redis是否正常工作无论你用了上面哪种方式启动验证安装是否成功的方式都一样。新开一个cmd窗口进入Redis目录执行redis-cli -p 6379 ping如果返回PONG说明Redis已经在正常运行了。这个ping是Redis自带的心跳命令能通就代表服务端在正常响应请求。再试几个基本命令确认读写没问题redis-cli set name 张三 get name keys *能看到name这个key的值是张三说明整个链路已经通了Windows这边的安装就算彻底完成。接下来可以放心地去Linux服务器上折腾了。3. Linux下安装Redis3.1 环境准备与依赖安装Linux下的Redis安装不同发行版有一些细微差别。当前主流的服务器系统就两大派系Debian系的Ubuntu、Debian本身和RedHat系的CentOS、Rocky Linux、AlmaLinux、Fedora我分别说一下。先确认系统版本登录服务器后执行cat /etc/os-release拿到系统信息后安装编译工具和底层依赖。Debian/Ubuntu系sudo apt update sudo apt install -y build-essential libjemalloc-dev libsystemd-dev tclRedHat/CentOS系sudo yum install -y gcc make openssl-devel systemd-devel注意如果用的是CentOS 8以上的版本系统默认的包管理器是dnf但yum命令仍然能用处理方式没有区别。依赖里的build-essential或gcc make是编译必需的编译器工具链。libjemalloc-dev是内存分配库Redis官方在生产环境下推荐用jemalloc而不是默认的libc malloc可以显著降低内存碎片。tcl是用来跑Redis自带测试套件的虽然不影响安装但如果后面想跑make test验证安装完整性没有会报错。3.2 源码下载与编译安装我强烈建议Redis在Linux上用源码编译安装原因就一个可控。官方源码编译出来的版本准确、无杂质还能按需求定制目录升级也好控制。相比用apt/yum直接装的旧版本源码装的最新稳定版在用Redis新特性的时候会少踩很多坑。先到官网选版本cd /usr/local/src wget https://download.redis.io/releases/redis-7.2.5.tar.gz建议到https://download.redis.io/releases/页面看一下最新稳定版的版本号能用新版本就用新版本。写这篇文章的时候7.2.5是稳定版8.0也已经发布了你可以根据实际需要选。解压并进入源码目录tar xzf redis-7.2.5.tar.gz cd redis-7.2.5编译make -j$(nproc)-j参数可以加速编译$(nproc)会自动获取CPU核心数多核机器的编译速度会快很多。这一步时间取决于机器性能轻量服务器大概1-3分钟。编译完成后立刻运行一下测试验证编译出来的Redis是否正常make test这个命令会跑几十上百个测试用例时间大概十几分钟。时间紧可以跳过但我建议至少跑一次尤其是为生产环境准备的时候能把很多潜在问题提前暴露出来。确认测试没有问题后安装到系统目录sudo make install执行完redis-server、redis-cli、redis-benchmark等可执行文件会被安装到/usr/local/bin/目录下。验证一下版本redis-server --version3.3 目录规划和服务配置二进制文件安装好了但Redis还需要一个像样的工作目录——数据文件、日志、配置文件都有地方放才方便后续维护。我习惯按下面的目录结构去部署sudo mkdir -p /etc/redis sudo mkdir -p /var/lib/redis sudo mkdir -p /var/log/redis sudo useradd --system --home-dir /var/lib/redis redis各目录用途/etc/redis存放配置文件redis.conf/var/lib/redis存放RDB快照文件和AOF日志文件属主必须是redis用户/var/log/redis存放Redis运行日志独立redis用户让Redis以非root身份运行降低安全风险源码包里的redis.conf是默认配置模板复制到配置目录下sudo cp /usr/local/src/redis-7.2.5/redis.conf /etc/redis/redis.conf sudo chown -R redis:redis /etc/redis /var/lib/redis /var/log/redis接下来修改配置用vim或者你习惯的编辑器打开/etc/redis/redis.conf重点调整几项bind 127.0.0.1 -::1 port 6379 daemonize yes pidfile /var/run/redis_6379.pid logfile /var/log/redis/redis.log dir /var/lib/redis requirepass your-strong-password每项的含义我解释一下bind只监听本机回环地址。如果是给本机应用用的保持这个默认安全;如果要远程访问改成你的内网IP或按需开放但必须搭配密码。port默认6379没特殊需求不用改。daemonize之前Windows那节我们还在手动管理进程到了Linux建议把所有服务交给systemd托管所以这里设置daemonize nosystemd自己管理前台进程。logfile日志文件路径排查问题的时候有日志比啥都强。dir持久化文件存放目录保证redis用户有写权限。requirepass生产环境必须设密码不然后果很严重。后面单独说安全。3.4 注册为systemd服务配置文件改好后把Redis交给systemd来管理这样能开机自启、崩溃自动重启、看日志都方便。创建一个systemd服务单元文件sudo vim /etc/systemd/system/redis.service写入以下内容[Unit] DescriptionRedis In-Memory Data Store Afternetwork.target [Service] Typesimple Userredis Groupredis ExecStart/usr/local/bin/redis-server /etc/redis/redis.conf ExecReload/bin/kill -USR2 $MAINPID ExecStop/bin/kill -TERM $MAINPID Restartalways RestartSec5 PrivateTmptrue NoNewPrivilegestrue MemoryDenyWriteExecutetrue ProtectSystemstrict ProtectHometrue ReadWritePaths/var/lib/redis /var/log/redis ProtectKernelTunablestrue ProtectControlGroupstrue RestrictRealtimetrue [Install] WantedBymulti-user.target注意到没有最新的加固参数我都加上了。MemoryDenyWriteExecute防止Redis进程动态生成可执行内存段ProtectSystemstrict让根目录只读ReadWritePaths只放开了Redis真正需要写的那两个目录。这些都是从安全事件里总结出来的教训配置上了安心很多。让systemd重新加载配置并启动服务sudo systemctl daemon-reload sudo systemctl start redis sudo systemctl enable redis检查运行状态sudo systemctl status redis如果状态是active (running)并且redis-cli ping返回PONG恭喜Redis已经在Linux上正式跑起来了。最后再设置一个开机自启的验证等系统重启后确认一下服务有没有自己起来sudo systemctl is-enabled redis输出enabled就说明开机自启已经生效。4. 可视化工具安装与使用4.1 RedisInsight命令行的redis-cli用熟了以后效率很高但要看复杂的key结构、监控内存、分析慢查询还是得有个图形界面。官方出的RedisInsight是目前我用下来最顺手的一个支持Windows、macOS、Linux三种平台免费而且功能一直在迭代。下载地址在Redis官网的“Redis Insight”页面。选对应平台安装包Windows下双击安装Linux下解压tar.gz包后运行即可。启动后界面会引导你添加Redis连接填写Host127.0.0.1远程服务器就填服务器IPPort6379Password你的Redis密码连上之后左侧能看到所有的db点进去能浏览key、看key的类型、查看过期时间还能直接执行命令。对排查线上问题特别有用的一点是RedisInsight有慢查询分析功能可以看到哪些命令拖慢了Redis。4.2 Another Redis Desktop Manager如果你嫌RedisInsight界面太“重”可以试试另一个开源工具Another Redis Desktop Manager就是一个纯粹轻量级的Redis管理工具Windows上特别推荐启动速度快连接配置和管理界面简单直接。GitHub搜qishibo/AnotherRedisDesktopManager下载release包就能用。它是Electron应用如果你的电脑内存吃紧而Redis数据又特别多打开大key的时候可能会卡不过整体稳定性和日常使用体验都够用。5. 常用配置与常见问题排查5.1 云服务器上安装Redis最容易被攻击的几个坑服务器上装Redis最容易出的问题不是装不上而是装完被人“搬库”。说出来你可能不信互联网上天天有人扫描6379端口只要发现无密码的Redis直接连上去写crontab反弹shell或者写入SSH公钥我见过太多次了。装好在云服务器上用的Redis下面三条守则必须记住必设密码requirepass参数一定要配置而且要设一个足够强度的密码。有人觉得“我服务器IP没人知道”这种想法太天真了扫描器是全网段扫的。禁止bind 0.0.0.0没有特殊需求bind 127.0.0.1就够了。如果真的需要远程连接限定内网IP或安全组白名单。禁用危险命令在配置文件里默认把CONFIG这几个危险命令改名或者禁用防止“连上之后改配置”。常见禁用配置写法rename-command CONFIG rename-command SHUTDOWN rename-command FLUSHALL rename-command FLUSHDB 5.2 连接不上时的排查思路如果你启动服务正常但客户端连不上别着急按照下面的顺序排查基本都能定位问题服务有没有监听正确端口ss -tnlp | grep 6379看进程有没有起来。没有就回去看配置文件有没有语法错误。防火墙是否放行Linux上检查firewalld和云服务商的安全组规则。很多新手在本地都能连上了云服务器就卡在这一步——安全组没开6379端口。配置文件中的bind和protected-mode如果bind设置的是127.0.0.1从别的机器连肯定连不上这是正常的。远程机器要连改bind成内网IP再重启服务。密码认证失败看Redis日志如果出现NOAUTH Authentication required说明需要密码客户端没带或者带错了。用redis-cli -a 密码重新连一次试试。5.3 性能问题的快速定位项目上线后Redis响应变慢怎么快速定位哪里的问题我的经验是这样先看服务器负载redis-cli --stat这个命令每秒输出一次当前连接数、内存占用、每秒命令数等信息能直观看到是不是命令量太大压垮了Redis。再看慢查询redis-cli slowlog get 10会列出最近10条执行时间超过阈值默认10毫秒的命令。看到明显有keys *这类全量扫描的那就是代码写法的问题——线上环境禁止使用keys *用scan代替。最后看内存redis-cli -a 密码 info memory重点看used_memory_peak和maxmemory的关系如果峰值一直贴着上限说明内存不够要么加内存要么给Redis淘汰策略配置调整一下。5.4 持久化配置的几个注意点Redis做缓存用持久化可以靠RDB快照;做数据库补充或消息队列用得考虑AOF的配置。最基本的几个参数不要乱调save 900 1 save 300 10 save 60 10000这是默认的RDB快照策略900秒内有1个key变化、300秒内有10个key变化、60秒内有1万个key变化就做一次快照。嫌快照太频繁导致磁盘压力大把时间拉长或者把阈值调高。开了AOF的话把这个参数设置成everysec是日常最优解appendfsync everysec每条命令都同步磁盘太慢每秒同步一次安全性也够用性能和可靠性都能兼顾。每次写dump.rdb或者AOF重写的时候Redis会fork子进程如果服务器内存本来就紧张fork可能触发内存交换直接把Redis拖到无法响应。这里就要保证服务器有足够的物理内存或者设置maxmemory让Redis有边界感。6. 我个人的实操总结如果你问我装Redis这件事上踩过最大的坑是什么我会说装完就当成功忽略了服务管理和安全配置。Windows下直接双击redis-server.exe的Linux下装完用redis-cli ping通了就觉得完事儿的等到服务器重启之后发现服务没起来、被人扫到端口入侵了才后悔没早做那十几分钟配置。所以我的建议从来都是——装Redis的步骤固然重要但装上之后那几步系统化和安全化的操作才是一个“能用”和“好用”的Redis的分水岭。最后再分享一个每天省时间的小技巧在命令行里给redis-cli配个别名带密码带端口用起来飞快。# Linux bashrc或zshrc里加一行 alias rcliredis-cli -a your-password -p 6379Windows下就写一个rcli.bat批处理放到PATH目录里echo off redis-cli -a your-password -p 6379 %*连客户端命令都配置好了这套装法从Windows到Linux从开发机到服务器一路跑下来基本不会再遇到与Redis安装运维相关的坑了。遇到问题别慌端口、配置、防火墙、日志按顺序查百分之八九十的问题都能在十分钟内定位。
返回列表