Redis知识点归纳
发布日期:2022-09-29 16:44:53 浏览次数:1 分类:技术文章

本文共 1649 字,大约阅读时间需要 5 分钟。

目录

这篇文章相当于看完尚硅谷Redis课程的回忆版,具体内容参见尚硅谷课件!
Redis的5+3种数据类型的操作指令略、代码见GitHub仓库;

Redis是:单线程+多路IO复用

事务

  1. redis的事务和mysql不同。在向事务中加入指令时,如果指令本省有错,则在执行整个事务时,所有指令均不执行;在向事务中加入指令时,如果指令本身没有错,但在执行整个事务时,某条指令出现运行时错误,则除该条指令外,其他指令都成功执行;
  2. redis的锁有乐观和悲观两种,悲观锁通过lua脚本实现,谁先开始执行操作谁拥有此时执行整个事务的权利,其他人等着;乐观锁是谁先执行完操作,谁的整个事务提交生效,其他人的不生效。乐观锁通常是通过版本号管理的,用watch监视。

持久化操作

  1. RDB:按照时间段(时间节点)对数据进行持久化操作,例如30秒内存3个key或1分钟内存10个key或5分钟内存100个key,触发持久化操作等。过程:通过创建一个子进程,将缓存数据保存为临时数据,然后将临时数据以.rdb后缀存入硬盘,缺点是可能导致最后一次保存数据缺失;
  2. AOF:只追加但不改写文件。如果aof文件有损坏,可以通过redis-check-aof修复;
  3. 当redis崩溃时,RDB和AOF在恢复文件时的操作类似,都只需要将持久化后的文件(.rdb或.aof)文件名改为和redis.conf配置文件中设置的一致,然后在该持久化文件所在路径启动redis即可将此文件中的数据加载到内存中。
  4. 如果同时开启aof和rdb,则优先使用aof;如果只使用缓存,二者可以都不开启。

主从复制的3种模式

  1. 一主二仆:主机崩了,从机只能接受读取,不能上位为主机,也就不能写入数据,等主机恢复后,主机仍是主机,从机仍是从机;从机崩了,重启从机后需要为它重新指定主机;
  2. 薪火相传:一个主机只能有一个从机,而该从机也只能有一个从机,依次类推,缺点是一个机器崩了,后边的机器就都崩了;
  3. 反客为主:主机崩了时,从机上位为主机(手动设置)。而设置哨兵模式后,哨兵可进行实时监控,在主机崩时自动选择从机上位为主机。选择规则为:1.优先认为设置的从机优先级;2.优先从机缓存数据多的;3…;

集群

  1. 采用反客为主+哨兵模式,例如使用3台主机+对应的3台从机完成集群搭建。集群无中心,可以从任何一个主机地址和端口访问集群数据。任何集群中一共有16000+个卡槽,3个机器平分这些卡槽(按照卡槽的id段)。每个新设置进来的key会通过计算得到卡槽值,将该key放在指定的卡槽段的机器上。
  2. 集群的启动需要在某个特定的文件夹(忘了)下启动,连接时还有加-c指令:redis-cli -c -p 6379;
  3. 集群可以设置为:当一台机器及其所有从机崩溃时,整个集群崩溃;也可以设置为一台机器及其所有从机崩溃时,其他机器不崩溃,也就是说其他卡槽段均正常运行。

缓存灾难

  1. 缓存穿透:一般是因为恶意攻击,瞬间大量访问缓存中不存在且数据库中不存在的数据,导致频繁访问数据库系统崩溃。
  2. 缓存击穿:瞬间大量访问某一个热门key值,且该key不在缓存中,导致瞬间大量访问直接访问数据库。
  3. 缓存雪崩:缓存中短时间内大量key值过期。

分布式锁

  1. 通过上锁保证一台机器在操作一个key的时候,这个key不能被其他机器操作;
  2. 为避免机器执行结束后忘记释放锁,可以给锁设定时间。将上锁和设定时间绑定操作可以保证原子性;
  3. 对于一个机器在拿到锁后睡着了(机器卡住了),这时到了锁到期时间了,被另一台机器抢到了,在另一台机器的锁到期前,前一台机器又醒了,执行完操作后手动释放了锁,但是这时释放的是后一台机器的锁。解决:通过uuid给每个机器针对同一个key,抢到的锁加上唯一不同的id;
  4. 对于a机器在操作执行完后手动删除锁时,这时到期时间刚好先到了(此时手动删锁已经无法停止),这时b机器刚抢到锁,a机器的手动删锁执行完毕,就把b的锁删了。解决:在a机器删锁时使用lua脚本保证删除时的原子性。

转载地址:https://blog.csdn.net/weixin_46515047/article/details/123833031 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:redis知识点总结(持续更新)
下一篇:redis知识点

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月21日 20时33分42秒