包含如下内容:
一. LRU算法
二. 算法实现
实现1 基于LinkedHashMap,线程安全的java实现
实现2
apache.commons.collections.map.LRUMap的java实现
三. 其他
1.为什么在wxxr-smslog-search项目中IndexWriter和IndexReader要存放在基于LRU算法的LRUMap里?
LRU指最近最少使用,该算法的一个运用场合:当一个cache已满,而有新元素会被加进来,势必要从cache里拿出一个元素出来腾出位置,这就涉及一个问题:将cache里的哪个元素拿出来呢?LRU算法可以决定让最近最少使用的元素被逐出。
在这个项目中,出于查询效率的考虑,要求 IndexReaderCache要保留90个IndexReader(最近3个月,每天一个 IndexReader ),当cache满了后,就会经常出现需要将cache中元素逐出的操作。基于上面要求,项目中考虑将IndexWriter和IndexReader存放在实现了LRU算法的LRUMap里。
四. 其他阅读文章
1.O(1)LRU Cache的python实现
http://code.activestate.com/recipes/252524-length-limited-o1-lru-cache-implementation/
2.High-Throughput, Thread-Safe, LRU Caching(ebay)
http://www.ebaytechblog.com/2011/08/30/high-throughput-thread-safe-lru-caching/
3.stackoverflow里关于LRU
http://stackoverflow.com/questions/221525/how-would-you-implement-an-lru-cache-in-java-6
4.Redis as an LRU cache
http://antirez.com/post/redis-as-LRU-cache.html
分享到:
相关推荐
大家好,欢迎大家来到算法数据结构专题,今天我们和大家聊一个非常常用的算法,叫做LRU。 LRU的英文全称是Least Recently Used,也即最不经常使用。我们看着好像挺迷糊的,其实这个含义要结合缓存一起使用。对于工程...
在实现缓存系统时,LRU(最近最少使用)策略往往配合哈希表使用。 最后,我们还会涉及到数据结构的实现细节,如动态内存管理、指针操作,以及如何通过源码分析理解数据结构的工作原理。这对于工具开发尤其重要,...
ORACLE 进阶与提高专题讲义 ORACLE 进阶与提高专题讲义是关于 ORACLE 数据库优化、RMAN 和 RAC 的高级讲义。该讲义涵盖了数据库优化、操作系统设置不当、数据库参数设置不当、库结构设计不合理、应用程序语句不当...
为了保证Redis中的数据都是热点数据,可以通过设置合适的过期时间,使用LRU(最近最少使用)算法淘汰不常访问的数据,确保Redis实例的内存中总是存储最近访问频繁的数据集。在有大量数据的数据库系统中,如MySQL,...
在代码中,`lru()`函数实现了LRU算法。通过跟踪每个页面的最后访问时间,当需要替换页面时,选择时间戳最早的页面(即最长时间未使用的页面)进行替换。 实验内容要求计算不同内存大小(4到20页)时,这两种算法的...
虚拟内存技术使得程序可以运行在大于物理内存的地址空间中,通过页面替换策略(如LRU、LFU等)处理页故障。 4. **文件管理**:文件系统是操作系统中组织和存储数据的部分。它定义了文件的命名、创建、删除、查找、...
2. allkeys-lru:尝试回收最少使用的键(LRU),使得新添加的数据有空间存放。 3. volatile-lru:尝试回收最少使用的键(LRU),但仅限于在过期集合的键。 4. allkeys-random:回收随机的键使得新添加的数据有空间...
- Redis默认使用LRU(Least Recently Used)算法驱逐最少最近使用的数据。 - 可通过配置调整驱逐策略,如LFU(Least Frequently Used)。 8. **布隆过滤器(Bloom Filter)** - 用于判断一个元素是否可能存在集合中,...
在 Java 中实现 LRU 缓存,可以使用 LinkedHashMap,其内置了 LRU 功能: ```java import java.util.*; public class LRUCache, V> { private final int capacity; private final Map, Node<V>> map; private ...
2. allkeys-lru:回收最不常用(LRU)的键。 3. volatile-lru:仅回收已设置过期时间的键中最不常用的。 4. allkeys-random:随机回收键。 5. volatile-random:随机回收已设置过期时间的键。 6. volatile-ttl:优先...
2. **allkeys-lru:**基于最近最少使用的原理(LRU),删除最少使用的键。 3. **volatile-lru:**只针对设置了过期时间的键执行LRU算法。 4. **allkeys-random:**随机删除任意键。 5. **volatile-random:**只针对...
例如,跳跃游戏、LRU缓存等经典问题就涉及到这些数据结构。 5. **字符串处理**:KMP、Rabin-Karp和Boyer-Moore是常见的字符串匹配算法,Z-Algorithm和Manacher's Algorithm也有其独特优势。对于字符串操作,了解...
面试时,可能涉及的问题包括Memcached如何解决缓存一致性、其内存管理机制(如Slab Allocation)以及如何处理缓存失效策略(如LRU,Least Recently Used)。 接下来是Redis,一个高级的、开源的、支持网络的、数据...
当内存达到上限时,Redis 提供了多种数据淘汰策略,如 noeviction(不删除策略)、allkeys-lru(回收最少使用的键)、volatile-lru(只回收有过期时间的最少使用键)等,来应对内存不足的情况。 Redis 目前没有官方...
本专题主要围绕Redis进行深入探讨,旨在帮助求职者准备Java面试中的Redis相关问题。以下是Redis的一些核心知识点和面试常问问题。 1. Redis简介:Redis是一款开源的内存数据结构存储系统,它可以用作数据库、缓存和...
- **内存管理**:了解页式、段式、段页式等存储管理方式,以及页面置换算法(LRU、FIFO等)。 - **文件系统**:掌握文件的逻辑结构和物理结构,以及文件权限和访问控制。 - **设备管理**:了解I/O模型(同步与...