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 本篇背景 ...
随机推荐
- Codeforces Round 303 (Div. 2)C. Kefa and Park(DFS、实现)
@ 目录 题面 链接 题意 题解 代码 总结 题面 链接 C. Kefa and Park 题意 求叶节点数量,叶节点满足,从根节点到叶节点的路径上最长连续1的长度小于m 题解 这道题目主要是实现,当 ...
- 各大OA调试账户默认账户口令
1.今目标地址:http://web.jingoal.com/mgt/用户名:admin@8216261密码:1a2s3d4f5g2.IBOS博思协同地址:http://demo.ibos.com.c ...
- vagrant 多个box的操作|共享目录失败
本来机器上已经有一个Ubuntu的box了,今天想在安装一个centos的box,结果还折腾了很长时间. 多个机器的命令 添加box的时候需要使用名称,一个的时候可以忽略名称 vagrant box ...
- 20个Python random模块的代码示例
本文分享自华为云社区<Python随机数探秘:深入解析random模块的神奇之处>,作者:柠檬味拥抱. 标准库random函数大全:探索Python中的随机数生成 随机数在计算机科学和数据 ...
- c语言中的指针,数组和结构体结合的一个经典案例
一 你真正懂了C语言了吗? 很多人刚把c语言用了两年,就以为很懂,等遇到稍微深层次一点的问题,就卡住了.这里,有一个问题,可以考察你对这三者理解如何. 二 一个例子: #include <std ...
- mybatis-plus处理blob字段
转载自:www.javaman.cn 在 Spring Boot 项目中使用 MyBatis-Plus 处理 longblob 字段时,我们可以按照以下步骤进行操作.假设 longblob 存储的是字 ...
- Linux高级IO
readv.writev API: #include <sys/uio.h> ssize_t readv(int fd, const struct iovec* vector, int c ...
- Flux中的map、flatMap、concatMap的区别
flatMap.map和concatMap都是在Flux中用于进行数据转换和处理的方法,但它们在处理元素和顺序上有一些区别: map方法: map方法用于对Flux中的每个元素进行一对一的转换. 对于 ...
- KingbaseES数据目录结构
KingbaseES数据库结构 [kingbase@postgres V8]$ tree -LP 2 data/ . ├── data │ ├── base # 存储用户创建的数据库文件及隶属于用 ...
- 如何使用Java代码混淆技术保护您的应用程序
摘要 本文探讨了代码混淆在保护Java代码安全性和知识产权方面的重要意义.通过混淆技术,可以有效防止代码被反编译.逆向工程或恶意篡改,提高代码的安全性.常见的Java代码混淆工具如IPAGuard.A ...