MO_or关于Redis入门篇

nosql-vs-sql-overview-1.png

一、引言

本篇文章是整理笔者在学习Redis时的入门篇,将探讨以下几点:

  1. 什么是关系型数据库及其优劣
  2. 什么是NoSQL(非关系型)数据库及其优劣
  3. 什么是Redis及其优劣
  4. Redis版本介绍

二、关系型数据库

2.1 什么是关系型数据库

关系型数据库是按关系模型创建的数据库,关系模型指"一对多,多对一,多对多",最终数据会持久化到磁盘上,其代表有MySQL,Oracle等

2.2 关系型数据库的优劣

优点:

  1. 易理解,字段上有注释,有数据模型图
  2. 易使用,通用SQL语言操作方便,Mybatis还可以用逆向工程生成代码
  3. 易维护,社区体系庞大,功能丰富
  4. 支持SQL,可进行复杂查询
  5. 适合常规数据分析,报表统计分析等

缺点:

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数据库的优劣

优点:

  1. 读写性能很高,不通过解析SQL,数据大部分存储在缓存中
  2. 易扩展,数据格式基于键值对,耦合低
  3. 更丰富的数据存储格式,键值(Redis),列(HBase),文档(MongoDB),图
  4. 易部署,成本低,大部分为开源软件
  5. 适合大数据量,高并发环境,如Web或其它网络数据量的实时分析的应用程序

缺点:

  1. 社区还不够完善,资源有限
  2. 不支持SQL,增加额外学习、使用成本
  3. 数据一致性不够好,若业务对数据一致性要求高不建议使用,如金融行业中购买产品的业务

最后:

通常实际项目开发中,为保证数据安全性、一致性、扩展性、高效性,都是关系型数据库与NoSQL数据库一起使用的

通常海量数据的持久化还是用关系型数据库进行存储,再将热点数据存储在Redis中

四、Redis

4.1 什么是Redis

Redis是非关系型数据库中的键值存储数据库,支持操作五种数据类型(常用的)字符串string,哈希hash,列表list,集合set,有序集合zset,可用于数据库,缓存,消息代理

(Redis的安装,及每种数据类型的使用与应用场景,会在之后的《应用篇》中进行详细的讲解)

4.2 Redis的优劣

优点:

  1. 高性能,全内存操作,单线程模式,读写性能很好
  2. 高并发,理论支持QPS 10W/S
  3. 高可用,主从复制,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 特性对性能提升至少是一倍以上,感兴趣的小伙伴可以自行探索

五、参考

六、最后

若有不足,敬请指正
虚心若愚,求知若渴

你可能感兴趣的:(redis,关系型数据库,nosql,入门)