Redis(一)nosql和Redis

一、nosql

1.1什么是nosql

Nosql的意思是Not Only Sql,不仅仅是sql,随着互联网的发展,数据类型多种多样(有文字,图片,视频,音频等等)类型的数据,而且数据量非常多,传统的数据库(关系型数据库,MySql,ORACLE,DB2,Sql Server)无法解决这些问题(数据的存储和高效读取问题),就促进了Nosql的发展,Nosql中存储数据没有固定的格式,而传统数据库存储数据都是二维表的形式。在大数据领域中Nosql应用是非常广泛的。

1.2工作中数据问题

1)高并发问题
2)海量数据的存储和高效读取
3)数据库扩展

1.3传统数据库的瓶颈

1)海量数据存储之后需要读取的话读磁盘IO要求很高,磁盘就是瓶颈
2)数据表中数据存储到达上限之后的扩展问题
3)数据库扩展时数据迁移和停机维护问题

1.4数据库架构演变
1.4.1、单机时代

在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付。在那个时候,更多的都是静态网页,动态交互类型的网站不多。
在这里插入图片描述
上述架构下,我们来看看数据存储的瓶颈是什么?
1.数据量的总大小 一个机器放不下时
2.数据的索引(B+ Tree)一个机器的内存放不下时
3.访问量(读写混合)一个实例不能承受
如果满足了上述1 or 3个,进化…

1.4.2、Memcached(缓存)+Mysql+垂直拆分

后来,随着访问量的上升,几乎大部分使用MySQL架构的网站在数据库上都开始出现了性能问题,web程序不再仅仅专注在功能上,同时也在追求性能。程序员们开始大量的使用缓存技术来缓解数据库的压力,优化数据库的结构和索引。开始比较流行的是通过文件缓存来缓解数据库压力,但是当访问量继续增大的时候,多台web机器通过文件缓存不能共享,大量的小文件缓存也带了了比较高的IO压力。在这个时候,Memcached就自然的成为一个非常时尚的技术产品。
在这里插入图片描述
Memcached作为一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务,在Memcached服务器上,又发展了根据hash算法来进行多台Memcached缓存服务的扩展,然后又出现了一致性hash来解决增加或减少缓存服务器导致重新hash带来的大量缓存失效的弊端

1.4.3、Mysql主从读写分离

由于数据库的写入压力增加,Memcached只能缓解数据库的读取压力。读写集中在一个数据库上让数据库不堪重负,大部分网站开始使用主从复制技术来达到读写分离,以提高读写性能和读库的可扩展性。Mysql的master-slave模式成为这个时候的网站标配了。(一主两从)
在这里插入图片描述

1.4.4、分表分库+水平拆分+mysql集群

在Memcached的高速缓存,MySQL的主从复制,读写分离的基础之上,这时MySQL主库的写压力开始出现瓶颈,而数据量的持续猛增,由于MyISAM使用表锁,在高并发下会出现严重的锁问题,大量的高并发MySQL应用开始使用InnoDB引擎代替MyISAM。
在这里插入图片描述
同时,开始流行使用分表分库来缓解写压力和数据增长的扩展问题。这个时候,分表分库成了一个热门技术,是面试的热门问题也是业界讨论的热门技术问题。也就在这个时候,MySQL推出了还不太稳定的表分区,这也给技术实力一般的公司带来了希望。虽然MySQL推出了MySQL Cluster集群,但性能也不能很好满足互联网的要求,只是在高可靠性上提供了非常大的保证。

1.4.5、MySql的扩展瓶颈

MySQL数据库也经常存储一些大文本字段,导致数据库表非常的大,在做数据库恢复的时候就导致非常的慢,不容易快速恢复数据库。比如1000万4KB大小的文本就接近40GB的大小,如果能把这些数据从MySQL省去,MySQL将变得非常的小。关系数据库很强大,但是它并不能很好的应付所有的应用场景。MySQL的扩展性差(需要复杂的技术来实现),大数据下IO压力大,表结构更改困难,正是当前使用MySQL的开发人员面临的问题。

1.4.6、今天什么样子

在这里插入图片描述

1.5、CDN

因为我们系统的和用户在天南海北都有,由于网络的原因,都集中访问一个服务器的话由于地域的区别导致有部分用户响应速度比较慢,我们可以使用CDN解决这种延迟问题,CDN服务器可以自动找到离用户最近的应用服务器,将请求发送到该服务器上提高用户的响应速度。

二、Redis

2.1、Redis概述

是一个非关系型数据库(NoSql),存储的数据都是以key-value存放的。可以用作数据存储,缓存,消息中间件(消息队列),支持五种数据类型: 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets)。

2.2、redis的特点

1)Redis支持数据的持久化,可以将内存中的数据保持在磁盘中(落盘),重启的时候可以再次加载进行使用
2)Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储
3)Redis支持数据的备份,即master-slave模式的数据备份

2.3、nosql数据库的分类

在这里插入图片描述

2.4、Redis数据类型
2.4.1 string(字符串类型)

String是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value
String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。
String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M。

2.4.2 list(列表)

单键多值
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差

2.4.3 set(string类型的无序集合)

Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。
Redis的Set是string类型的无序集合。它底层其实是一个value为null的hash表,所以添加,删除,查找的复杂度都是O(1)。

2.4.4 hash(键值对集合)

​ Redis hash 是一个键值对集合。
​ Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
​ 类似Java里面的Map<String,Object>
在这里插入图片描述

2.4.5 zset(有序集合)

​ Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score) ,这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了 。
​ 因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。访问有序集合的中间元素也是非常快的,因此你能够使用有序集合作为一个没有重复成员的智能列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值