redis篇(理论篇)
目录
- mysql的演进
- NoSQL
- redis概述
- redis安装
- redis基本知识
- redisKey基本命令
- 八种数据结构
- redis基本事务操作
- redis 实现乐观锁
一、MySQL的演进过程
1. 初期:单机架构,简单高效
90年代,随着互联网初期发展,单机数据库架构(APP → Middleware → MySQL)完全够用,压力小,易于维护。
2. 中期:垂直拆分与读写分离
随着业务量增加,单机无法满足需求,出现了垂直拆分(不同模块用不同数据库)与读写分离(主库写,从库读)策略。
3. 缓存层优化
进一步为了减轻MySQL压力,开始在应用层引入文件缓存机制。
后续逐渐普及Memcached作为分布式缓存,大大提高了系统性能。
4. 后期:水平扩展与集群
业务不断膨胀,最终演变为:
水平拆分(分库分表)+ 多实例集群成为标配。
5. 存储引擎演变
早期 MySQL 采用MyISAM引擎(表锁,效率低,事务支持差)。
后来转向InnoDB引擎(行级锁,支持事务、崩溃恢复、外键约束)。
6. 新问题:应对更复杂、变化更快的数据需求
随着移动互联网、社交应用爆发,MySQL遇到瓶颈。
引入NoSQL体系,存储如用户画像、地理位置、社交关系等数据,减轻关系型数据库压力。
二、NoSQL的兴起与应用
1. 什么是NoSQL?
NoSQL,全称 Not Only SQL,即“不仅仅是SQL”。
特点:
格式灵活:基于 Key-Value 或文档,数据类型多样。
无需固定表结构:方便迭代开发,支持敏捷开发和极限编程。
高扩展性和高性能:适应海量数据场景。
【扩展:敏捷开发】强调的是快速迭代、小步快跑、持续反馈、持续优化,而不是像传统开发那样一开始就写一大堆文档、一次性做完。项目分成很多小周期(通常2-4周叫做一个Sprint),每个周期都交付一个可以运行的版本。强调人与人的沟通(团队交流比写文档更重要)。
举个例子:
比如开发一个电商网站:
第一个Sprint:只做出首页+商品列表的最小功能;
第二个Sprint:增加商品详情页+简单下单功能;
第三个Sprint:接入支付;
中间每两周就交付一个小版本,客户可以体验,随时调整方向,比如改UI、换支付方式。
这样比起传统一次性做完一整年开发,灵活得多,也风险小得多!
【扩展:极限编程】简称 XP,是敏捷开发的一种具体实践方法。
2. 关系型数据库(RDBMS)与NoSQL的区别
对比点 | 关系型数据库(RDBMS) | NoSQL |
---|---|---|
数据结构 | 结构化(表) | 灵活(键值、文档、列存、图) |
查询语言 | SQL | 多样(API调用、类SQL) |
数据一致性 | 强一致性 | 最终一致性(CAP理论) |
事务支持 | 支持ACID事务 | 弱化事务以换取扩展性 |
典型应用 | 金融、传统企业 | 社交、内容分发、日志存储 |
企业典型组合:MySQL + Redis
3. NoSQL应用示例(以淘宝商品页为例)
商品基本信息、评论(结构化文档) → MongoDB
商品图片(大文件存储) → FastDFS、OSS
搜索关键词、商品检索 → ElasticSearch
热门商品、秒杀活动缓存 → Redis、Tair、Memcached
交易、支付系统 → 仍以关系型数据库为主(如MySQL)
4. NoSQL四大主流分类
类型 | 代表产品 | 说明 |
---|---|---|
键值(K-V)存储 | Redis、Tair、Memcached | 快速访问,缓存场景最佳 |
文档型数据库 | MongoDB | 类似JSON存储,灵活结构 |
列式数据库 | HBase、Cassandra | 适合大规模写入和分析 |
图数据库 | Neo4j | 适合存储复杂网络关系(社交、推荐系统) |
三、Redis详解
1. 什么是Redis?
全称:Remote Dictionary Server(远程字典服务)
特点:
基于内存存储,极致高效
支持持久化
丰富的数据结构
用作缓存、数据库、消息中间件
支持发布订阅、地理位置分析、计时器、计数器等应用
2. Redis安装与使用(快速上手)
Windows环境:下载 redis-cli.exe、redis-server.exe、redis-benchmark.exe 等。
Linux环境:
测试性能:
(测试100个并发连接,每个连接发送10000次请求)
默认端口:6379
测试连接:
四、Redis基础知识
1. 数据库管理
默认16个逻辑数据库(编号0~15)
常用命令:
2. 单线程但高性能
Redis采用单线程事件循环处理请求,避免多线程锁竞争,效率极高。
性能瓶颈往往在于内存带宽和网络带宽,不是CPU!
3. 存储机制
主要存储在内存(RAM),访问速度极快。
持久化方式(可选):
RDB快照:周期性生成内存数据快照到磁盘。
AOF日志:记录每一次写操作,支持按日志重放恢复。
数据结构组织方式:
4. 内存管理与淘汰策略
配置
maxmemory
限制最大内存占用。超出后可按策略淘汰数据:
LRU(最近最少使用)
LFU(最少访问次数)
TTL(按过期时间)
5. Redis的常见误区
误区 | 正确理解 |
---|---|
多线程一定比单线程快 | 错!多线程有锁竞争、上下文切换开销 |
Redis单线程性能不足 | 错!Redis单线程可支撑几十万QPS,瓶颈一般是带宽和内存 |
五、Redis五大数据类型及常用命令
1. String(字符串类型)
最基础、最常用的数据类型,类似单纯的Key-Value存储。
基本操作
过期时间设置
- 类型查询
字符串追加
- 自增/自减
2. List数据类型