redis

准备

1.寻址

磁盘寻址是毫秒级别

内存寻址是纳秒级别

所以内存比磁盘快。所以redis比mysql快

其次,磁盘是有带宽限制读的。

2.I/O

i/o就是在读取数据。然后任何IO过程中都包含两个步䠫:第一是等待;第二是拷贝。主要目的就是将数据从内核复制到用户空间

磁盘有磁道和扇区,一扇区512字节,扇区小会导致索引成本变大。所以操作系统读取磁盘时,无论读多少都是最少4k从磁盘读取。
随着文件变大,读取速度由于硬盘I/O的限制会导致读取速度变慢。

问:

数据库表数据很大,增删改都会变慢。那么查询会变慢吗?

答:当个别查询时,不会受影响。但是当并发时,会受带宽的影响。因为当打满了带宽,每一个查询都会等待前面的查询完

3.五种I/O模型

(这里只记三种)

  • BIO(blocking I/O:同步阻塞i0):发送读取请求,内核准备,拷贝,返回数据。如果数据未准成功,则一直等待。(优点:只适用于数据小,并发低。缺点:非常耗时,时间利用率低)。(打王者等人,等到人就开始游戏)
  • NIO(noblocking I/O:同步非阻塞i0):发送读取请求,内核准备,拷贝,返回数据。如果数据未准备好,进程就会去做别的事情,然后轮询去查看数据是否准备好。(优点:提高了时间利用率。缺点:轮询对cpu来说是巨大的浪费,占用大量cpu的时间片)(打王者等人,如果没等到,则切屏去看抖音。期间去轮询问是否准备好,等到确认准备好,那么就开始游戏)
  • I/O multiplexing(多路复用io):将多个读取请求注册在同一管道上。管道与内核交互,当管道种的某一个请求的数据准备好后,就将数据拷贝到用户空间。(原理:将多个进程注册到select或者epoll上,然后select会调用进程阻塞,当任意一个io准备好数据后,就返回)(就是多准备几个手机打王者,然后等不同的几个人,,当有一个人准备好了,那么就开始游戏)
4.select和epoll的区别

epoll和select都是多路复用下的一种机制,多路复用I/O就是通过一种机制,可以监视多个文件描述符,一旦某个文件描述符就绪,就通知程序该文件描述符可以进行读写操作。

select:每次将fd集合(请求集合)拷贝到内核,然后遍历fd调用对应的poll方法,返回可读写的演示码来判断是否资源就绪。

epoll:epoll也需要拷贝fd,但是在整个过程中只会拷贝一次。等等。。。。

基础

redis介绍

redis是key-value数据库。

redis特性(为什么那么快)
  • 完全基于内存
  • 数据结构简单:string,list,set,zset,hash
  • redis是单线程的,避免了多请求的切换,不用考虑锁对性能的消耗。
  • 使用了多路复用的io机制(相比于普通的io机制,多路复用更快速)
  • C语言实现
redis是单线程吗

redis在读写的时候是单线程,但是在其他功能,比如持久化机制,异步删除,集群的数据同步,这些都是额外的线程执行

redis的数据类型

代码实例:

  • String:二进制安全。可以包含任何数据,字符,数字。一个键可存512m。应用场景:常规计数,点赞数,分布式锁。
  • hash:键值对。存储对象,直接可以拿到对象属性。应用场景:存储用户数据。
  • list:链表。顺序,存储。应用场景:消息队列,文章列表
  • set:哈希表实现,不重复,不顺序。应用场景:共同好友,利用唯一性做到访问网站的独立ip
  • sortSet:在set中加入一个权重参数score,score有序排列。应用场景:排行榜,带权重的消息队列


    redis-hash.png
redis-list.png
redis-set.png
redis-string.png
redis-zset.png
redis的消息发布订阅
redis-publish.png
什么是缓存穿透

