redis完整笔记总结-数据类型-事务与锁-集群-分布式锁-常见问题(缓存穿透、击穿、雪崩)

1. 数据类型

五大基本类型

  • String
  • hash -> 类似map
  • list
  • set ->
  • zset -> 基于set的有序集合

新增

  • bitmaps:其实就是string,主要用于位运算,应用如登录记录等
  • HyperLogLog:基数计算
  • Geospatial:地图经纬度

2. 发布与订阅

发布者与订阅者在同一个频道时,订阅者可接收到发布者发布的消息。

3. 事务

队列模式,首先组队,然后依次执行。非原子性

  • 若组队中出错,则组队失败,不执行队列
  • 若执行时出错,出错的语句执行失败,其他语句正常执行,不回滚

可以使用lua脚本,执行时具有原子性。

4. 锁

  • redis乐观锁:使用watch监视key,然后使用队列,队列exec时,检查监视的key版本号是否更改,以此决定是否执行。
  • 分布式锁:setnx命令
    • 设置一个key value 在整个集群有效,同一时间只有一个人能拿到这个锁(key)
    • 当锁的持有者删除这个锁时,其他人才能拿到
    • 为了防止死锁,设置过期时间,要与加锁操作同时(原子性
    • 为防止操作到他人的锁,可以给value值设置一个自己的唯一值,如UUID

5. 持久化

分为rdb与aop,两者根据需求决定是否开启

  • rdb为快照记录,损失数据的可能性较大,性能较好
  • aop为日志记录,数据丢失率小,占用内存较多,性能较差

6. 主从

  • 通过设置主机与从机,将多个redis联合
  • 主机做增删改操作,从机只能读
  • 薪火相传:主机有从机,从机又可以有从机,薪火相传。
  • 反客为主:主机挂掉之后,从机可手动上升为主机,原来的主机变为从机
  • 哨兵:通过哨兵监视主机的运行状态,若判定主机挂掉,则在从机中选举一个晋升为主机,原来的主机降级为从机,选举受影响最大的是设置的优先级。

7. 集群

  • 最少六台redis服务器才能组建集群
  • 至少一主一从,主机挂掉从机自动上位,主机降级。
  • redis集群采用无中心化方式,即无论从集群中哪一台服务器连接,都可以操作整个集群。
  • 插槽:集群会给每个主机分配插槽,当插入数据时,首先会通过key计算出插槽值,然后插到对应插槽中,
  • 可以设置集群的故障处理方式,当一个模块挂掉之后,整个集群停止或者能用的继续用。

8. 应用问题及解决

1. 缓存穿透

原因:

  • 大量请求访问数据库和缓存中没有的数据,由于缓存中查不到,到数据库中查询,把数据库挤爆了,多发于恶意攻击

解决思路:

  • 将查询的没有的字段也添加到缓存中,设置较短的过期时间,缓解数据库压力。
  • 过滤拦截,如bitmaps或者布隆过滤器(二进制位图+哈希函数)
  • 加锁,会降低效率
2. 缓存击穿

原因:

  • 每个热门key过期了,导致一瞬间大量请求涌向数据库,数据库挂。

解决思路:

  • 预防:监控热门key,快过期时自动添加时长;主动将一些热门的信息加到缓存中;延长这些key的过期时间。
3. 缓存雪崩

原因:

  • 某个时刻有大量key过期,导致数据库压力巨大,挂。

解决思路:

  • 预防:避免大量key同时失效,即分散key的过期时间,可以使用随机数。
  • 加锁
  • 多级缓存架构,nginx+redis+ehcache等,繁琐
  • 监视,在快过期时更新
4. 分布式锁问题

分布式锁的死锁等问题,见上方部分

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值