主体结构
hashmap结构,key是一个id,value可以直接是一个缓存的对象,也可以是一个map
过期时间
可以另外起一个map,key是id,value是过期时间
也可以在主map的value里面也加入过期时间
也可以是一个堆的结构,里面的node是过期时间和id。同时另起一个map,key是id,value是node。
过期时间清理
堆结构,另起一个线程,删除堆顶的node,并删除node对应的缓存。
惰性删除,get缓存的时候,获取过期时间,如果已经过期了,就删除
定期删除,遍历或者随机抽取n个map里的过期时间,如果已经过期了,就删除
有容量限制
策略1,随机删除,遍历或者随机抽取map里的key,删除。
策略2,过期删除,同定期删除,或者随机抽取n个,删除过期时间最短的数据。
策略3,lru
方法1,map里增加访问时间,随机抽取n个,删除访问时间最老的数据。
方法2,继承linkedhashmap,重写removeEldestEntry,如果元素个数大于n,删除头部元素。
策略4,lfu
方法1,map里增加访问次数,随机抽取n个,删除访问次数最小的数据。
并发性
方法1,使用Concurrenthashmap
方法2,自己写一个hashmap,里面元素是volatile的,put的时候,synchronized数组的元素
方法3,手动扩容,先对key进行hash,有1000个map,先确定某个map,然后对map进行synchronized操作