Redis 入门指南:从概念到部署实战

Redis 入门指南:从概念到部署实战 一、Redis 是什么RedisRemote Dictionary Server是一个开源的、基于内存的高性能键值对数据库由 Salvatore Sanfilippo 于 2009 年开发。核心特点特点说明极速数据存储在内存中读写速度可达 10万 QPS丰富的数据结构不仅仅是 Key-Value支持 String、Hash、List、Set、ZSet 等持久化支持 RDB 和 AOF 两种方式将内存数据写入磁盘原子性操作所有操作都是原子性的支持事务主从复制支持 Master-Slave 架构实现读写分离高可用通过 Sentinel 和 Cluster 实现故障自动转移发布订阅支持 Pub/Sub 消息通信模式Redis 与其他数据库对比对比项RedisMySQLMongoDB存储介质内存磁盘磁盘数据模型键值对关系表文档读写速度极快微秒级较慢毫秒级中等数据容量受限于内存大大适用场景缓存/会话/排行持久存储灵活文档二、Redis 的作用与应用场景1. 缓存最常见将热点数据存入 Redis减轻数据库压力用户请求 → 查 Redis → 命中则返回 → 未命中 → 查数据库 → 写入 Redis → 返回2. 会话管理Session分布式系统中将用户 Session 存储在 Redis 中实现多服务器共享登录状态。3. 排行榜利用 Redis 的有序集合Sorted Set实现实时排行榜ZADD leaderboard 100 player1 ZADD leaderboard 200 player2 ZREVRANGE leaderboard 0 9 WITHSCORES # 获取 Top 104. 计数器 / 限流# 文章阅读量计数 INCR article:1001:views ​ # 接口限流每分钟最多 100 次请求 INCR rate:ip:192.168.1.1 EXPIRE rate:ip:192.168.1.1 605. 消息队列利用 List 结构实现简单的消息队列LPUSH queue message1 # 生产者推送消息 BRPOP queue 0 # 消费者阻塞式取消息6. 分布式锁SET lock:order:1001 owner_id NX EX 30 # NX不存在才设置互斥 # EX 3030秒过期防死锁7. 社交功能关注/粉丝用 Set 存储关注关系SINTER求共同关注点赞用 Set 存储点赞用户共同好友SINTER user:1:friends user:2:friends8. 地理位置利用 GEO 类型实现附近的人、附近的店铺等功能。三、Redis 安装Windows 安装Redis 官方不支持 Windows但微软维护了一个 Windows 版本。方式一使用 Memurai推荐访问 https://www.memurai.com/get-memurai下载安装包按向导完成安装方式二使用 WSLWindows Subsystem for Linux# 在 WSL 中执行见下方 Linux 安装 sudo apt update sudo apt install redis-server方式三使用 Dockerdocker run -d --name redis -p 6379:6379 redis:latestmacOS 安装brew install redis ​ # 启动服务 brew services start redis ​ # 或手动启动 redis-serverLinux 安装Ubuntu / Debiansudo apt update sudo apt install redis-server # 启动服务 sudo systemctl start redis # 设置开机自启 sudo systemctl enable redis # 验证 redis-cli ping # 返回 PONG 表示安装成功Linux 安装源码编译# 下载 wget https://download.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd redis-stable # 编译 make make test # 安装 sudo make install # 默认安装到 /usr/local/bin/四、Redis 可视化工具1. RedisInsight官方推荐特点Redis 官方出品免费功能全面。下载地址https://redis.com/redis-enterprise/redis-insight/使用步骤下载并安装 RedisInsight打开应用点击 Add Redis Database填写连接信息Host127.0.0.1Port6379Password如有点击 Add Redis Database 连接左侧浏览 Key右侧查看/编辑 Value核心功能Key 浏览、搜索、编辑实时监控内存、连接数、命令统计慢查询分析内置 CLI 终端数据类型可视化JSON、时间序列等2. Another Redis Desktop Manager开源特点开源免费跨平台国人开发中文支持好。下载地址https://github.com/qishibo/AnotherRedisDesktopManager使用步骤从 GitHub Releases 下载对应系统的安装包安装并打开点击 New Connection填写 Host、Port、Password点击 OK 连接核心功能支持 Cluster 和 Sentinel 模式Key 树形结构展示支持 JSON 格式化显示支持命令行操作支持导入/导出数据3. Redis Desktop Manager付费特点老牌工具功能强大但付费使用。下载地址https://resp.app/4. Redis CommanderWeb 端特点基于 Node.js 的 Web 管理工具适合服务器端部署。# 安装 npm install -g redis-commander # 启动 redis-commander --redis-host 127.0.0.1 --redis-port 6379 # 浏览器访问 http://localhost:80815. IDEA / VS Code 插件IDEA安装 Iedis 插件直接在 IDE 中操作 RedisVS Code安装 Redis 插件由 Microsoft 提供五、Linux 上部署 Redis1. 基础部署# 安装 sudo apt update sudo apt install redis-server # 修改配置文件 sudo vim /etc/redis/redis.conf2. 关键配置项# 绑定地址默认只允许本机访问 bind 127.0.0.1 # 如需远程访问改为 bind 0.0.0.0 # 保护模式远程访问时需关闭或设置密码 protected-mode no # 端口 port 6379 # 密码 requirepass your_strong_password # 最大内存限制 maxmemory 256mb # 内存淘汰策略 maxmemory-policy allkeys-lru # 持久化 - RDB save 900 1 # 900秒内有1次修改则快照 save 300 10 # 300秒内有10次修改则快照 save 60 10000 # 60秒内有10000次修改则快照 # 持久化 - AOF appendonly yes appendfsync everysec # 日志 loglevel notice logfile /var/log/redis/redis-server.log3. 启动与管理# 启动 sudo systemctl start redis # 停止 sudo systemctl stop redis # 重启 sudo systemctl restart redis # 查看状态 sudo systemctl status redis # 开机自启 sudo systemctl enable redis # 取消开机自启 sudo systemctl disable redis4. 开放防火墙端口# UFW sudo ufw allow 6379/tcp # firewalld sudo firewall-cmd --permanent --add-port6379/tcp sudo firewall-cmd --reload # iptables sudo iptables -A INPUT -p tcp --dport 6379 -j ACCEPT5. 主从复制部署主节点配置默认即可# /etc/redis/redis.conf主节点 bind 0.0.0.0 requirepass master_password从节点配置# /etc/redis/redis.conf从节点 replicaof 192.168.1.100 6379 masterauth master_password6. Redis Sentinel高可用# /etc/redis/sentinel.conf sentinel monitor mymaster 192.168.1.100 6379 2 sentinel auth-pass mymaster master_password sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 10000# 启动 Sentinel redis-sentinel /etc/redis/sentinel.conf7. Redis Cluster 部署# 创建 6 个节点3主3从 mkdir -p /redis-cluster/{7001,7002,7003,7004,7005,7006} # 每个节点的配置文件 cat /redis-cluster/7001/redis.conf EOF port 7001 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes EOF # 依次启动所有节点 redis-server /redis-cluster/7001/redis.conf redis-server /redis-cluster/7002/redis.conf # ... 其他节点同理 # 创建集群 redis-cli --cluster create \ 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 \ 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 \ --cluster-replicas 1六、Redis 常用命令连接与认证# 连接本地 Redis redis-cli # 连接远程 Redis redis-cli -h 192.168.1.100 -p 6379 -a password # 认证 AUTH password # 测试连接 PING # 返回 PONG # 查看服务器信息 INFO # 切换数据库0-15 SELECT 0 SELECT 1Key 操作# 设置 Key SET mykey hello # 获取 Key GET mykey # 查看所有 Key KEYS * # 模糊搜索 KEYS user:* # 检查 Key 是否存在 EXISTS mykey # 删除 Key DEL mykey DEL key1 key2 key3 # 设置过期时间秒 EXPIRE mykey 60 # 设置过期时间毫秒 PEXPIRE mykey 60000 # 查看剩余过期时间秒 TTL mykey # 取消过期时间 PERSIST mykey # 重命名 Key RENAME oldkey newkey # 查看 Key 类型 TYPE mykey # 查看 Key 大小 STRLEN mykeyString 字符串SET name Redis GET name MSET k1 v1 k2 v2 k3 v3 # 批量设置 MGET k1 k2 k3 # 批量获取 # 自增 / 自减 INCR counter # 1 INCRBY counter 10 # 10 DECR counter # -1 DECRBY counter 5 # -5 # 追加字符串 APPEND name is great # 不存在时才设置分布式锁常用 SET lock:1 value NX SET lock:1 value NX EX 30 # 带过期时间Hash 哈希# 设置字段 HSET user:1 name 张三 HSET user:1 age 25 HSET user:1 email zhangsanexample.com # 获取字段 HGET user:1 name HGETALL user:1 # 获取所有字段 # 批量设置 HMSET user:1 name 张三 age 25 # 判断字段是否存在 HEXISTS user:1 name # 删除字段 HDEL user:1 email # 自增 HINCRBY user:1 age 1 # 获取所有字段名 / 值 HKEYS user:1 HVALS user:1 # 获取字段数量 HLEN user:1List 列表# 左推入 / 右推入 LPUSH mylist a b c # c b a RPUSH mylist x y z # ... x y z # 弹出 LPOP mylist # 弹出左边 RPOP mylist # 弹出右边 BRPOP mylist 0 # 阻塞式弹出0表示永久等待 # 获取范围 LRANGE mylist 0 -1 # 获取所有元素 LRANGE mylist 0 9 # 获取前10个 # 获取长度 LLEN mylist # 获取指定位置 LINDEX mylist 0 # 修改指定位置 LSET mylist 0 new_value # 裁剪只保留指定范围 LTRIM mylist 0 49Set 集合# 添加元素 SADD myset a b c # 获取所有元素 SMEMBERS myset # 判断元素是否存在 SISMEMBER myset a # 删除元素 SREM myset a # 集合大小 SCARD myset # 集合运算 SINTER set1 set2 # 交集 SUNION set1 set2 # 并集 SDIFF set1 set2 # 差集 # 随机获取元素 SRANDMEMBER myset 2 # 随机取2个 SPOP myset # 随机弹出1个Sorted Set 有序集合# 添加元素带分数 ZADD leaderboard 100 player1 ZADD leaderboard 200 player2 ZADD leaderboard 150 player3 # 获取排名从高到低 ZREVRANGE leaderboard 0 9 WITHSCORES # Top 10 # 获取排名从低到高 ZRANGE leaderboard 0 9 WITHSCORES # 获取分数 ZSCORE leaderboard player1 # 获取排名 ZREVRANK leaderboard player1 # 排名从0开始 # 自增分数 ZINCRBY leaderboard 50 player1 # 集合大小 ZCARD leaderboard # 按分数范围查询 ZRANGEBYSCORE leaderboard 100 200 # 删除元素 ZREM leaderboard player1发布订阅# 订阅频道 SUBSCRIBE channel1 # 发布消息 PUBLISH channel1 hello # 订阅模式 PSUBSCRIBE news:* # 订阅所有 news: 开头的频道事务MULTI # 开启事务 SET name 张三 SET age 25 EXEC # 执行事务 DISCARD # 取消事务管理命令# 查看慢查询 SLOWLOG GET 10 SLOWLOG LEN SLOWLOG RESET # 查看客户端连接 CLIENT LIST # 杀死客户端连接 CLIENT KILL 127.0.0.1:12345 # 数据库大小 DBSIZE # 清空当前数据库 FLUSHDB # 清空所有数据库 FLUSHALL # 手动触发 RDB 保存 BGSAVE # 手动触发 AOF 重写 BGREWRITEAOF # 监控实时命令 MONITOR七、Redis 最佳实践1. Key 命名规范业务:对象:ID:属性 user:1001:name order:20240101:count cache:product:detail:10012. 合理设置过期时间避免内存无限增长所有缓存数据都应设置过期时间。3. 避免大 KeyString 值不超过 10KBHash/Set/ZSet 元素不超过 5000 个大 Key 会阻塞主线程影响性能4. 使用连接池应用程序中应使用连接池避免频繁创建和销毁连接。5. 热 Key 处理对高频访问的 Key 可以使用本地缓存 Redis 缓存的多级缓存策略。总结Redis 是当今最流行的内存数据库之一凭借其极高的性能和丰富的数据结构广泛应用于缓存、会话管理、排行榜、消息队列等场景。掌握 Redis 的安装部署和常用命令是后端开发者的必备技能。