`
geeksun
  • 浏览: 953002 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

聊聊缓存

 
阅读更多

缓存在应用中经常可以遇到,大的可以表现为分布式缓存服务和外部的缓存服务应用,小的可以使用应用级的缓存。

缓存的主要作用,一是可以加快热点数据访问速度,二是保护后端的数据库不被突然增长的压力压垮,三是减少计算,是以空间换时间的典型应用。

 

从分类上来说,缓存可以分为外部缓存服务和应用缓存。

外部缓存服务可以表现为MemCache、Redis、MongoDB等。

应用缓存可以使用HashMap自实现,也可以使用Guava的缓存Cache。

 

缓存的失效策略:

1. Timeout算法,设置有效期,超时失效。

2. LRU(Least Recently Used)算法,最近最少使用的缓存先失效,是依据时间来判断是否应失效。

    LRU算法并不太科学,因为使用时间来判断缓存是否应失效,会导致最新的缓存存在,但是却有可能,最新       的缓存的使用频率并不高,并不是热点数据。 

    实现可使用链表来实现,最近使用的数据,放入链表头,需要移除数据时,从链表尾移除。LinkedHashMap     的实现支持这一算法。

4. LFU算法(Least Frequently Used),最近最少使用次数算法,是依据使用的次数来做判断。

3. FIFO算法,最先进入的缓存最先移除。

 

缓存的一致性:

需要在数据源更新时,同时通知缓存更新,否则出现缓存和数据源数据不一致的情况。

 

其他的缓存分类还有Http缓存、页面缓存、数据库缓存等,有兴趣的可以自行去网上搜索学习。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics