redis05 -事务,持久化,哨兵,缓存

redis单条命令有原子性,但事务不保证原子性,也没有隔离级别。事务写的时候只是入队,只有在exec时会全部一次性按顺序执行。

  • multi ;开启事务
  • set k1 v1;
  • set k2 v2;
  • get k1;
  • exec; 执行事务
  • discard ;放弃事务。队列中的全都不会执行

编译型异常:写的其中某一条redis命令就错了,这种情况会导致整个事务的失败,所有命令均不会执行。

运行时异常:如incr k1 (但k1不是int类型的数),这种情况编译时检查不出来,不会导致整个事务的失败,只有错的那条命令不会执行,其他命令照常执行。

  • watch key ; 相当于加锁操作,放在multi事务执行开始之前、并且每次事务执行完毕就会释放这个锁。
  • unwatch key; 释放锁
  • watch key就相当于redis的乐观锁,每次事务提交之前会比较要操作的值的版本号有没有变化。若变化了则整个事务都会失败。不是单纯的比较值,而是内部有个版本号,所以不会出现ABA问题。
  • exec,discard unwatch都会清除连接中的所有监视

设置密码

  • config set requirepass 1234
  • auth 1234; 登录

RDB,持久化内存中的数据到磁盘里,保存至/dump.rdb文件

  • 正常执行save方法,会触发rdb
  • 执行flushAll会触发,将空的信息持久化到磁盘
  • 退出redis也会触发
    rdb原理
  • rdb优点:子进程处理持久化操作,效率高,适合大规模的数据恢复,对数据的完整性要求不高
  • 缺点:若服务器意外宕机,最后一次修改的数据无法持久化到磁盘

AOF append only file 默认不开启

在这里插入图片描述
优点是一般会比rdb恢复的数据更加完整
缺点是1.对于大量数据的写入操作会比较慢。运行效率低。2.文件占用大于rdb。3.文件修复速度慢于rdb。

发布订阅

在这里插入图片描述

主从复制

  • 复制是单向的,只能从主机到从机
  • 默认情况下大家都是master,只有slave需要单独配置
  • 使用命令窗口,slaveof 127.0.0.1 6379 ; 认谁当主机。缺点是一旦shutdown或者宕机后,再次启动服务,配置的主从信息都丢失了。即暂时性
  • 使用配置文件配置,会永久性的保存。
  • 配置从机生效时,会复制主机的所有数据

哨兵模式

  • sentinel monitor myredis 127.0.0.1 6379 1
    myredis:被监控的名称。 1 代表有几个哨兵认为主机挂了,就执行投票更换

缓存

  • 缓存穿透:大量请求是请求的数据库中没有的字段,所以会经过缓存直接访问数据库,导致查询不到还在一直查,使数据库瘫痪。解决方案:布隆过滤器,通过几个哈希函数将所有存在于数据库中的key散列到只有0,1组成的表中,查询时先经过过滤器,看这个字段有没有,若显示没有,则数据库中一定没有。若显示有,则数据库中也不一定有,99.1.%的概率有好像是。

  • 缓存击穿:大量访问请求打在一个点上,若到了这个点的过期时间,则这些大量请求就会直接访问数据库,造成瘫痪。解决方法:1.设置过期时间久一点2.加互斥锁。对于相同的key,每次只能有一个访问能访问到数据库,这就保证了数据库不会瘫痪,但把压力转移到了分布式锁上面

  • 雪崩:大量在缓存中的key同时过期,导致这些大量请求就会直接访问数据库,造成瘫痪。解决方法:1.合理设置key过期的时间,尽量均匀,因为redis服务器内存是有限的 。多设几台redis服务器。2.服务降级。停掉一些服务,保证主要的服务可用。3.数据预热,把可能访问到的热点数据先访问一遍,让他加在redis里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值