行业资讯
📅 2026/8/7 7:52:20
Redis入门保姆级笔记
文章目录前言一、先搞懂好好的MySQL不用为啥要学NoSQL1.1 技术栈的三层境界1.2 Web发展逼出来的两座大山Web1.0时代单机就能打Web2.0时代性能瓶颈直接炸了1.3 CPU压力解法Nginx负载均衡但Session成了难题1.4 IO压力解法缓存才是终极答案1.5 NoSQL到底是什么1.6 常见NoSQL三兄弟对比二、Redis登场内存数据库的天花板2.1 Redis是怎么来的作者的八卦小故事2.2 Redis核心特性2.3 Redis能干嘛7大经典场景三、CentOS7安装Redis 手把手踩坑指南3.1 前期准备3.2 安装全步骤第一步解压安装包第二步编译新手最容易翻车的一步第三步执行安装3.3 安装目录里都是啥3.4 启动方式别用前台启动不推荐前台启动推荐后台守护进程启动3.5 关闭服务的正确姿势3.6 远程连接必做开放端口修改配置3.7 冷知识小彩蛋总结前言学习Redis之前要先有一定的Linux基础哦~提示以下是本篇文章正文内容下面案例可供参考一、先搞懂好好的MySQL不用为啥要学NoSQL1.1 技术栈的三层境界我们学过的技术其实可以分成三类对应项目开发的三个阶段解决功能性问题JavaSE、Servlet、JDBC、Linux这些能用代码把业务做出来就行解决扩展性问题Spring、SpringMVC、MyBatis这些框架加新功能不用大改老代码规范开发解决性能问题NoSQL、Nginx、MQ、ES用户量上来了系统不能卡崩前两个阶段我们都已经接触过了现在学的NoSQL就是专门用来扛高并发、海量数据的「性能buff」。1.2 Web发展逼出来的两座大山Web1.0时代单机就能打早年网站用户少一台Web服务器一台MySQL服务器就能搞定所有请求数据量小、访问量低怎么玩都不卡。Web2.0时代性能瓶颈直接炸了随着用户暴涨再加上手机端普及系统直接面临两大压力CPU内存压力一台Web服务器扛不住海量用户请求IO压力数据越积越多每次都查数据库磁盘IO直接打满MySQL卡成PPT1.3 CPU压力解法Nginx负载均衡但Session成了难题Web服务器扛不住那就多部署几台用Nginx做负载均衡把请求分摊到不同服务器上。但很快就出现了经典问题Session不共享。用户第一次请求落到服务器A登录信息存在A的Session里第二次请求被分到服务器BB根本不认识这个用户直接让重新登录体验直接崩了。当时有三个解决方案各有各的坑方案做法致命缺点存在Cookie里把用户信息放浏览器Cookie每次请求带过来敏感数据不安全容易被篡改Session复制每台服务器互相同步Session数据冗余严重服务器越多越浪费统一存缓存数据库所有Session都放NoSQL里所有服务器共享几乎没缺点读写还快业界最终选了第三种方案——用内存级的NoSQL数据库统一存Session这也是NoSQL最经典的应用场景之一。1.4 IO压力解法缓存才是终极答案数据库查得慢那就把频繁查的数据提前放到更快的地方。方案1数据库读写分离、分库分表。改动大还会破坏业务逻辑成本很高方案2热点数据放缓存。直接从内存读速度是磁盘的上百倍90%的请求都不用碰数据库这也是我们学Redis最核心的目的用缓存扛住大部分读请求保护MySQL。1.5 NoSQL到底是什么NoSQL Not Only SQL直译是「不仅仅是SQL」泛指所有非关系型数据库。和MySQL这种关系型数据库比它有几个鲜明特点不遵循传统SQL标准没有表、行、列的概念大多不支持ACID事务牺牲强一致性换极致性能读写速度远超SQL数据库天生适配高并发扩展性极强加节点就能扩容ACID是什么原子性 Atomic不可分割事务是最小执行单元内部操作不可拆分全成功 / 全回滚。转账例子扣款、加钱要么都完成要么全部撤销。一致性 Consistency事务执行前后数据库的数据约束、业务规则始终合法。转账前后A 余额 B 余额 总和不变不会凭空多 / 少钱库存不能出现负数。隔离性 Isolation多个事务并发执行时各个事务之间互相隔离互不干扰一个事务看不到另一个未提交的脏数据。两个人同时给同一账户转账彼此操作互不干扰不会错乱。持久性 Durability事务提交 (commit) 之后对数据的修改永久写入磁盘就算数据库宕机、断电数据也不会丢失。转账成功后服务器突然关机再次开机转账记录依然存在。适用场景高并发读写、海量数据存储、需要灵活扩容的业务不适用场景需要严格事务支持、复杂多表关联查询、结构化数据存储1.6 常见NoSQL三兄弟对比入门阶段最常听到的三个NoSQL数据库区别其实很清晰数据库特点定位Memcache只支持简单key-value不持久化数据类型单一早期缓存方案现在基本被Redis取代Redis支持多种数据结构支持持久化备份功能最全企业级缓存首选万金油选手MongoDB文档型数据库存JSON格式查询功能强存非结构化数据替代部分MySQL场景我们课程重点学Redis毕竟现在后端面试、工作基本都绕不开它。二、Redis登场内存数据库的天花板2.1 Redis是怎么来的作者的八卦小故事Redis的作者是意大利程序员antirez早年他做了一个网站统计访客记录的项目叫LLOOGG.COM核心需求就是每个网站对应一个列表新记录从头部加超过长度就把尾部最早的删掉先进先出。一开始用MySQL做结果用户多了之后列表的push、pop操作太频繁磁盘IO直接顶不住怎么优化SQL都没用。作者一怒之下既然瓶颈在磁盘那我直接把数据放内存里不就行了于是用C语言重写了一个内存版的列表数据库加上了持久化功能2009年Redis正式横空出世。它的全称是REmote DIctionary Service远程字典服务本质就是一个可以远程访问的、存键值对的内存字典。2.2 Redis核心特性和Memcache比Redis能火这么多年靠的就是功能全还性能强支持5大数据类型字符串、列表、集合、有序集合、哈希不止是简单的key-value操作全是原子性单线程执行不用担心并发冲突支持持久化数据在内存但可以定期存到磁盘宕机不丢数据支持主从复制、哨兵、集群高可用、扩容都有成熟方案单线程多路IO复用别看是单线程速度比多线程还快还没锁的开销2.3 Redis能干嘛7大经典场景别觉得Redis只能当缓存它的玩法多到离谱业务场景Redis实现方案最新评论、消息列表List列表天然按插入顺序排序排行榜、热度榜单Zset有序集合按分数自动排序手机验证码、临时权限Expire过期时间到点自动删除秒杀库存、访问计数器INCR/DECR原子自增并发不超卖海量数据去重Set集合自动去重效率极高消息队列、任务排队List实现简单队列实时消息广播pub/sub发布订阅模式三、CentOS7安装Redis 手把手踩坑指南3.1 前期准备环境CentOS7 系统安装包redis-6.2.1.tar.gz(版本不唯一)必装依赖gcc编译器⚠️ 踩坑预警没装gcc直接编译百分百报错# 检查有没有gccgcc--version# 没有就安装yuminstallgcc-y3.2 安装全步骤第一步解压安装包把安装包传到/opt目录执行解压cd/opttar-zxvfredis-6.2.1.tar.gz第二步编译新手最容易翻车的一步进入解压后的目录执行make编译cdredis-6.2.1/make❌ 经典报错jemalloc/jemalloc.h: 没有那个文件或目录原因gcc环境没准备好就执行了make残留了错误的编译文件解决办法先清理错误文件重新编译makedistclean# 清除之前的编译垃圾make# 重新编译第三步执行安装编译完成后安装到系统目录makeinstall安装完成后所有命令会自动放到/usr/local/bin目录下全局都能调用。3.3 安装目录里都是啥/usr/local/bin下的几个核心工具先混个脸熟命令作用redis-serverRedis服务器启动命令redis-cliRedis客户端操作入口redis-benchmark性能测试工具压测Redis速度redis-check-aof / redis-check-rdb修复损坏的持久化文件redis-sentinel哨兵模式专用3.4 启动方式别用前台启动不推荐前台启动直接输redis-server就能启动但终端一关服务就停纯纯测试用生产绝对不能这么干。推荐后台守护进程启动这是我们日常用的标准方式需要修改配置文件先把配置文件复制到安装目录cp/opt/redis-6.2.1/redis.conf /usr/local/bin修改配置文件开启后台运行vim/usr/local/bin/redis.conf找到daemonize no改成daemonize yes意思是「以守护进程方式运行」后台常驻关终端不影响启动Redisredis-server redis.conf验证是否启动成功ps-ef|grepredis能看到redis-server 127.0.0.1:6379进程就说明启动成功了。客户端连接测试redis-cli# 进入客户端后输入ping127.0.0.1:6379pingPONG返回PONG说明连接正常环境彻底搞定。3.5 关闭服务的正确姿势# 方式1客户端内关闭127.0.0.1:6379shutdown# 方式2命令行直接关redis-clishutdown# 多实例指定端口关闭redis-cli-p6379shutdown3.6 远程连接必做开放端口修改配置⚠️ 新手第二大坑本地能连Java代码/远程工具连不上默认Redis只允许本机访问要远程连接必须改两个地方开放防火墙6379端口firewall-cmd--permanent--add-port6379/tcp firewall-cmd--reload# 查看已开放端口firewall-cmd --list-ports修改redis.conf配置注释掉bind 127.0.0.1或者改成0.0.0.0把protected-mode yes改成no关闭保护模式改完重启Redis生效3.7 冷知识小彩蛋端口号6379的由来作者早年喜欢玩梗6379是手机九宫格键盘上「MERZ」对应的数字。MERZ是意大利一个女明星的名字作者和朋友早年用这个词当「愚蠢」的梗选端口的时候随手就用了。默认16个数据库Redis默认有16个数据库下标从0开始默认用0号库。用select 数字就能切换不过集群模式下不支持多库。单线程为什么还这么快Redis是「单线程多路IO复用」模型避免了多线程锁竞争的开销纯内存操作本身就极快瓶颈根本不在CPU而在网络IO所以单线程完全够用。总结本文从项目性能优化的真实痛点切入完整梳理了NoSQL的诞生背景与Redis入门全流程核心内容可归纳为三点为什么学性能瓶颈倒逼技术演进Web2.0高并发场景下传统架构暴露出Web服务器算力不足、数据库IO压力过大两大难题。NoSQL凭借内存级读写速度成为解决Session共享、热点数据缓存的最优方案其中Redis因功能全面、性能强劲是当前企业级缓存的首选技术。是什么Redis的核心定位与能力边界Redis是基于C语言开发的键值型内存数据库支持5大数据结构、原子操作、持久化与高可用架构可覆盖缓存、排行榜、验证码、计数器、消息队列等7类经典业务场景并非单一的缓存工具。怎么搭零踩坑安装部署指南提供了CentOS7环境下Redis 6.2.1从编译到启动的完整步骤重点标注了gcc依赖缺失、jemalloc编译报错、远程连接失败三大新手高频坑给出了后台守护进程配置、防火墙端口开放、保护模式关闭的标准解决方案。本文是Redis系列的入门基础篇搞定环境搭建后可继续深入学习数据类型操作、持久化机制与集群架构等高阶内容。