ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

在Ubuntu 22.04上安装Redis:从apt到源码编译的完整TaoToken实践

在Ubuntu 22.04上安装Redis:从apt到源码编译的完整TaoToken实践 1. Ubuntu 22.04 装 Redis 到底选 apt 还是源码编译Redis 是一个内存型键值数据库常被拿来做缓存、会话存储、消息队列和排行榜。它把数据放在内存里读写速度比磁盘数据库快几个数量级所以很多后端项目第一件事就是先把它跑起来。如果你刚接触 Linux 服务部署手上是一台 Ubuntu 22.04 的机器那 Redis 的安装其实有两条路一条是apt直接装一条是下载源码自己编译。这两条路没有绝对的好坏只有适不适合你当下的场景。apt这条路的好处是快。Ubuntu 官方仓库里就有redis-server包一条命令装完systemd 服务、配置文件、日志目录全都给你安排好了开机自启也是默认开的。你几乎不用关心编译依赖装完就能redis-cli连上去。缺点是版本偏旧Ubuntu 22.04 仓库里一般是 Redis 6.0.x如果你要用 Redis 7 的新特性比如 Function、Sharded Pub/Sub那 apt 就给不了你。源码编译这条路的好处是版本自由。你想装 7.2、7.4 甚至某个特定 commit 都行编译参数也能自己调比如开启 TLS、指定安装路径、裁剪模块。代价是你得自己处理依赖、自己写 systemd 单元文件、自己建配置目录和日志目录。对刚上手的人来说这一步容易在make报错或者服务起不来的时候卡住。我这次把两条路都走一遍并且把每一步的命令、配置、验证动作都写清楚。你不需要两条都做选一条跟着走就行。如果你只是想快速有个 Redis 用直接看第 3 节的 apt 方案如果你明确需要新版本或者自定义编译选项跳到第 4 节看源码编译。中间第 2 节会讲一个容易被忽略的前置动作把模型调用和 Redis 部署的密钥管理分开避免后面配置混乱。先说你会在哪些地方用到 Redis这样你更清楚自己该选哪条路。做 Web 后端Redis 通常当缓存放在应用和 MySQL 之间热点数据先查 Redis没有再查库。做分布式系统Redis 可以当分布式锁用SET key value NX PX 30000这种原子操作。做实时功能Redis 的 Pub/Sub 和 Stream 能做轻量消息通道。做限流用INCR加过期时间就能实现计数器。这些场景对版本的要求不一样缓存和锁6.0 完全够用Stream 和 Function建议 7.x。还有一个现实问题很多教程只告诉你apt install redis-server但没告诉你装完之后默认只监听127.0.0.1外网连不上也没告诉你默认没有密码暴露到公网就是灾难。所以安装只是第一步配置和验证才是真正让服务可用的环节。下面我会把这两块都补齐。2. TaoToken 前置把密钥和模型调用先理顺在动手装 Redis 之前我想先花一点篇幅讲一个经常被忽略的前置动作。你在部署服务的过程中大概率会同时用到模型 API 来做一些辅助工作比如让模型帮你生成 Redis 配置、解释报错日志、写 systemd 单元文件。这时候如果密钥管理是乱的后面排查问题会很痛苦。TaoToken 在这里的角色是统一管理模型调用的入口把 Base URL、API Key、Model ID 这三样东西集中配置而不是散落在各个脚本里。你可以先到官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 了解一下它支持的能力然后到 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 生成一个 Key。这个 Key 后面会用在你的模型调用配置里。注意API 的基础地址是 https://taotoken.net/api 这个地址不带任何查询参数配置的时候直接填这个。为什么要在装 Redis 之前做这件事因为你在编译 Redis 或者调 systemd 的时候遇到报错第一反应可能是去搜但更高效的方式是把报错贴给模型让它结合你的环境给出排查方向。比如make报jemalloc相关错误或者 systemd 报status203/EXEC这些都有固定套路。你有一个稳定的模型调用入口排查效率会高很多。具体配置的时候如果你用的是 Claude Code 这类编码工具需要填三件套Base URL 填https://taotoken.net/apiAPI Key 填你刚生成的Model ID 按你需要的模型填。如果你用的是 Cline 或者别的支持 MCP 的工具配置方式类似核心就是这三个字段。Codex 的话配置写在auth.json里同样是 Base URL、Key、Model ID 三件套。这里我不展开每个工具的完整配置你按自己用的工具对应填就行。有一点要提醒不要把 API Key 直接写进 Redis 的配置文件或者提交到 Git 仓库。Redis 的配置文件是明文而且经常被复制来复制去。正确的做法是把 Key 放在环境变量或者独立的密钥管理文件里Redis 配置只引用变量。这个习惯在你后面做多机部署的时候会省很多事。另外如果你打算长期做编码和 Agent 相关的开发可以了解一下 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 它更适合持续性的开发场景。如果只是想验证某个模型能不能用直接去模型对话 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 试一下就行。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 遇到配置问题可以先翻这里。把这一步做完你后面在编译和排障的时候就能随时让模型帮你读日志、改配置不用在搜索引擎里翻半天。下面进入正题先讲 apt 方案。3. apt 安装 Redis 与 systemd 服务配置含可复制片段apt 方案适合绝大多数刚接触 Ubuntu 服务部署的人。整个过程分四步更新索引、安装、改配置、验证。我按顺序写你跟着敲就行。第一步更新包索引。这一步不是可选的Ubuntu 的包索引如果不更新可能装到旧版本或者直接找不到包。sudo apt update sudo apt upgrade -yupgrade会升级已有包如果你机器上有正在跑的服务升级前确认一下不会影响业务。测试机随便升。第二步安装 Redis。sudo apt install redis-server -y装完之后apt 会自动做几件事把redis-server二进制放到/usr/bin/把默认配置放到/etc/redis/redis.conf注册一个 systemd 服务叫redis-server.service并且默认设为开机自启。你可以用下面命令确认版本redis-cli --versionUbuntu 22.04 上一般会输出redis-cli 6.0.16或者相近的 6.0.x。如果你需要 7.x看第 4 节。第三步检查服务状态。systemctl status redis-server正常输出里会有Active: active (running)以及Loaded: loaded (...; enabled; ...)。enabled表示开机自启已经开了。如果显示inactive或者failed先看日志journalctl -u redis-server -n 50 --no-pager第四步改配置。默认配置只监听127.0.0.1没有密码。如果你只是本机用这样最安全不用改。如果你需要远程访问改/etc/redis/redis.confsudo nano /etc/redis/redis.conf找到bind 127.0.0.1 ::1这一行注释掉或者改成bind 0.0.0.0。找到requirepass这一行取消注释并设置一个强密码。找到protected-mode如果开了远程访问且设了密码可以保持yes如果没设密码又开了远程必须设密码否则 Redis 会拒绝外部连接或者直接暴露。改完重启sudo systemctl restart redis-server这里给一个可复制的配置片段你可以直接对照修改。注意路径是/etc/redis/redis.conf这是 apt 安装的默认路径和源码编译的路径不一样。# /etc/redis/redis.conf 关键片段 bind 0.0.0.0 protected-mode yes port 6379 requirepass YourStrongPasswordHere daemonize yes supervised systemd dir /var/lib/redis logfile /var/log/redis/redis-server.logsupervised systemd这一行很重要apt 安装的配置里默认就有它让 Redis 和 systemd 正确配合。dir是数据持久化目录logfile是日志路径。改完记得systemctl restart redis-server。如果你用的是 Cline 或者 Claude Code 来辅助改配置可以把上面这段贴给模型让它帮你检查有没有遗漏。模型调用配置就是第 2 节说的三件套Base URLhttps://taotoken.net/api、你的 API Key、Model ID。这样你改完配置可以让模型帮你 review 一遍。验证连通性redis-cli -h 127.0.0.1 -p 6379 -a YourStrongPasswordHere ping返回PONG就说明服务正常。如果没设密码去掉-a参数。如果连不上看第 5 节的排查。开机自启检查systemctl is-enabled redis-server返回enabled就对了。如果返回disabled执行sudo systemctl enable redis-server。到这里 apt 方案就完成了。整个过程不超过十分钟适合快速起服务。下面讲源码编译适合需要新版本或者自定义选项的场景。4. 源码编译 Redis 7.x 与自定义 systemd 单元源码编译的流程比 apt 长但每一步都有明确目的。我以 Redis 7.2 为例你可以换成任何你想要的版本号。整个过程分装依赖、下载源码、编译、安装、建目录、写配置、写 systemd、启动验证。第一步装编译依赖。Redis 编译需要build-essential、tcl跑测试用、pkg-config如果要 TLS 还需要libssl-dev。sudo apt update sudo apt install -y build-essential tcl pkg-config libssl-dev第二步下载源码。去 Redis 官网或者 GitHub 拿稳定版 tar 包。这里用wget举例你换成实际版本号。cd /tmp wget https://download.redis.io/releases/redis-7.2.4.tar.gz tar -xzf redis-7.2.4.tar.gz cd redis-7.2.4第三步编译。先make再make test可选但推荐最后make install。make -j$(nproc)-j$(nproc)是用满 CPU 核数并行编译快很多。编译完成后可以跑测试make test测试会花几分钟如果全过说明编译没问题。然后安装sudo make install默认会装到/usr/local/bin/包括redis-server、redis-cli、redis-benchmark等。你可以用which redis-server确认。第四步建目录。源码编译不会自动建配置和数据目录需要手动来。sudo mkdir -p /etc/redis sudo mkdir -p /var/lib/redis sudo mkdir -p /var/log/redis sudo chown redis:redis /var/lib/redis /var/log/redis 2/dev/null || sudo chown $USER:$USER /var/lib/redis /var/log/redis如果你还没有redis用户可以建一个sudo adduser --system --group --no-create-home redis第五步写配置文件。把源码目录里的redis.conf复制过去改sudo cp /tmp/redis-7.2.4/redis.conf /etc/redis/redis.conf sudo nano /etc/redis/redis.conf关键改动和 apt 方案类似但路径不同。给一个可复制片段# /etc/redis/redis.conf 源码编译版关键片段 bind 0.0.0.0 protected-mode yes port 6379 requirepass YourStrongPasswordHere daemonize no supervised systemd dir /var/lib/redis logfile /var/log/redis/redis-server.log pidfile /var/run/redis/redis-server.pid注意daemonize no因为交给 systemd 管理不要自己 daemon 化。supervised systemd保留。第六步写 systemd 单元文件。这是源码编译和 apt 最大的区别apt 帮你写好了源码编译要自己写。# /etc/systemd/system/redis-server.service [Unit] DescriptionRedis In-Memory Data Store Afternetwork.target [Service] Userredis Groupredis ExecStart/usr/local/bin/redis-server /etc/redis/redis.conf ExecStop/usr/local/bin/redis-cli -a YourStrongPasswordHere shutdown Restartalways LimitNOFILE65536 [Install] WantedBymulti-user.targetExecStop用redis-cli shutdown优雅停止。LimitNOFILE调大文件描述符上限生产环境建议设。写完重载 systemdsudo systemctl daemon-reload sudo systemctl enable redis-server sudo systemctl start redis-server第七步验证。systemctl status redis-server redis-cli -a YourStrongPasswordHere ping返回PONG就成功。开机自启用systemctl is-enabled redis-server确认。源码编译的好处到这里就体现出来了你装的是 7.2.4可以用 Redis 7 的 Function、Sharded Pub/Sub、Client-side caching 等特性。如果你后面要升级重复下载新版本、编译、替换二进制、重启服务就行配置和数据都在。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节把你在装 Redis 和配模型调用时可能遇到的报错集中讲一下。这些报错我按实际出现频率排每个都给排查方向。先说 Redis 本身的报错。Could not connect to Redis at 127.0.0.1:6379: Connection refused这个最常见。原因通常是服务没起、端口不对、或者 bind 地址不对。排查顺序systemctl status redis-server看服务状态ss -tlnp | grep 6379看端口监听journalctl -u redis-server -n 50看日志。如果是源码编译检查ExecStart路径对不对/usr/local/bin/redis-server是否存在。NOAUTH Authentication required说明你设了密码但连接时没带。加-a参数或者进redis-cli后执行AUTH YourPassword。注意-a会在命令行历史里留密码生产环境建议用REDISCLI_AUTH环境变量。DENIED Redis is running in protected mode说明你开了远程访问但没设密码或者 bind 了0.0.0.0但protected-mode yes且无密码。解决设requirepass或者把protected-mode设为no不推荐除非你有别的访问控制。make编译报jemalloc相关错误通常是缺依赖或者内存不够。先确认build-essential装了然后make distclean重新来。如果报fatal error: openssl/ssl.h: No such file装libssl-dev。systemd 报status203/EXEC说明ExecStart路径不对或者文件没有执行权限。ls -l /usr/local/bin/redis-server确认chmod x补权限。报status200/CHDIR通常是WorkingDirectory设了不存在的目录删掉这行或者建目录。再说模型调用相关的报错。401 Unauthorized说明 API Key 不对或者没带。检查你的 Key 是不是复制全了Base URL 是不是https://taotoken.net/api有没有多余空格。如果你用的是 Claude Code确认三件套都填了Base URL、Key、Model ID。local proxy failed这个通常出现在你本地有代理设置但代理没起或者配置不对。检查环境变量HTTP_PROXY、HTTPS_PROXY如果不需要代理就 unset 掉。注意这里说的是本地网络配置问题不是让你去搞什么特殊网络工具就是检查你机器上的环境变量。reading choices相关报错一般是响应格式和客户端预期不一致。检查你用的 Model ID 是否被支持请求体格式是否符合对应 API 规范。如果你在 Cline 或 Codex 里遇到确认auth.json或配置文件里的字段名没写错。OAuth相关报错通常出现在需要 OAuth 流程的工具里。如果你用的是 API Key 方式确认没有误开 OAuth 模式。Claude Code 的配置里如果混了 OAuth 和 API Key容易冲突清掉 OAuth 相关字段只留 Base URL、Key、Model ID。排查的时候有个通用技巧把完整报错贴给模型让它结合你的系统版本和配置给方向。模型调用配置就是第 2 节那三件套。这样比你自己在日志里翻要快。6. 验证请求与后续接入建议装完 Redis 之后建议做一次完整的验证确认服务真的可用而不是只看systemctl status显示 running。验证分三层进程层、协议层、数据层。进程层就是systemctl status redis-server和ss -tlnp | grep 6379确认进程在、端口在听。协议层用redis-cli ping返回PONG确认能通信。数据层做一次写入读取redis-cli -a YourStrongPasswordHere set testkey hello redis-cli -a YourStrongPasswordHere get testkey redis-cli -a YourStrongPasswordHere del testkey能正确返回hello就说明读写正常。再验证一下持久化配置如果你开了 RDB 或 AOFredis-cli -a YourStrongPasswordHere config get save和config get appendonly看配置是否生效。开机自启再确认一次systemctl is-enabled redis-server返回enabled。然后sudo reboot重启机器起来后再redis-cli ping一次确认自启真的生效。这一步很多人跳过结果某天机器重启后发现 Redis 没起来。如果你后面要把 Redis 接入应用建议先在本地用redis-cli把常用命令跑一遍比如SET、GET、EXPIRE、LPUSH、LRANGE、HSET、HGETALL。这些命令覆盖了字符串、列表、哈希三种最常用的结构。跑通之后再写代码会顺很多。如果你在部署过程中需要模型辅助比如让它帮你写一个 Redis 连接池的代码或者解释maxmemory-policy各个值的区别可以用第 2 节配好的入口。验证模型是否可用直接去模型对话 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 试。长期做编码和 Agent 开发的话Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 更合适。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 配置遇到问题先翻这里。API Key 管理在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。最后说一个实际经验Redis 的配置文件改完之后一定要systemctl restart而不是reload因为部分配置项 reload 不生效。重启前先redis-cli -a YourPassword config rewrite把运行时改动写回文件避免重启后丢失。这个动作在你调maxmemory和淘汰策略的时候特别有用。
返回列表