zoukankan      html  css  js  c++  java
  • 如何解决缓存污染

    缓存污染问题指的是留存在缓存中的数据,实际不会再被访问了,但是又占据了缓存空间。如果这样的数据体量很大,甚至占满了缓存,每次有新数据写入缓存时,还需要把这些数据逐步淘汰出缓存,就会增加缓存操作的时间开销。

    因此,要解决缓存污染问题,最关键的技术就是能识别出这些只访问一次或是访问次数很少的数据,在淘汰数据时,优先把他们筛选出来淘汰掉。因为noviction策略不涉及数据淘汰,所以就只分析剩余七中淘汰策略。

    volatile-random和allkeys-random 是随机选择数据进行淘汰,无法把不再访问的数据筛选出来,可能会造成缓存污染。如果业务层明确知道数据的访问时长,可以给数据设置合理的过期时间,再设置redis缓存使用volatile-ttl策略。当缓存写满时,剩余存活时间最短的数据就会被淘汰出局,避免滞留再缓存中,造成污染。

    当我们使用LRU策略时,由于LRU策略只考虑数据的访问时效,对于只访问一次的数据来说,LRU策略无法很快将其筛选出来。而LFU策略再LRU策略基础上进行了优化,在筛选数据时,首先会筛选并淘汰访问次数少的数据,然后针对访问次数相同的数据,再筛选并淘汰访问时间最久的数据。

    在实际业务应用中,LRU和LFU两个策略都有应用。LRU和LFU两种策略关注的数据访问特征各有侧重,LRU策略更加关注数据的时效性,而LFU策略更加关注数据的访问频次。通常情况下,实际应用的负载具有较好的时间局部性,所以LRU策略的应用会更加广泛。但是,在扫描
    式查询的应用场景中,LFU策略就可以很好地应对缓存污染问题了,建议你优先使用。

  • 相关阅读:
    smart client优势在那里? (草稿)
    MSN to expand free email storage to 250MB
    转移阵地了,新地址:http://spaces.msn.com/members/PuGong
    关于XMLHTTP object的OPEN方法
    创建第一个Windows Phone应用程序(一)
    Windows 平台下安装Cygwin后,sshd服务无法启动
    ASP.NET MVC3 Use Remote Validation
    ASP.NET MVC3中使用AllowHtml attribute
    HTML5 Canvas实现简单的俄罗斯方块
    创建第一个Windows Phone应用程序(二)
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/14806404.html
Copyright © 2011-2022 走看看