
简介一份系统讲解Redis入门与核心概念的PDF学习资料面向具备一定编程基础、希望掌握NoSQL数据库能力的开发者和技术爱好者。资料从Redis概述与核心特性入手覆盖Linux、macOS、Docker及Windows多种环境下的安装方式并结合主配置文件、关键配置项与安全加固配置详述生产环境要点。五种主要数据类型字符串、哈希、列表、集合、有序集合的操作命令都有细致讲解同时梳理了RDB与AOF两种持久化机制及Java项目中的集成方式。压缩包内含1个PDF文件大小约1.14MB便于下载后随时查阅。已有105人浏览学习。想系统入门Redis、理解其缓存、消息队列、排行榜等应用场景并快速上手工程实践的读者可通过这份资料获得从安装配置、数据类型操作到Java集成的一体化学习路径常见问题与学习路径建议部分也有助于查漏补缺、加深理解。 我接触Redis快十年了从最早的2.x版本一路用到现在的7.x中间帮不少团队排查过缓存雪崩、数据丢失这类要命的问题。现在很多人简历上都写着熟悉Redis但真到了面试或者上手干活连redis.conf里几个关键参数都说不清楚最多会用个set和get。这篇文章我换个讲法不堆概念只把一条线走完先搞清楚Redis到底是什么、为什么这么快再亲手把你本地的Redis从下载安装到启动配置跑通接着把五种核心数据类型挨个讲透最后聊聊持久化、内存淘汰这些绕不开的话题。全程大白话你跟着敲一遍命令基本就能把Redis新手入门这条路走完。1. 先搞清楚Redis是什么以及为什么它这么快1.1 Redis和MySQL的本质差异在哪里Redis的全称是Remote Dictionary Server翻译过来就是远程字典服务器。你可以把它理解成一份放在内存里的超级大字典所有数据都以key-value键值对的形式保存比如用username作为key存进去的字符串就是value。那它和MySQL这类关系型数据库到底差在哪说白了就一个字内存。MySQL的数据主要落在磁盘上哪怕做了各种索引优化读取也要经过磁盘IO而Redis的数据主要放在内存里内存的读写速度是纳秒级磁盘读写是毫秒级中间差了好几个数量级。你可以这么想MySQL像图书馆里查纸质书找到那本书要花时间Redis像随身带的小抄本随手一翻答案就出来了。除了内存Redis还有一个常被误会的特性——单线程。早期版本的核心命令执行是单线程的很多人一听单线程就觉得性能不行其实恰恰相反。单线程带来的最大好处是没有锁竞争、没有线程切换的开销也不用处理复杂的并发一致性问题。Redis官网的解释是Redis的瓶颈从来不在CPU而在网络IO和内存大小所以单线程反而让实现更简单、性能更稳定。当然Redis 6.0之后在网络模块引入了多线程来提升IO吞吐但真正执行命令的核心路径还是单线程这个设计到今天依然成立。1.2 它最擅长解决的三个实际场景理解了底层原理再看应用场景就很顺了。Redis最常见的用途有三个缓存把数据库里查询频率高的热点数据塞进Redis下次请求直接查内存不回源MySQL能扛住几十倍的流量压力。计数器/限流INCR命令做自增操作是原子的非常适合做点赞数、访问量统计也可以做简单的接口限流。排行榜/去重有序集合ZSet天生适合做排行榜Set类型做去重、共同关注这类集合运算也极其方便。只要你的业务里出现了读多写少高并发实时统计这几个关键字大概率就该让Redis上场了。2. 从下载安装到跑起来Windows、Linux、macOS全覆盖2.1 Windows下怎么装两条实用路线先说一个很多人踩过的坑Redis官网其实没有Windows版本的安装包。你在网上搜到的redis-windows基本都是社区开发者编译的移植版所以Windows用户最容易在下载环节被误导。如果你想在Windows下快速跑起来有两套方案。方案一是用WSL跑Linux版。这是我现在最推荐的方式毕竟生产环境基本都是Linux你提前熟悉一下只有好处。步骤是控制面板里启用适用于Linux的Windows子系统然后去应用商店装一个Ubuntu。装好之后打开Ubuntu终端执行sudo apt update sudo apt install redis-server -y redis-server --version方案二是直接下载Windows移植版。GitHub上有不少项目专门做了Windows build常见的如tporadowski/redis下载zip压缩包解压后直接双击redis-server.exe就能启动。这种方式适合你只想本地写写代码做个demo图个快。不过我必须说一句Windows移植版在文件句柄管理、持久化稳定性、fork子进程这些地方表现都比较弱不要拿它跑生产环境不然早晚要出问题。2.2 Linux和macOS下怎么装一条命令的事Linux用户最省心发版仓库里基本都有Redis。Ubuntu/Debian系sudo apt update sudo apt install redis-server -yCentOS/RHEL系sudo yum install redis -ymacOS用户用Homebrewbrew install redis如果你的服务器要跑正式业务我更建议用源码编译安装好处是可以自己指定版本、开启更多编译特性部署也更可控。大致流程是去官网下载稳定版tar包然后执行make make install生成的redis-server和redis-cli会被装到/usr/local/bin/下。新手第一次玩可以不用这么复杂等真上线了再换不迟。2.3 装完怎么确认有没有成功安装完成后先执行下面两个命令做验证redis-server -v redis-cli -v如果能正常打印版本号说明环境已经OK了。再看服务是否起来redis-cli ping如果返回PONG那就代表Redis已经在本地跑起来了你可以正式进入下一步。3. 启动、连接与配置让Redis按照你的规则工作3.1 前台启动、后台启动与关闭服务最直接的启动方式是在终端里执行redis-server这种是前台启动日志会哗啦啦刷在终端上一旦关掉终端Redis就跟着停了。日常开发我通常用后台方式redis-server --daemonize yes加了daemonize yes之后Redis会像个小幽灵一样躲在后台运行终端可以做别的事。也可以通过配置文件启动redis-server /etc/redis/redis.conf连接服务用客户端工具redis-cli在客户端里输入ping返回PONG就说明连接正常。关闭服务时不要直接kill进程正确做法是在客户端里执行redis-cli shutdownRedis会先把内存数据做一次安全处理再退出比直接杀进程靠谱得多。3.2 配置文件里必须弄懂的5个参数redis.conf是Redis的命根子新手不需要记上百个配置项但下面这几个一定要搞懂。bind默认127.0.0.1只允许本机连接这是安全基线。如果改成0.0.0.0所有网卡都能访问这是裸奔的开始。port默认6379常见的运维扫描端口如果有条件可以换成高位端口。requirepass设置访问密码。这个参数一定要在生产环境配上不然Redis很容易被互联网上的扫描工具盯上。protected-mode默认yes。在没设置密码时它只允许本机访问算是一道保险。maxmemory限制Redis最大可用内存配合淘汰策略使用防止内存被无脑占满。修改配置后需要重启Redis才能生效。注意生产环境改配置前先redis-cli shutdown改完再启动避免配置没生效导致排查半天的乌龙。3.3 可视化客户端怎么选命令行用熟了确实很帅但看数据还是图形化工具方便。老牌的是Redis Desktop Manager不过新版本开始收费了。我个人推荐Another Redis Desktop Manager开源免费跨平台功能也够强连接、查看key、执行命令都很顺手。官方近年还出了RedisInsight颜值高、功能全也值得一试。4. 核心概念把五种数据类型彻底吃透4.1 String一切命令的基石String是Redis里最简单、也最常用的类型。常见命令SET username tom GET username SET view_count 100 INCR view_count DECR view_count SET login_code 123456 EX 300最后一条设置了5分钟过期时间很适合验证码之类的临时数据。String的经典场景有三个缓存对象比如把用户信息序列化成JSON字符串、计数器INCR做点赞数、分布式锁SETNX lock_key value返回1表示拿到锁返回0表示锁被占用。很多新手以为分布式锁很难其实核心就是SETNX加过期时间。4.2 Hash最适合存一个对象Hash类型把对象拆成多个字段分别存储比如用户信息可以这样存HSET user:1000 name Tom age 18 email tomexample.com HGET user:1000 name HGETALL user:1000 HINCRBY user:1000 age 1user:1000是keyname、age、email是字段后面是值。它最大的好处是修改单个字段时不需要像String那样把整个对象取出来再重新序列化而且内存利用率也比大JSON字符串更高。用Redis存用户资料、商品资料首选Hash。4.3 List队列和时间线List是一个双向链表可以从头或尾压入、弹出元素很适合处理队列和时间线LPUSH task_queue job1 RPUSH task_queue job2 LPOP task_queue RPOP task_queue LLEN task_queueLPUSH往左压RPOP从右弹正好凑成一个先入先出的消息队列。如果队列为空还有阻塞版本BRPOP可以一直等着有数据进来再返回适合做任务分发。另外一个常见用途是存用户的时间线比如发帖ID按时间顺序推进去再分页取出来。4.4 Set与ZSet去重、标签与排行榜Set是去重的集合命令和用法都非常直白SADD user:1:tags java redis mysql SISMEMBER user:1:tags redis SINTER set1 set2SISMEMBER用来判断元素是否存在适合做标签系统的是否包含查询SINTER可以求多个集合的交集比如找两个人的共同好友。ZSet在Set之上多了一个分数score数据会按分数自动排序ZADD ranking 100 player1 ZADD ranking 200 player2 ZREVRANGE ranking 0 9ZADD插入分数ZREVRANGE按分数从高到低取出榜单。排行榜、积分排名包括延迟队列把score设成执行时间戳都在这里派上用场。5. 持久化与内存淘汰以及新手避坑大全5.1 RDB和AOF两种持久化方式怎么选Redis是内存数据库如果不做持久化一断电数据就全没了。它提供两种持久化方式。RDB是快照像给仓库拍一张照片每隔一段时间把内存里的全量数据写到磁盘的dump.rdb文件。优点是恢复速度快文件体积小缺点是两次快照之间宕机这段时间的写操作就丢了。AOF则是写日志Redis每执行一条写命令都会追加到AOF文件末尾类似记账本。AOF的数据安全性更高默认每秒刷盘一次最多丢一秒数据但日志文件会越积越大重启恢复时也要重放日志速度比RDB慢。我给你的建议是重要业务两个都开。Redis 4.0之后还支持混合持久化用AOF重写时生成RDB格式的底层快照上面再记录增量命令兼顾了恢复速度和安全性。简单说RDB适合做冷备份和快速恢复AOF适合需要高可靠性的业务两者从来不是对立关系而是互补关系。5.2 过期键与内存淘汰机制给key设置过期时间SET code abc123 EX 60 EXPIRE code 60 TTL codeTTL返回剩余存活时间-2表示key已不存在-1表示永不过期。那过期的key到底什么时候被删除Redis用了两种策略惰性删除和定期删除。惰性删除是当这个key被访问时发现过期了立刻删掉定期删除是Redis每隔一段事件循环抽查一部分expired key把它们清理掉。这两种策略结合避免了定时删除扫全库的开销也避免了大批过期key霸占内存不释放。更关键的是maxmemory。当内存达到上限后Redis会根据maxmemory-policy决定怎么办。新手直接把选项设成allkeys-lru就行意思是所有key里按最近最少使用原则淘汰。如果你设置了noeviction写入时一旦超内存就会直接报错。这块配置看起来简单但缓存失效导致的雪崩往往就是从这里开始的。5.3 新手常见问题速查表我这些年答疑过不少新手把出现频率高的问题整理成一张速查表问题现象可能原因解决方案本机连不上Redisbind限制或protected-mode检查bind是否为127.0.0.1确认端口和密码设置密码后还是连不上配置没改对或没重启确认requirepass配置后重启Redis重启后数据全没了没开启持久化设置appendonly yes确认RDB保存策略用KEYS *导致命令阻塞生产环境数据量太大改用SCAN分批扫描避免全键遍历Windows版跑生产环境崩溃移植版稳定性差切到Linux部署用官方支持的版本写入报OOM错误maxmemory已满且策略保守调整maxmemory-policy为allkeys-lru最后再分享一点个人体会。学Redis最忌讳只背命令不去想它底层的数据结构和适用场景。你把五种数据类型的命令敲一遍再动手配一次持久化和淘汰策略比看十遍教程都管用。真遇到问题优先看日志文件然后对照redis.conf排查90%的新手问题都能自己解决。跑通了这套环境后面再研究分布式锁、缓存击穿、集群分片你会有完全不一样的感觉。本文还有配套的精品资源点击获取