前言
当Ridis被用作缓存时,我们添加新数据后可以很方便的删除旧数据。这种行为在开发过程中十分常见,这种行为是内存型数据库的默认行为。
当然,数据库对旧数据进行处理的前提是我们的数据存储达到了设定的值。
在Redis中,LRU(Less Recently Used)是比较常用的数据淘汰策略,其方式就是当内存达到指定值时,清除一部分当前较少被使用(Less Recently Used)的数据。
再说这三个工具时,需要先了解一下AQS框架,所谓AQS,指的是AbstractQueuedSynchronizer
,它提供了一种实现阻塞锁和一系列依赖FIFO等待队列的同步器的框架,ReentrantLock
、Semaphore
、CountDownLatch
、CyclicBarrier
等并发类均是基于AQS来实现的,具体用法是通过继承AQS实现其模板方法,然后将子类作为同步组件的内部类。
我们这篇文章先了解下这三个AQS框架工具类,后面在整体入手了解AQS框架的一些特点及源码。
无论是这几个工具类,还是AQS框架,都是JDK1.5之后出现的,位于java.util.concurrent
包下,是由著名的Doug Lea
操刀实现并完成设计的。