深入分析-redis

数据结构

  • String
  • Hash
  • List
  • Set
  • SortedSet
  • hayperLogLog

Redis 事务

// 开启事务
multi
add a 1
add b 2
rm a
// 提交事务
exec
  • 采用 multi 开启,exec 执行命令提交数据。
  • 注意:Redis 事务并不是所有都能回滚,命令错误的情况是不能回滚的。

Redis CAS 操作

// 监听某个key是否变动
watch lock
  • watch 监听某个 key 变动,一般可以实现 Java 的 CAS 操作。

Redis pipeline 管道

在这里插入图片描述

  • 问题:在程序和 redis 之间,特别不是在一个机房,那么发送命令是需要时间的,如果批量删除,或者查询,可能大部分时间都是在网路传输上面。
  • 说明:pipeline 可以做到批量提交命令,以及返回数据,减少了网络传输的时间。

Redis 淘汰机制

  • 先进先出: 新数据插入尾部,淘汰头部数据 FIFO 机制。
  • 最近最少使用:根据访问记录淘汰,不经常使用的数据。
  • 最近不经常使用:根据访问频率,加 1 的方式记录,淘汰频率低的数据。

缓存雪崩、穿透、击穿

缓存击穿
  • 说明:热点数据中,某一个 key 失效,导致大量的请求击穿到数据库,造成数据库的瞬间压力。

  • 预防:设置不过期,使用任务的方式,定时更新或者手动更新数据。

缓存穿透
  • 说明:缓存中某个 key 不存在,然后查询数据库,数据库也不存在,最后缓存也不处理,始终都不能命中缓存,导致拖垮数据库。
  • 预防:在某个数据,在数据库中也不存在时,在缓存中也需要设置一个 key,作为预防,下一次访问的时候能够命中缓存。
缓存雪崩
  • 说明:缓存过期时间不能一样,这样会导致某一时间段,大片失效走数据库,从而导致雪崩效应。

  • 预防:在过期时间上,再进行随机一次,让过期时间有一个前后的区间,从而避免。