Redis 产生背景

1.1.数据存储的发展史

1.1.1.磁盘时代

很久之前,我们的数据存储方式是磁盘存储,每个磁盘都有一个磁道。每个磁道有很多扇区,一个扇区接近512Byte。

磁盘的寻址速度是毫秒级的,带宽是GB/M的。内存是ns级的,带宽也比磁盘大上好几个数量级。总体来说,磁盘比内存在寻址上慢了接近10W倍。

在这段历史中,我们的面临的问题是,I/O问题。在读写文件时,我们常常面临很大的I/O成本问题。但是最初有个最初的解决方案是加一个buffer。

科普:什么是buffer?
buffer是指一个缓冲区,我们在缓冲区来进行一个暂时的存放,之后统一运输给内存,这样会使得I/O的性能有略微提升。
1.1.2.数据库的产生

任何技术都不会平白无故产生。

我们数据库技术就是由于磁盘的I/O瓶颈。为了解决这个问题,我们将磁盘扇区分为4K的一个个小的分区,构成索引。有了这些索引值,我们能通过索引,进行更加便捷的查找。为了我们能够更快的查找,我们将索引使用B+树进行存储。

科普:B+树是什么?
我们普通的1-0树,又称二叉查找树(二叉排序树),二叉查找树和排序树是同一种树,就是单纯的1-0树,按照中序遍历的存储方式进行从小到大(从大到小)进行存储。(初学者可能误以为两种树,包括我刚开始学习数据结构的时候)。
二叉查找树(二叉排序树)由于在插入和删除的时候,容易出现不太ok的情况,例如,可能在删除过程中删除为一个链表,这样查找效率依旧会变得很低。所以,我们使用旋转,通过左右旋转,将这种“链表”式(极端情况下)的树转化为左右平衡的树,这就是所谓的B-树。(注意误区,B树和B-树是一个树么?初学者认为后面一种是B减树,实际不是,是翻译过来的时候加的分隔符。B为Balance平衡的意思)
当然,我们的数据库文件不是二叉的,文件系统也不是,所以,我们多叉的查找树,就是所谓的B+树。+号代表每个节点不止二叉的意思。 (用自己的话粗略总结,详细还是看B-tree,B+tree的定义)

在我们数据库的查找中,我们遇到一个问题?那就是字节宽度问题。我们建库的时候必须给出schema,我们行级存储,即使是该列为空,依旧要占位,那么,数据量庞大的时候,将会浪费很大的存储空间。但是这样的好处是,我们可以在update的时候不需要移动数据的位置。

1.1.3.key-value数据库的产生

任何技术都不会平白无故产生。

我们将数据库发展到极致,产生出类似SAP公司的HANA数据库。这种数据库,硬件需求大,内存约2T,硬件软件服务总和约2亿一个套餐。

随着互联网的发展,我们面临了一个新的问题。如何才能抵挡高并发,以及大数据导致的查找变慢呢?(注意,数据量变大,仅仅影响多数据查找,单数据查找并不会影响性能。我们的业务逻辑,通常是多条数据查找,所以才会有瓶颈)

于是我们的k-v数据库产生了,这依赖于两个基础设施。冯诺依曼体系的硬件,以太网,和tcp/ip网络。参考附件:冯诺依曼体系图

科普:什么是冯诺依曼体系?
我们的操作系统老师是个年纪很大的教授,这边引用他的上课原话。
冯诺依曼体系,至今没有一个明确的定义。有的书说有5个,有的书说有7个,但是,我依照某年考研题,来规范一下冯诺依曼体系。
冯诺依曼体系由五部分组成,控制器,运算器,内存,总线,硬盘和I/O接口6部分组成。 (如何记忆冯诺依曼体系构成:CPU分为控制器运算器,其他都为CPU服务,运算需要内存,连接需要总线,我们要读写必须要I/O接口。一切以CPU考虑,就能记全6个) 参考附件:冯诺依曼体系图

