redis 一百二十篇(历史发展)之第二篇
正文
简介:
Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。
Redis 与其他 key - value 缓存产品有以下三个特点:
Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
Redis支持数据的备份,即master-slave模式的数据备份。
redis 是nosql的一种,那么看下,有哪几种nosql吧。

他们的对比在:https://database.51cto.com/art/201809/583344.htm
大体有上面4种,从上面上看应该属于第一种。
那么什么时候应该用nosql:
数据模型简单
需要灵活更强的it系统
对数据库性能要求较高
不需要高度的数据一致
对于给定的key,比较容易映射复杂值的环境
其实在数据库开始的时候其实都是nosql,进入到关系型数据库其实是划时代的一个过程,那么是否是历史倒退了呢?
看下这一段历史:
首先没有数据库,没有数据库意味着每次都要手动输入。
后来人们通过写入到文档中,作为保存,但是文档到处乱丢,痛苦不堪,人们都是通过人力管理。
后来出现了文档管理器,文档管理器就是用来管理文档的,这时候开始欢呼了。
但是其实不管是不是文档,人们处理的数据,因为文档具有封闭性,也就隔离了数据,那么数据之间的关系就相当迷茫。隔离数据需要划重点,以前我们将数据与数据的关系紧密连接,现在我们需要隔离。
因为数据的隔离,人们就创建了关系型管理文档的程序,其实就是一些特殊的格式的文件可以代表文档与文档之间的关系。
在当时,关系型数据库是划时代的,为什么关系型数据库解决人类的痛点呢?其实也很好解释,相当于国家制定了一部法典,有了法典国家就能文档。
那么看下关系型数据库开发的年代吧。
第一代:

这种在学校的时候没少写,通过连接数据库和数据库通信,交换数据即可。
这种东西相当于单线的,在高并发访问下问题也很明显:
1.数据会越来越多,每次备份的时候呢,会出现很多问题,具体问题可参考让10G左右的数据库备份一下,或者启动运行一下。
简单的说就会形成一个庞然大物,无论是管理数据还是索引,都会出现很多问题。
2.会出现读写混乱,一个数据库一直边都边写,其实是很容易出现性能下降问题的。
第二代:
这个时候出现缓存,一开始通过文件缓存而不是说使用单纯的cache,因为还是要持久化的,会保存成各个不同的缓存文件,然后宕机后再读取,可以想象到启动速度,关键是可能还会丢数据。
这个时候其实就已经出现了集群和分布式,那么新贵族缓存矛盾也被激化。
这时候缓存就独立出来了。

