redis知识点
2021-04-23 10:16:50 0 举报
AI智能生成
redis知识点,覆盖面较全
作者其他创作
大纲/内容
常识
磁盘
寻址:MS
带宽:G/M<br>
内存<br>
寻址: ns<br>
带宽:很大
网卡<br>
ms级响应<br>
寻址:磁盘比内存在寻址上慢了10万倍<br>
<span style="font-size: inherit;">IO Buffer:成本问题 <br></span>磁盘与磁道:扇区:一个扇区512Byte<br>如果扇区很多,索引成本变大。<span style="font-size: inherit;"><br></span>
操作系统默认读写4K (从磁盘)<br>data pag 4K
<b>数据在内存和磁盘中的体积不一样</b><br>
在磁盘存储时,存在大量的冗余现象<br>
内存存储优化,压缩等<br>
计算机两个基本设施<br>
冯洛伊曼体系硬件<br>
以太网TCP/IP网络<br>
不稳定,可能丢包<br>
随着文件变大,速度必然变慢<br>
磁盘IO成为瓶颈<br>
<font color="#c41230"><b>IO知识点</b></font>
概述
内存KV数据库<br>
速度快,支持10W+QPS<br>
单进程,单线程,线程安全,采用IO多路复用机制<br>
网络IO和键值对读写是由一个线程来完成的<br>
Value支持丰富的数据类型,且支持数据操作<br>
支持数据持久化<br>
集群,支持主从复制,哨兵<br>
可以用作分布式锁<br>
可以做消息中间件,支持发布订阅<br>
与其他数据库对比
关系型数据库<br>
建表时必须给出shcema<br>
建表时必须定义类型<br>
实质定义数据字节宽度<br>
存的时候:倾向于行级存储<br>
没有数据的地方会padding<br>
查询的时候:B+树->索引page->数据page<br>
通常B+树干存在于内存<br>
实质:减少IO操作(读取的数据量)<br>
数据库很大的时候,性能下降?<br>
如果没有索引,增删改查变慢<br>
查询速度?<br>
一个和少量查询,速度基本不变<br>
并发大,会受硬盘带宽影响查询速度。<br>
和memchached<br>的比较和优势
均为KV型数据库<br>
存储方面<br>
memcache只用到内存<br>
Redis会有部分数据持久化<br>
数据支持类型<br>
memcached没有类型概念
Redis数据有类型,而且数据可以计算<br>
底层模型<br>
Redis直接构建了VM机制,数据可以直接计算<br>
Value大小<br>
memcache 1MB<br>
Redis 可以达到 1GB<br>
极端情况:如果client需要从<br>缓存中取回v中的某一个元素
memcached需要返回<br>全量value数据到client
server端网卡IO压力<br>
client端需要实现代码去解析value值,并操作<br>
redis在server端对每一种类型<br>都有自己的方法,可以定位并<br>返回某一元素
减少数据传输量<br>
客户端不需要额外代码解析数据<br>
Notes:Both在Value都可以存复杂的数据结构,例如JSON。<br>
为啥单线程Redis快?<br>
Redis只是在网络IO和键值对读写上是单线程,其他处理会利用多线程,例如AOF等<br>
多线程不快的几个原因<br>
如果有竞争资源,例如多线程同时访问共享资源,<br>则引来额外开销,而且增加系统设计实现的复杂度,例如锁等
大部分操作在内存上完成<br>
采用高效的数据结构,如哈希表,跳表<br>
采用多路复用机制,使在网络IO操作中能够并发处理大量的客户端请求,实现高吞吐率<br>
允许内核中,同时存在多个监听套接字和已连接的套接字<br>
select/epoll提供了基于事件的回调机制<br>即针对不同时间的发生,调用响应的处理函数
基础数据结构
api使用
应用
持久化
高可用与高性能(集群)
影响性能因素
事物
过期与删除策略
问题汇总
客户端通信协议
RESP2
<b>缺点</b>:只支持基础的数据类型,不能支持复杂类型,其他类型需要做转换
RESP 3
RESP 3 协议增加了对多种数据类型的支持,包括空值、浮点数、布尔值、有序的字典集合、无序的集合等
netty实现RESP解码器文章
收藏
收藏
0 条评论
下一页