Redis之初识篇

一、前置知识

1.读写速度

1.1.磁盘
  • 寻址:毫秒ms级别的。
  • 带宽:单位时间内能传输的字节流能有多少,几个G或几M。
1.2.内存
  • 寻址:纳秒ns级别的。

秒=1000毫秒=10001000微妙=10001000*1000纳秒。在寻址上,磁盘比内存慢了10万倍。

  • 带宽:很大

2.I/O Buffer

  • 磁盘有磁道、扇区,一扇区为512 Byte,如果每次从磁盘读取512 Byte会带来一个成本问题,即索引体积太大(叶太多),所以操作系统无论读多少数据,最少从磁盘读取4K大小的数据。

一般操作系统4K,不会造成浪费,也支持存储一些小文件,假如说服务器想做视频录像之类的,4K大小的话,就有点得不偿失,不如换的大一点,一次性读的东西多一些,减少磁盘寻址时间。4K大小其实取决于上层应用对IO的使用量,是IO密集型还是一些小文件。

  • 随着文件变大,速度会越慢,磁盘IO会成为瓶颈。

二、数据库

  • 数据库的出现是为了改善磁盘IO的瓶颈。但整体而言,磁盘IO和数据库的IO总量是相等的,因此就有了索引的概念,如果没有索引,仅仅只是建了数据库和表,不会有太大帮助,依旧很慢。

  • 开始数据是存储在文件中的,随着文件变大,数据增多,查询会变慢。为什么?磁盘I/O成为瓶颈,数据库出现,定义每个data page 大小为4K,把数据存储到一个个的data page中,与操作系统读取数据大小一致,即每次都是一次I/O,但是此时还是全量IO,并没有加快查询速度,必须建立索引,索引也是4K大小,指向每个data page。数据和索引都是存储在磁盘中的,在内存中还有一个B+树(树干)

流程为:用户请求,命中索引,索引加载到内存,然后解析完,得知下次该读取哪一页上的数据,再将其加载到内存读取。充分利用内存读取快,磁盘存储容量大的特点。

在这里插入图片描述

  • 数据库中最小的单位为page页,以4k为单位。
  • 关系型数据库建表,必须先给出schema,数据类型(字节宽度),存数据时倾向于行级存储。先给出字节宽度的好处时,保留了位置,在插入或更新数据时直接进行覆写而不用进行数据移动。
  • 索引也是数据,和表数据一样都存储在硬盘中。在内存中创建一棵B+树用于将索引的区间和偏移存储起来,索引和数据存在磁盘,因为内存有限,存不下这么多的数据,利用索引提高遍历查找的速度,减少磁盘IO和寻址的过程,但数据还是从磁盘获取。

这里引出一个问题:数据库表数据量大的时候,性能下降?(从寻址和带宽两个方面回答)

  • 前提:如果表有索引

增删改:会变慢,因为要维护索引,即索引中的数据需要移动。
查询速度:如果是1个或少量请求的话,查询速度依然很快。
如果是大量并发请求,而刚好查询的数据又落在不同的page页上,磁盘的带宽会影响查询速度。原因是需要依次把page页上的数据加载到内存,当数据量大的时候,就会很慢。

三、折中方案

在这里插入图片描述

四、Memcached和Redis的区别

在这里插入图片描述

  • Memcached也是k,v存储形式,但是value没有类型的概念,而Redis的value有类型的概念。
  • 通常存储数据的方式有三种:

k = 1 k = a
k = [1,2,3] k = [a,b,c]
k = {k=a} k = {[1,2],[3,4],[5,6]}

  • 但从存储结构来看,k,v也可以存储复杂类型数据,即满足所有需求,为什么value要分类型呢?可以拿一个client从缓存中取出某一个元素来分析:

Memcached
第一,返回value所有的数据到client,server端网卡IO会拖慢
第二,客户端需要编写复杂的代码解码返回的数据
Redis
value的类型并不是最重要的,重要的是Redis的server中有对应每种类型的方法,客户端只需调用对应方法即可,不需要编写复杂代码。(计算向数据移动:memcached会返回大量结果数据,然后在client解码;而Redis server直接根据类型的方法得到结果数据,将少量的数据返回给client!)

五、插曲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
黑马Redis高级是一个关于Redis高级应用的教程。在这个教程中,涉及到了创建文件和目录的操作,以及配置Redis实例的过程。在创建文件和目录的步骤中,可以使用以下命令: 1. 创建文件和目录: - 创建redis目录:cd /home && mkdir redis - 在redis目录下创建myredis1、myredis2和myredis3目录:mkdir /home/redis/myredis1, mkdir /home/redis/myredis2, mkdir /home/redis/myredis3 - 在myredis1、myredis2和myredis3目录分别创建myredis.conf配置文件和data目录:touch /home/redis/myredis1/myredis.conf, mkdir /home/redis/myredis1/data, touch /home/redis/myredis2/myredis.conf, mkdir /home/redis/myredis2/data, touch /home/redis/myredis3/myredis.conf, mkdir /home/redis/myredis3/data - 创建mysentinel1、mysentinel2和mysentinel3目录:mkdir /home/redis/mysentinel1, mkdir /home/redis/mysentinel2, mkdir /home/redis/mysentinel3 2. Redis实例信息如下: - IPPORT角色 - 10.13.164.55:7001 master - 10.13.164.55:7002 master - 10.13.164.55:7003 master - 10.13.164.55:7004 slave - 10.13.164.55:7005 slave - 10.13.164.55:7006 slave 根据这些信息,你可以按照上述步骤创建文件和目录,并配置Redis实例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [黑马Redis6高级](https://blog.csdn.net/D_boj/article/details/131712945)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值