ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

redis 笔记-1

2020-03-27 15:55:45  阅读:254  来源: 互联网

标签:AE socket redis 笔记 处理器 客户端 setbit


课前知识

1.磁盘的性能影响因素:

寻址: ms
带宽: G/M

2.内存

寻址:ns
带宽:很大
磁盘比内存在寻址上满了 10W倍

3 I/O buffer: 成本问题

磁盘与刺刀扇区,一个扇区512 Byte,带来一个成本变大 ---> 索引
4K操作系统,无论i读多少,都是 最少凑够磁盘那 4K的数据

4 一问:

4.1、随着文件变大,速度变慢是 为什么?

应该众所周知: 硬盘IO是最大的瓶颈
4.2、数据库中 表越大,性能下降?
有索引的前提下, 增删改 变慢
1个或少量的查询 依然很快。(索引结构相关)
并发大的时候 会受到 硬盘 带宽 的影响。

redis的前世今生

1、redis的出现 必然是为了实现某种场景出现的。
2、与memcached的比较

memcached: 只是简单的 k-v,重点, value是没有类型的概念的; 需要返回value 所有的数据 到client,经历 server 网卡 IO, 需要client 去自己实现获取数据的逻辑;
redis 对 value 提供了 丰富的数据类型,来处理不同的数据结构,提高处理的效率。

敲重点:计算向数据移动(目前还不是很理解)

redis安装

参考。。

redis 原理

JVM 一个线程的成本大约 1M,内存消耗
线程多了,调度成本增加,cpu浪费
redis是单进程 单线程的 单实例

IO的演进

IO在linux中的演进
涉及操作系统,目前还不能很好的吸收理解。
简单的说就是 请求 从 同步阻塞BIO -> 同步非阻塞NIO -> IO多路复用(select) -> epoll(虚拟内存映射共享部分内存)的 改进历史。
每次改变都是基于当前的缺点做出的改进。

redis的线程模型

参考 中华石杉 老师画的一张图,能比较形象说明
redis线程模型

文件事件处理器

采用 IO多路复用机制  同时监听多个 socket,根据 socket上的事件 来选择对应的 事件处理器 来处理这个事件。

文件事件处理器的结构包含4个部分:多个socket,IO多路复用程序,文件事件分派器,事件处理器(命令请求处理器、命令回复处理器、连接应答处理器,等等)。
多个socket可能并发的产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,但是会将socket放入一个队列中排队,每次从队列中取出一个socket给事件分派器,事件分派器把socket给对应的事件处理器。

客户端与redis通信的一次流程

在redis启动初始化的时候,redis会将连接应答处理器跟AE_READABLE事件关联起来,接着如果一个客户端跟redis发起连接,此时会产生一个AE_READABLE事件,然后由连接应答处理器来处理跟客户端建立连接,创建客户端对应的socket,同时将这个socket的AE_READABLE事件跟命令请求处理器关联起来。
当客户端向redis发起请求的时候(不管是读请求还是写请求,都一样),首先就会在socket产生一个AE_READABLE事件,然后由对应的命令请求处理器来处理。这个命令请求处理器就会从socket中读取请求相关数据,然后进行执行和处理。
接着redis这边准备好了给客户端的响应数据之后,就会将socket的AE_WRITABLE事件跟命令回复处理器关联起来,当客户端这边准备好读取响应数据时,就会在socket上产生一个AE_WRITABLE事件,会由对应的命令回复处理器来处理,就是将准备好的响应数据写入socket,供客户端来读取。
命令回复处理器写完之后,就会删除这个socket的AE_WRITABLE事件和命令回复处理器的关联关系。

因为 网络的因素存在,redis只 能保证 同个client中的请求是有顺序的。

redis 是 二进制安全的

需要对所有客户端进行 编码的约定,防止出现乱码

redis的类型

string 类型

可存放的类型

  • string

    • 场景:
  • 数值

    • 常用指令: incr
    • 场景:

      抢购,秒杀,点赞。 计数,限流。

  • bitmap

    • 常用的指令: setbit, bitcount, bitops, bitop
    • 场景:
      • 统计用户登录天数,且窗口随机
        setbit sean 1 1 setbit sean 7 1 setbit sean 364 1 STRLEN sean BITCOUNT sean -2 -1
        • 有效活跃用户统计

            setbit 20190101   1  1
            setbit 20190102   1  1
            setbit 20190102   7  1
            bitop  or   destkey 20190101  20190102
            BITCOUNT  destkey  0 -1
          
          

List

有序
场景:
+ 栈
+ 队列
+ Lindex获取:数组
+ 阻塞,单播队列FIFO

hash

类似 hashmap,对对象的对个属性进行方便操作
场景:
点赞,收藏

set

无序
场景:
共同关注,抽奖(人多奖品少,人少奖品多)

sorted set

场景:
排序
实现: skiplist(跳跃表)

标签:AE,socket,redis,笔记,处理器,客户端,setbit
来源: https://www.cnblogs.com/idea-persistence/p/12581922.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有