Redis之1——Redis简介
目录
1 为什么要有Reids?
在一些网站中,会在特定的时候出现两种情况,海量用户和高并发,比如京东的618,年底的12306,12306崩溃的现象相信在坐的各位都见过。那么,在海量用户和高并发的情况下,为什么会造成各大网站的崩溃呢。
罪魁祸首就是关系型数据库,我们知道CPU是和高速缓存进行数据交换的,高速缓存是和内存进行数据交换的,而内存的数据交换是和磁盘进行的。我们知道,关系型数据库例如MySQL,它的信息都是存放在硬盘上的,在用户进行访问操作的时候,需要将数据从硬盘中一层一层的往上传递,因此在海量用户和高并发的情况下,性能低下,造成崩溃。
下面列出了关系型数据库的几个瓶颈:
- 性能瓶颈:磁盘IO性能低下
- 扩展瓶颈:数据关系复杂,扩展性能差,不便于大规模集群
根据关系型数据的几个瓶颈,那么海量用户和高并发情况下,为了防止崩溃的一个解决思路就是:
- 降低磁盘IO次数,越低越好:采用内存存储
- 去除数据间的关系,越简单越好:不存关系,只存数据
这样的一种解决思路,其实就是NoSql。
2 什么是NoSql
NoSQL(Not Only SQL),字面意思为不仅仅是SQL,它泛指非关系型数据库,作为关系型数据库的补充。
注意:NoSQL这是关系型数据库的一种补充,真正的数据还是存放于关系型数据库中,存放于磁盘中。即NoSQl中的数据来源与关系型数据库。
NoSql的作用是应对基于海量用户和海量数据前提下的数据处理问题。有可伸缩、扩容,大数据量下的高性能,灵活的数据模型等特征。
常见的NoSql数据库有以下几种:
- Redis
- memcache
- HBase
- MongoDB
3 以电商场景为例的海量用户、高并发的解决方案
在上图中,热点信息是来源于前面的四种信息的,从模型中我们可以看出,电商会根据数据的特征将其存放在不同的地方,然后对外提供服务,图中很清晰的阐述了一点:NoSQL是关系型数据库的补充。
上图可以让大家了解到在编程中到底NoSQl是处于一个什么样的位置。
4 Redis的概念
Redis(REmote Dictionary Server)是一个用c语言开发的开源的、高性能的键值对(key-value)数据库。
我再通俗的理解以下,首先它是一个数据库,数据库里面的信息不像我们MySQL那样有表,表里面才是一条一条的数据。
redis里面存放的直接是一条一条的数据,并且数据的格式都是键值对形式的,即age : 15, name :‘zhangsan’这样的形式。
redis的特征如下:
由于采用了键值对的形式,因此redis数据库中的数据没有必然的关联关系,同时由于redis内部采用单线程机制进行工作,安全性能有了保证。在官方的测试数据中,50个并发执行100000个请求,读的速度是110000次/s,写的速度是81000次/s,性能非常优越。
同时redis支持多种数据类型:包括string、list、hash、set、sorted_set等。注意这些类型说的都是value的类型,因为键的类型都是string类型的。
最后redis还支持持久化。
5 redis的应用场景
- 热点数据的加速查询(主要场景),如商品推荐、热点新闻等
- 任务对列,秒杀、抢购等
- 即时信息查询,排位榜,网站访问统计等
- 时效性信息,验证码控制,投票等
- 分布式数据共享,如分布式集群架构中的session分离、
- 消息对列