1.1 问题现象
(一) 场景
-
123XX买票,人数过多,造成系统崩溃
-
X宝活动,人数过多,造成系统崩溃
-
X东活动,人数过多,造成系统崩溃
(二) 特征
- 人数过多
- 高并发
(三) 造成原因
- 性能瓶颈:磁盘IO性能低下
关系型数据库存取数据、读取数据的时候是要走磁盘IO的,磁盘本身性能是比较低的
- 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群
关系型数据库是:表与表之间的关系比较复杂,一个表可能有几个外键,一个外键也可能有多个外键,关系非常复杂,最终非常影响查询的效率,扩展也非常难
(四) 解决思路
- 降低磁盘IO次数,越低越好
内存思想:不使用磁盘,将数据放到内存里
- 去除数据库之间的关系,越简单越好
去除数据库之间的关系,只存储数据
结合两个特征:出现了一个新的概念:NoSQL
1.2 NoSQL
(一) 概念
NoSQL:即 Not-Only SQL(泛指非关系型数据库),作为关系型数据库的补充。非SQL的存储方式,就是所谓的NoSQL。
作用:应对基于海量用户和海量数据前提下的数据处理问题
(二) 特征
- 可扩容,可伸缩
SQL数据关系复杂,扩容难度高,NoSQL不存关系,扩容就简单一些。
- 大数据量下的高性能
包数据非常多的时候,它的性能高,因为不走磁盘IO,走内存,性能肯定要比磁盘IO的性能快一些。
- 灵活的数据模型、高可用
它设计了自己的一些数据存储格式,这样能保证效率上来说是比较高的,可用性高
(三) 常见的NoSQL数据库
目前市面上常见的NoSQL产品:Redis、MemCache、HBase、MongoDB
1.3 Redis概念
(一) 概念
Redis(REmote DIctionary Service)是用C语言开发的一个开源的高性能键值对(key-value)数据库。
(二) 特征
- 数据间没有必然的关联关系
- 内部采用单线程机制进行工作
- 高性能
官方提供测试数据,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s。
- 多数据类型支持
字符串类型:string
列表类型: list
散列类型: hash
集合类型: set
有序集合类型:zset/sorted_set
- 支持持久化
可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用
- 支持数据备份,可以进行数据灾难恢复
即master-slave模式的数据备份 参考:master-slave模式
- 原子
Redis的所有操作都是原子性的,意思是要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性,通过MULTI和EXEC指令包起来(参考:MULTI和EXEC指令)
(三) Redis的应用场景
- 为热点数据加速查询(主要场景):如热点商品、热点新闻、热点资讯、推广类等高访问量信息等。
- 即时信息查询:如各类排行榜、各类网站访问统计、公交到站信息、在线人数信息(聊天室、网站)、设备信号等。
- 时效性信息控制:如验证码控制、投票控制等。
- 分布式数据共享:如分布式集群架构中的session分离、消息队列
**
有问题欢迎指出,有问题说明我记错了
**