redis(1)

redis
缓存穿透
1.什么是缓存穿透呢?

当客户端访问数据库一个不存在的数据时,数据库查询不到也不会添加在缓存中,所以客户端的每次访问都会去查数据库,这有可能会导致数据库垮掉。

2.解决方案

1.缓存空数据,即便查询的结果为空,任然将这个空的结果存放在缓存中。优点是简单方便,缺点是消耗内存,可能存在不一致问题。
2.布隆过滤器,主要是用于检索一个元素是否存在于一个集合中。它的原理是,首先初始化一个数组,数组中存放的是二进制0、1,最开始存放的都是0,当一个数值来时,该值进行三次hash计算,模与长度取余获取到三个数组下标,并将对应的数组0修改为1,这样三个数组下标就可以标明一个数值。虽然占用内容少了,但会存在一定的误判,但好在我们可以设置误判率,让它保持在5%以内。归根到底,误判是必然存在的,想要降低误判,需要加长数组的长度。这样其实已经很划算了,5%的误判率一般项目也可以接受,不至于高并发下压倒数据库。

什么是缓存击穿

对于设置过期时间的key,在一段时间后过期,恰好在这个时间点对于该key有大量的请求访问,这些请求发现key过期后会从数据库加载并同步到缓存,但大量的请求会瞬间压垮数据库。

解决方案

1.互斥锁
当缓存失效时,先不去数据库加载,先使用如redis的setnx设置一个互斥锁,当操作成功返回时加载数据库,同时同步缓存,否则重试get缓存的方法。
2.逻辑过期
在设置key的时候同时设置一个过期时间字段一起放在缓存中,不给当前key设置过期时间,当查询时,从redis取出key并判断该key是否过期,若过期了,则开通一个新的线程去同步缓存,当前线程正常返回数据,不过这个数据不是最新的
3.总结
两种方法各有千秋,若是考虑数据的强一致性,可以考虑分布式锁,用锁了,当然性能就没那么高了,需要时间去等待,也有可能会造成死锁的状况。若是考虑性能,可以考虑逻辑过期,具有高可用性,不过数据同步这一块做不到强一致性。

相关推荐

  1. redis(1)

    2024-01-10 11:22:04       39 阅读
  2. Redis小记(1)

    2024-01-10 11:22:04       42 阅读
  3. 1.初步认识Redis

    2024-01-10 11:22:04       20 阅读
  4. Redis面试题1

    2024-01-10 11:22:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 11:22:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 11:22:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 11:22:04       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 11:22:04       20 阅读

热门阅读

  1. MATLAB中slist函数用法

    2024-01-10 11:22:04       33 阅读
  2. linux学习笔记

    2024-01-10 11:22:04       25 阅读
  3. 前端常用js、css效果

    2024-01-10 11:22:04       35 阅读
  4. C++经典程序(2)

    2024-01-10 11:22:04       34 阅读
  5. 《微信小程序开发从入门到实战》学习七十七

    2024-01-10 11:22:04       39 阅读
  6. Rust基础类型之布尔类型和字符

    2024-01-10 11:22:04       36 阅读
  7. Electron快速上手

    2024-01-10 11:22:04       39 阅读
  8. Flink编程实践

    2024-01-10 11:22:04       36 阅读
  9. docker环境调用mysqldump进行数据备份

    2024-01-10 11:22:04       30 阅读
  10. 【技术选型】clickhouse vs starRocks

    2024-01-10 11:22:04       53 阅读
  11. 深入理解 MyBatis-Plus 批量保存方法

    2024-01-10 11:22:04       36 阅读
  12. 安卓多用户管理之IUserManager.AIDL

    2024-01-10 11:22:04       31 阅读
  13. 第十节 登陆静态页

    2024-01-10 11:22:04       37 阅读