redis-0.redis介绍及NIO原理(杂谈)

reids

redis 介绍

常识

首先说个常识,计算机里面的数据是存入磁盘 ,这里面其实有两个维度指标
1.寻址:ms 是毫秒级别的
2.带宽:G/M 多少G多少M
内存
1.寻址:ns 纳秒级别
2.带宽:很大
秒>毫秒>微秒>纳秒。磁盘比内存慢了10W倍,在寻址上面

I/O buffer:成本问题
磁盘有磁道,扇区,一扇区 512Byte带来一个成本变大索引
4K 操作系统默认,无论你读多少,都是最少4k从磁盘拿。

所以文件变大速度就会变慢

关系型数据库

在这里插入图片描述

而数据库出现 data page 大小是4k,刚好和硬件磁盘的小大对上。可以缩小一定的io 的操作,避免浪费,因为无论怎么样都是4k.但是这样数据库还是比较慢的,所以数据库出现了索引,如上图所述,索引对应这每一个page,快于检索。B+T里面存的是一种区间,比如1,7,10,如果查询6的话会落入第一个data page索引,在从索引里面查找对应的data page数据

关系型数据库建表:必须给出schema类型:字节宽度存:倾向于行级存储

面试题 数据库:表很大,性能下降?如果表有索引增删改 变慢查询(维护数据索引,所以会变慢)
速度呢?1,1个或少量查询依然很快2,并发大的时候会受硬盘带宽影响速度

非关系型数据库

其实还有一种内存数据库 SAP–HANA 。但是这种人家收费,有个知识是: 数据在磁盘和内存的体积是不一样的。
这种情况大家都不想掏钱又不想自己家服务不变慢就出现了 redis 等缓存类的非关系行数据库,基于两个基础设施
计算机基本常识:2个基础设施1,冯诺依曼体系的硬件2,以太网,tcp/ip的网络(潜台词就是不稳定)
如果上面两个基础设施都搞定,就不会再有非关系类型出现

https://db-engines.com/en/ 这个网站也是看到数据库的排名
在这里插入图片描述

也可以看到目前 PostgreSQL 的火热

redis

redis中文官网:http://redis.cn/

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

在这里插入图片描述

其实redis类型不是很重要,重要的是redis的server中对每种类型都有自己的方法index()lpop

redis 是单进程,单线程,单实例的,并发的时候请求如何变得很快,操作系统是有内核(kernel)的概念,用户进来首先进入内核,内核在epoll (多路复用) 给redis

在这里插入图片描述
客户端到Linux是毫秒级,Linux内存交互是纳米级

io 技术是不断发展的

BIO

早先的时候内核只有read fd fd(代表Linux文件描述符),这个时候socket是阻塞的,线程在处理的时候,剩余线程只能等待

在这里插入图片描述

NIO

yum install man man-pages 安装一下man 使用手册

# 查看read 方法
main 2 read 

linux 里面的一切皆文件

在这里插入图片描述

#查看redis
ps -ef|grep redis
# 进入改进程下面的fd文件
cd /proc/20094/fd

在这里插入图片描述

man 2 socket 查看socket操作手册,我们可以看到socket 是可以做到非阻塞的,之前BIO是block的

在这里插入图片描述

同步非阻塞
在这里插入图片描述

NIO 多路复用

上面nio 因为用户进程需要不断轮询kernel 操作,这个时候用户空间是做不了什么的,需要内核去操作升级

 # 查看select操作
 man 2 select 

在这里插入图片描述

内核select 主要是监控更多的fds 文件描述符

在这里插入图片描述

以前的时候是写一个死循环,现在是不写死循环了,如果有1000,就把这1000个传给你,如果有修改就返回给用户空间,然后在去进行read操作,减少用户态,内核态的切换

在这里插入图片描述

epoll 伪AIO

window 实现了AIO操作

 main 2 mmap

在这里插入图片描述

这个时候mmap 出现了,mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。

在这里插入图片描述

man epoll

查看epoll
其实 epoll 里面并没有使用 mmap 只是使用了 红黑树与链表 便于快速读取查找

kafka的io 操作,nginx杂谈

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值