Redis01——Redis产生背景的更多相关文章

  1. Redis01 Redis服务端环境搭建

    1 前提准备 下载 VM centos6 安装包,安装好虚拟系统 2 安装远程连接工具 工具获取 2.1 SecureCRT.Xshell 连接远程服务器 2.2 WinSCP 向远程服务器发送文件 ...

  2. Redis01——Redis介绍

    1.NoSQL数据库概述 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库. NoSQL 不依赖业务逻辑方式存储,而以简单的key-value模式 ...

  3. Redis01——Redis究竟支持哪些数据结构

    Redis已经越来越多地应用到互联网技术中,而关于Redis的相关问题,也成为面试中必不可少的一部分,本文开始将会逐渐把我了解到的关于Redis的一些面试问题整理出来,供各位参考,如有不对之处,烦请指 ...

  4. redis学习(一)

    一.redis简介 Redis是基于内存.可持久化的日志型.key-value高性能存储系统.关键字(Keys)是用来标识数据块.值(Values)是关联于关键字的实际值,可以是任何东西.有时候你会存 ...

  5. Redis 5.0 集群搭建

    Redis 5.0 集群搭建 单机版的 Redis 搭建 https://www.jianshu.com/p/b68e68bbd725 /usr/local/目录 mkdir redis-cluste ...

  6. redis的哨兵集群,redis-cluster

    #主从同步redis主从优先1.保证数据安全,主从机器两份数据一主多从2.读写分离,缓解主库压力主redis,可读可写slave身份,只读   缺点1.手动主从切换假如主库挂了,得手动切换master ...

  7. redis学习历程

    redis只知道作用于缓存,其它一无所知,所以现在系统的 学习下,这样应用的时候可以考虑多面性和实用性 首先先了解一下redis的背景和概念 背景 Redis是一个开源的使用ANSI C语言编写.支持 ...

  8. Redis高可用升级

    前言: 缓存对应实时性要求比较高的业务需求可谓十分重要,但缓存中的实时数据一旦丢失,将直接影响整个业务功能.考虑到各场景的业务需求,redis推出了高可用的方案,即:主从+哨兵的HA机制. 准备 &q ...

  9. 使用 HAProxy, PHP, Redis 和 MySQL 轻松构建每周上亿请求Web站点

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

随机推荐

  1. .NET下的对称加密算法

    1.关于.NET下的对称加密算法.    .NET Framework类库提供了对称加密.散列函数.非对称加密.数字签名等现有的主流加密算法..NET中默认实现了4种对称加密算法:DES.Triple ...

  2. Unity Shader的形式

    (1)表面着色器 表面着色器是Unity自身的一种着色器代码类型.它需要的代码量很少,Unity在背后做了很多工作,但渲染的代价比较大.但Unity在背后仍旧把表面着色器转换成对应的顶点/片元着色器. ...

  3. Docker 面试题

    Docker 面试题 Docker? Docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行. CI(持续集成)服务器的功能是什么? ...

  4. java发送邮件(一)--补充添加附件

    今天来记录一下如何使用java来发送邮件 背景 之前项目有个需求,当产品出现故障时会把情况上送给服务器,服务器发送邮件将故障产品的位置以及故障信息等告知维修人员.发送邮件的接口不是我负责的,但是有兴趣 ...

  5. 【Abode Air程序开发】打包并导出

    打包并导出 将移动设备应用程序打包并导出到在线商店 导出用于发行的 Android APK 包 导出用于发行的 Apple iOS 包 使用命令行进行创建.测试和部署 使用 mxmlc 编译手机应用程 ...

  6. C学习笔记-数据类型

    常量 在程序中不可变化的量,也就不可赋值 常用两种定义方式,#define和const 另外还有一个字符串常量 define #define MAX 100 #define在预编译的时候,其实也是做的 ...

  7. Spring MVCD框架中调用HanLP分词的方法

    项目简要:关于java web的一个项目,用的Spring MVCd 框架.鉴于参与此次项目的人中并不是所人都做的Spring,为了能够提高效率,建议大家是先抛开SPring来写自己负责的模块,最后再 ...

  8. PHP中addslashes()和htmlspecialchars() 函数的区别及应用

    addslashes()防sql注入: 定义如下: addslashes() 函数返回在预定义字符之前添加反斜杠的字符串. 预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL ...

  9. idea jar 中没有主清单属性

    idea 中maven需要有插件 <build> <plugins> <plugin> <groupId>org.springframework.boo ...

  10. Redis-数据结构与对象-对象

    1. 作用 Redis使用对象作为五种不同类型的底层实现,字符串,列表,哈希,集合,有序集合等 而对象是基于之前的分析的数据结构创建的.每个对象都至少用到一种数据结构,这意味着,Redis五大类型,底 ...