一、引言
本篇文章是整理笔者在学习Redis时的入门篇,将探讨以下几点:
- 什么是关系型数据库及其优劣
- 什么是NoSQL(非关系型)数据库及其优劣
- 什么是Redis及其优劣
- Redis版本介绍
二、关系型数据库
2.1 什么是关系型数据库
关系型数据库是按关系模型创建的数据库,关系模型指"一对多,多对一,多对多",最终数据会持久化到磁盘上,其代表有MySQL,Oracle等
2.2 关系型数据库的优劣
优点:
- 易理解,字段上有注释,有数据模型图
- 易使用,通用SQL语言操作方便,Mybatis还可以用逆向工程生成代码
- 易维护,社区体系庞大,功能丰富
- 支持SQL,可进行复杂查询
- 适合常规数据分析,报表统计分析等
缺点:
1. 二维表格对多维数据支持差
可以多表关联解决多维数据问题,但又会导致其可读性差,特别是视图,十几张表关联这种,还有查询速度变慢,SQL优化时间成本上升等问题
2. 高并发下读写性能低
并发高的情况(上万次/s请求)易出现死锁,读写性能下降严重,关系型数据库能勉强应付高并发下的读操作,但硬盘IO很难支持高并发下写操作
3. 支撑容量有限
社交类软件如:微博、微信、Facebook每天会产生海量数据,以上软件都拥有上亿的用户数量,其产生的数据每天不低于数十亿计,若使用关系型数据库在这里面进行查询...
4. 支撑容量有限
对数据库升级通常需要停机维护和数据迁移
三、NoSQL数据库
3.1 什么是NoSQL数据库
非关系型数据库严格来说并不是数据库,而是许多数据结构存储方法的集合,比如Redis就是包含了String,Hash,List,Set,ZSet五种数据格式,每个数据格式又提供了一套API用于CRUD
其代表有:Redis,HBase,MongoDB
3.2 NoSQL数据库的优劣
优点:
- 读写性能很高,不通过解析SQL,数据大部分存储在缓存中
- 易扩展,数据格式基于键值对,耦合低
- 更丰富的数据存储格式,键值(Redis),列(HBase),文档(MongoDB),图
- 易部署,成本低,大部分为开源软件
- 适合大数据量,高并发环境,如Web或其它网络数据量的实时分析的应用程序
缺点:
- 社区还不够完善,资源有限
- 不支持SQL,增加额外学习、使用成本
- 数据一致性不够好,若业务对数据一致性要求高不建议使用,如金融行业中购买产品的业务
最后:
通常实际项目开发中,为保证数据安全性、一致性、扩展性、高效性,都是关系型数据库与NoSQL数据库一起使用的
通常海量数据的持久化还是用关系型数据库进行存储,再将热点数据存储在Redis中
四、Redis
4.1 什么是Redis
Redis是非关系型数据库中的键值存储数据库,支持操作五种数据类型(常用的)字符串string,哈希hash,列表list,集合set,有序集合zset,可用于数据库,缓存,消息代理
(Redis的安装,及每种数据类型的使用与应用场景,会在之后的《应用篇》中进行详细的讲解)
4.2 Redis的优劣
优点:
- 高性能,全内存操作,单线程模式,读写性能很好
- 高并发,理论支持QPS 10W/S
- 高可用,主从复制,Redis集群
缺点:
1. 缓存与数据库双写一致性问题
2. 缓存雪崩、击穿问题
这两个问题通常在高并发项目中才会遇到,中小型传统软件企业并不常见
缓存雪崩:缓存同一时间大面积失效,新的请求直接访问到数据库,导致连接异常
缓存击穿:通常是黑客恶意请求缓存中不存在的数据,所有请求直接访问数据库,导致连接异常
3. 缓存并发竞争问题
(以上问题的解决方案将涉及到:过期策略,内存淘汰机制,主从,哨兵,集群,分布式锁等知识,将在之后的《进阶篇》中进行讲解)
4.3 Redis版本介绍
- 版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1)
- 如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2),
笔者是使用的Redis 5.0.8进行学习和实践,对于初学者建议选择一个较新的稳定版本
目前Redis 6已经正式发布了:引入了多线程 IO 特性对性能提升至少是一倍以上,感兴趣的小伙伴可以自行探索
五、参考
六、最后
若有不足,敬请指正
虚心若愚,求知若渴
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。