MO_or关于Redis入门篇

nosql-vs-sql-overview-1.png

1、引言

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

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

2、关系型数据库

2.1 什么是关系型数据库

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

2.2 关系型数据库的优劣

优势:

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

缺点:

1. 二维表格对多维数据支持差sql

能够多表关联解决多维数据问题,但又会致使其可读性差,特别是视图,十几张表关联这种,还有查询速度变慢,SQL优化时间成本上升等问题

2. 高并发下读写性能低数据库

并发高的状况(上万次/s请求)易出现死锁,读写性能降低严重,关系型数据库能勉强应付高并发下的读操做,但硬盘IO很难支持高并发下写操做

3. 支撑容量有限缓存

社交类软件如:微博、微信、Facebook天天会产生海量数据,以上软件都拥有上亿的用户数量,其产生的数据天天不低于数十亿计,若使用关系型数据库在这里面进行查询...

4. 支撑容量有限安全

对数据库升级一般须要停机维护和数据迁移

3、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中数据结构

4、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.七、2.九、3.1)
  • 若是是偶数,则为稳定版本(例如2.六、2.八、3.0、3.2),

笔者是使用的Redis 5.0.8进行学习和实践,对于初学者建议选择一个较新的稳定版本
目前Redis 6已经正式发布了:引入了多线程 IO 特性对性能提高至少是一倍以上,感兴趣的小伙伴能够自行探索

5、参考

6、最后

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

相关文章
相关标签/搜索