是针对数据库和缓存中都没有的数据。有些恶意的key不命中缓存直接打到数据库,数据库也没有这样的数据。然后就被大量的这种key进行攻击。

避免:1.缓存那些返回值为空的key。2.过滤那些一定不正确的key(布隆过滤器)

什么是缓存击穿

针对缓存中没有但数据库有的数据。当热点数据key失效后,瞬间涌入大量的请求来请求同一个key。然后没来得及缓存,导致数据库压力过大。

避免:1.设置热点数据永不过期。2.缓存预热

什么是缓存雪崩

针对缓存中没有但数据库有的数据。短时间,大量的key过期,导致请求全部打在了数据库上。

避免:1.设置缓存时间分散。

redis的缓存失效策略
  • 惰性删除:当发现命中的key失效时就删除
  • 定期删除:每隔一段时间就随机抽取一批key,如果失效就删除
redis的持久化机制
  • aof:aof是将每一条(写删)指令都记录,然后宕机后恢复
  • rdb:是每隔一段时间就将数据快照。过程(bgsave):fork一个子进程,先将数据写入临时文件,然后替换之前的文件,用二进制压缩存储。整个过程中主进程不进行任何io操作
aof和rdb的优缺点

rdb:适合大规模数据恢复,但是对数据的完整性不高。在一定间隔做一次备份,那么就会丢失最后一次快照更改数据。但性能比较好

aof:性能较差但是数据完整性比较好

redis的混合持久化机制

混合持久化机制。

rdb会丢失最后一次数据,aof备份全部操作命令的文件又太大。那么,当宕机时,先执行rdb,再rof上一次rdb到宕机时的数据,那么就可以完整的利用两者的优点。

redis,mysql如何保证双写一致性

一般使用延迟双删。写数据时,先删除redis,然后更新数据库,再延迟删除redis

  • 第二次删除延迟是因为,更新数据库需要时间,不延迟,可能数据库没更新就已经执行删除操作了
  • 第二次删除,可能会有请求在第一次删和更新数据库中间发生,所以保证数据的统一需要进行二次删除
redis的使用场景
  • 缓存
  • 队列:对list进行pop和push操作就可以模拟出队列
  • 排行榜、计数器:
  • 发布订阅(可以做到聊天)
  • 分布式锁

redis集群

redis的主从复制

解决问题:主从复制的出现是因为,一台redis满足不了大量的读写请求。

如何解决:读写分离,将读操作集中在从服务器上,写操作在主服务器上。(由于结构原因,从无法进行写操作)

命令:

docker network create --subnet 192.169.0.0/16 --gateway 192.169.0.1 redis-net

docker pull reids

docker run -itd --name redis-master -p 6379:6379 --net redis-net --ip 192.169.0.2 redis

docker run -itd --name redis-slave1 -p 6380:6379 --net redis-net --ip 192.169.0.3 redis redis-server --slaveof 192.169.0.2 6379

docker run -itd --name redis-slave2 -p 6381:6379 --net redis-net --ip 192.169.0.4 redis redis-server --slaveof 192.169.0.2 6379

docker exec -it redis-master redis-cli info replication

docker exec -it redis-master redis-cli

docker exec -it redis-slave1 redis-cli
redis哨兵模式及故障转移

解决问题:当master(主服务器)挂了。redis就无法使用了。

如何解决:首先哨兵模式,将监控你的master节点,当其判断主节点挂了,那么就会从投票选举出一个从节点来作为主节点。

哨兵模式的基本原理:当判断主节点下线的哨兵达到一半以上,那么就会判断master挂了。索引哨兵一定要大于三个及以上。每个哨兵维护了3个定时任务(1.确定主从关系,发送info命令获取最新的主从结构。2.发布订阅获取其他哨兵的状态。3.其他节点发送ping命令进行心跳检测,判断其是否下线)。

故障转移原理:1.过滤不健康从节点。 2.选择复制偏移量最大的从节点。

命令:

redis cluster高可用
redis如何进行性能优化
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容