何为缓存?本地缓存类似于map,当给定一个key,首先查找缓存中是否已经有值了,如果有则直接返回数据;相反如果不存在这样的key,则将新的内容value值缓存起来,以便下一次来查询,可以快速返回。
当然缓存不是说value值一直不变,会按照一定的失效策略来更新缓存中的数据。
缓存的常用使用场景有:
(1)在高并发的数据库访问时,为了抗住数据库并发连接压力,将数据缓存起来,当有请求过来,直接返回数据;
(2)当应用综的数据,更新周期较长,而且每次都查数据库的情况下,可以采用周期更新数据,从而有效减少数据库无效的访问,保证效率;
google的guava库中有实现了localcache的现成方法,可以在应用中快速构建本地缓存。
在缓存中,最为重要的失效策略和唯一key的确定;
基于时间的移除
guava提供了两个基于时间移除的方法
expireAfterAccess(long, TimeUnit) 这个方法是根据某个键值对最后一次访问之后多少时间后移除;
expireAfterWrite(long, TimeUnit) 这个方法是根据某个键值对被创建或值被替换后多少时间移除;
- import com.google.common.cache.Cache;
- import com.google.common.cache.CacheBuilder;
-
- import java.util.concurrent.TimeUnit;
-
-
-
-
-
- public class LocalContentCache {
- public final static long expireTime = 5;
- public static Cache<String,Object> localContentCache = CacheBuilder.newBuilder().expireAfterAccess(
- expireTime,TimeUnit.MINUTES).build();
- }
-
- public String generateLocalCacheKey(String model,String key){
- return model + "_" + key;
- }
-
- public Object handle(final String model,final String key,final Object parmObject) {
- Object tx = null;
-
- String cacheKey = generateLocalCacheKey(model,key);
- try{
- tx = LocalContentCache.localContentCache.get(cacheKey,new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- Object result = null;
-
- return result;
- }
- });
- }catch (ExecutionException e){
- throw new RuntimeException(e);
- }
- return tx;
- }