账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    缓存穿透问题
    29
    0

    if(redis中是否存在key){
     if(get(key)!=''){
       返回redis数据
     }
    } else {
     查询数据库 查到了就放到redis去 查不到也写到redis去 key=''
    }
    这个是我解决 如果一个key不存在的时候 让他不去访问数据库 在高并发的时候不至于挂掉

    但是同时也有一个问题了 如果有人恶意请求很多不存在的key 那么我的内存会生成很多key='' key1='' 这样的数据 会占用我内存的空间 针对这个要如何处理呢

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 可口的草莓 普通会员 1楼

      缓存穿透(Cache Hole)是一种在缓存技术中常见的问题,它指的是通过缓存系统中的某些失效或者限制条件,使得缓存中存储的数据与用户实际请求的数据产生冲突,从而导致缓存失效、服务中断或数据丢失的情况。以下是缓存穿透问题的几个主要方面:

      1. 内存泄露:当缓存中的数据引用了从内存中读取的数据时,如果内存泄露导致这部分数据的生命周期耗尽,缓存中的数据将不再有效,从而引发缓存穿透问题。当缓存失效时,用户会看到服务器返回的结果为无效或未命中,这可能由于缓存中未覆盖的数据导致的错误响应。

      2. 内存扩散:缓存穿透还可能导致数据在内存中分散存储,导致后续查询和更新时无法找到正确的数据。如果缓存中的数据与实际请求的数据冲突,那么在后续的访问中,如果使用了从缓存中获取的数据,那么这些数据可能会被访问到未覆盖的数据部分,从而导致缓存穿透。

      3. 服务中断:如果缓存穿透严重,可能会导致服务中断,例如用户访问某个服务时,由于缓存中的数据失效或未覆盖,服务无法正常工作,从而引发用户不满或影响业务运营。

      4. 数据丢失:在缓存穿透的情况下,如果缓存中存储的数据与用户实际请求的数据存在冲突,那么如果缓存失效或未覆盖,用户可能会看到服务器返回的结果为无效或未命中,从而导致数据丢失。这种情况下,用户可能会要求恢复已有的数据,这可能涉及到数据的备份、数据清理和数据恢复等操作,这可能会导致数据的完整性和可靠性受到影响。

      为了避免缓存穿透问题,可以采取以下措施:

      1. 强化缓存管理:在缓存系统的设计中,应尽量减少缓存数据的生命周期依赖,例如,可以采用数据锁或锁机制来保证缓存中的数据在一定时间内有效,从而防止内存泄露。同时,对于数据的生命周期,应尽可能地进行缓存失效后的清理和数据恢复操作,以保证数据的完整性和一致性。

      2. 设计合理的缓存策略:根据业务需求和缓存策略,合理设计缓存失效的条件和策略,例如,可以设置缓存的过期时间、过期条件和失效策略等,以便在缓存失效后能够及时进行数据清理和数据恢复。

      3. 使用合适的缓存技术:对于某些需要在内存中长期存储数据的场景,可以考虑使用内存数据库、键值对存储等技术,以提高数据的存取效率和一致性。

      4. 引入认证机制:在缓存系统中,可以通过认证机制来验证用户请求的数据来源,避免缓存中存储的数据与用户实际请求的数据产生冲突。例如,可以采用JWT等认证机制,验证用户的身份和缓存数据的来源。

      5. 提供故障恢复机制:在缓存穿透问题发生时,应提供故障恢复机制,例如,可以定期进行数据备份、数据清理和数据恢复操作,以保证用户数据的完整性和可靠性。同时,应定期进行性能监控和故障排查,以便及时发现和解决缓存穿透问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部