目录

  • Redis事务
  • 事务的操作
  • 事务的工作流程
  • Watch锁
  • 分布式锁
  • Redis中数据的删除策略
  • 一、过期数据
  • 定时过期
  • 惰性过期
  • 定期过期
  • 二、内存淘汰策略

一、Redis事务

跳转到目录

  • redis事务就是一个命令执行的队列,将一系列预定义命令包装成一个整体(一个队列)。当执行时,一次性按照添加顺序依次执行,中间不会被打断或者干扰

redisson 实现分布式事务 redis的分布式事务_Redis

  • Redis 事务本质一组命令的集合, 一个事务中的所有命令都会被序列化,在事务执行过程的中,会按照顺序执行!
  • Redis事务没有没有隔离级别的概念!
  • 所有的命令在事务中,并没有直接被执行!只有发起执行命令exec的时候才会执行;
  • Redis单条命令式保存原子性的,但是事务不保证原子性!

redis的事务:

  • 开启事务(multi
  • 命令入队(…)
  • 执行事务(exec

1、 事务的操作

跳转到目录

redisson 实现分布式事务 redis的分布式事务_事务_02

  • 没有添加事务的时候
  • redisson 实现分布式事务 redis的分布式事务_Redis_03


  • redisson 实现分布式事务 redis的分布式事务_事务_04

  • 同一个服务器开了两个客户端, 同时操作name, 此时就无法保证name的一致性;
  • 添加事务
  • redisson 实现分布式事务 redis的分布式事务_逐出算法_05


  • redisson 实现分布式事务 redis的分布式事务_逐出算法_06


  • redisson 实现分布式事务 redis的分布式事务_Redis_07


  • redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_08

  • 使用MULTIEXEC命令就可以保证事务的一致性;

redisson 实现分布式事务 redis的分布式事务_事务_09


redisson 实现分布式事务 redis的分布式事务_Redis_10


redisson 实现分布式事务 redis的分布式事务_事务_11


redisson 实现分布式事务 redis的分布式事务_逐出算法_12


redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_13

2、事务的工作流程

跳转到目录

redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_14

3、Watch锁

跳转到目录

  • 线程1用来监听一个key, 当事务还没执行完, 别的线程2去操作这个key, 此时watch就会通知线程1; 本次事务就失败了



    watch锁操作


    一个事务执行完后, watch监视锁就会释放掉; 为了演示当修改money的时候事务会执行失败, 此时还用两个窗口来模拟多线程;

当这个事务还没结束的时候, 修改money;

redisson 实现分布式事务 redis的分布式事务_删除策略_15


redisson 实现分布式事务 redis的分布式事务_逐出算法_16


redisson 实现分布式事务 redis的分布式事务_删除策略_17


此时事务就执行失败, 因为 watch一直在监听着money, 如果有别的线程修改该属性,watch就会通知事务, Money被修改, 本次事务就执行失败了!

redisson 实现分布式事务 redis的分布式事务_逐出算法_18

4、分布式锁 setnx

跳转到目录

redisson 实现分布式事务 redis的分布式事务_事务_19


类似一种同步锁操作, setnxkey不存在的时候才可以操作;

redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_20


redisson 实现分布式事务 redis的分布式事务_删除策略_21


redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_22


二、Redis中数据的删除策略

跳转到目录

1、过期数据

跳转到目录

redisson 实现分布式事务 redis的分布式事务_删除策略_23


如果不删除, 将消耗内存, 删除策略如下:

  • 定时删除
  • 惰性删除
  • 定期删除

Redis中的数据,在expire中以哈希的方式保存在其中。其value是数据在内存中的地址,filed是对应的生命周期

redisson 实现分布式事务 redis的分布式事务_事务_24

1、定时删除

跳转到目录

拿处理器的性能换取空间 : 时间换空间

redisson 实现分布式事务 redis的分布式事务_逐出算法_25

2、惰性删除

跳转到目录

存储空间换取处理器性能 : 时间换空间

redisson 实现分布式事务 redis的分布式事务_删除策略_26

3、定期删除

跳转到目录

周期性抽查存储空间 (随机抽查, 重点抽查)

redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_27


redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_28

三种删除策略的对比

redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_29

2、内存淘汰策略

跳转到目录

Redis详解(十一)------ 过期删除策略和内存淘汰策略

  • 在Redis中, 当每执行一个写命令的时候, 都会调用freeMemoryIfNeeded()的函数, 检测内存是否充足; 如果内存不足, 会临时删除一些数据, 清除数据的策略就是逐出算法
  • 对数据尝试清除后, 内存仍然不够存入当前的写命令, 此时就会报OOM错误 (内存溢出)

redisson 实现分布式事务 redis的分布式事务_事务_30


redisson 实现分布式事务 redis的分布式事务_删除策略_31


redisson 实现分布式事务 redis的分布式事务_redisson 实现分布式事务_32

  • LRU:最长时间没被使用的数据
  • LFU:一段时间内使用次数最少的数据

redisson 实现分布式事务 redis的分布式事务_Redis_33