Memcached是其中一个典型代表。
Memcached作为一个独立的分布式的缓存服务器,为多个web服务器提供了一个共享的高性能缓存服务。
在这里体现出的是隔离,因为采用分布式把一个app才分出到多个web服务器上,而他们的缓存是隔离的,同时也是共享的。
第三代:
在这里其实通过缓存解决了缓解mysql的读写问题,但是只是缓解,每一个mysql都存在着读写同时进行的问题。
那么这个时候就需要读写分离,也就是我们经常提到的Master-Slave模式。
人们在创造读写分离后,发现读没有啥问题,因为可以几个一起读一条数据,但是写只能一个一个来,其实软件是实现共同编辑的,但是感觉到现在也不是很理想。
那么争对写,出现了分库分表,水平拆分,集群等等等一些列东西,就是为了解决写的压力,很多数据库群、CAP等名称就是在这个时代诞生的。
总结
下一文为cap等一些术语的介绍。
redis 一百二十篇(历史发展)之第二篇的更多相关文章
- redis 一百二十篇(简单介绍)之第一篇
前言 总结自己的redis,日常使用不是特别频繁,所以比较基础. 开篇 redis 是无关系型数据库,因为其实内存数据库,所以常常和他的竞争对手memcached对比,因为两者原理基础相似,存储方式也 ...
- salesforce零基础学习(一百二十四)Postman 使用
本篇参考: Salesforce 集成篇零基础学习(一)Connected App salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesfo ...
- redis(二十四):Redis分布式锁以及实现(python)
阅读目录 什么事分布式锁 基于redis实现分布式锁 一.什么是分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无 ...
- redis(二十):Redis 架构模式实现(主从复制)
什么是主从复制 我们可以通过slaveof <host> <port>命令,或者通过配置slaveof选项,来使当前的服务器(slave)复制指定服务器(master)的内容, ...
- salesforce零基础学习(一百二十八)Durable Id获取以及相关概念浅入浅出
本篇参考: salesforce 零基础开发入门学习(十一)sObject及Schema深入 https://developer.salesforce.com/docs/atlas.en-us.api ...
- Java操作redis【二十】
1.首先需要将redis的绑定地址为127.0.0.1去掉,同时将redis的保护模式去掉,并且开放6379端口. 如果是保护模式需要输入密码才能连接. (1)去掉绑定地址: (2)去掉保护模式: ( ...
- Java开发笔记(一百二十五)AWT图像加工
前面介绍了如何使用画笔工具Graphics绘制各种图案,然而Graphics并不完美,它的遗憾之处包括但不限于:1.不能设置背景颜色:2.虽然提供了平移功能,却未提供旋转功能与缩放功能:3.只能在控件 ...
- redis(二十二):Redis 集群(proxy 型)一
redis伪集群搭建 搭建环境是vmware虚拟机+ubuntu-14.04,以redis伪集群的方式搭建搭建,一共实现了6台机器集群的搭建,三个master节点和三个slave节点. <pre ...
- salesforce零基础学习(一百二十)快去迁移你的代码中的 Alert / Confirm 以及 Prompt吧
本篇参考: https://developer.salesforce.com/blogs/2022/01/preparing-your-components-for-the-removal-of-al ...
- salesforce零基础学习(一百二十五)零基础学习SF路径
本篇参考: https://boulder-bard-27f.notion.site/Salesforce-Learning-e990864695674f07b99a5f8955770bd4 本篇背景 ...
随机推荐
- Mybatis中使用choose/when语句采坑记
项目中写查询语句的时候,时常会使用到Mybatis中的choose/when语句,根据不同的条件执行不同的分支. 最近在使用这个语句的时候,出现问题导致这个语句不能正确执行,排查很久才解决这个问题,因 ...
- mybatis使用postgresql中的jsonb数据类型
最近新开发的一个功能使用到postgresql中的jsonb数据类型.架构师可能考虑到这种数据格式更加便于存储json格式的数据,因此考虑使用这种数据类型.自己以前未曾使用过这种数据类型,因此需要现学 ...
- 痞子衡嵌入式:使用恩智浦GUI Guider快速创建全新LCD屏示例工程的步骤
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是使用恩智浦GUI Guider快速创建全新LCD屏示例工程的步骤. 在痞子衡旧文 <在i.MXRT1170上快速点亮一款全新LCD ...
- 手爱图仕Aputure MC RGB摄影补光灯体验测评
前记 作为一个智能硬件设备狂兼智能硬件方案提供商,工作就是和各种智能硬件打交道.最近无意入手了一个爱图仕Aputure MC RGB摄影补光灯.顺便体验了几天,既然体验了,肯定要写一个体验结果的.这 ...
- Java线上诊断神器Arthas:常用命令详解!
有关Arthas基本介绍.安装部署.arthas idea插件在上篇文章已经介绍过,这里就不在重述. 文章地址:Java诊断工具Arthas:开篇之watch实战 上篇重点讲了 watch 命令.这篇 ...
- 活动报名|3DCAT实时渲染云行业生态合作系列沙龙之“云XR如何赋能虚拟仿真实验教学”线上活动邀您参会
当前,虚拟现实发展方兴未艾,"XR+教育"融合发展前景广阔. 3DCAT实时渲染云积极联动教育行业渠道商等生态合作伙伴,合力打造"虚拟现实实验室"." ...
- 在winform中如何实现双向数据绑定?
什么是双向数据绑定? 双向数据绑定是一种允许我们创建持久连接的技术,使模型数据和用户界面(UI)之间的交互能够自动同步.这意味着当模型数据发生变化时,UI会自动更新,反之亦然.这种双向数据绑定极大地简 ...
- Jvm之用C#解析class文件
项目地址 GitHub - lxw112190/JavaClassReader: C# JavaClassReader 项目结构 一个简单的测试类 public class Test { Intege ...
- vue三种插槽
1. 作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 ===> 子组件 . 2. 分类:默认插槽.具名插槽.作用域插槽 3. 使用方式: a.默认插 ...
- KingbaseES V8R6 等待事件之DataFileRead
等待事件含义 IO:DataFileRead等待事件发生在会话连接等待后端进程从存储中读取所需页面,原因是该页面在共享内存中不可用或无法找到. 所有查询和数据操作(DML)操作都访问缓冲池中的页面,语 ...