多级缓存
在提高系统性能时,使用了多级缓存的理念,尤其是对于热点数据的访问,如何能够在保证服务稳定性的前提下为更多的用户提供良好的用户体验缓存起到了尤为重要的作用。
缓存设计原则
- 使用快速存取的设备,所以尽量使用内存
- 将缓存推到离用户最近的地方,可以更快的为用户提供服务
- 脏缓清理。使用缓存就会有数据丢失的特点,数据更新之后,缓存中的数据有可能变成脏数据,所以对于缓存并不是所有的数据都需要,而且要求对脏读不敏感才可以使用,其余情况要根据具体需求确定如何使用。
缓冲方式
- Redis缓存
- 热点数据本地缓存(内存)
- Nginx缓存
本地热点缓存
要实现本地热点缓存,使用的是Guava cache组件
Google Guava 工具类
Google Guava 工具类是Google公司封装了平常用的方法,不需要再重复造轮子,节约开发人员时间,提高工作效率而开发的。
guava优点
- 高效设计良好的API,
- 遵循高效的java语法实践
- 使代码更刻度、简洁、简单
- 节约时间、资源、提高生产力
guava核心库
- 基本工具(basic utilities)
- 集合(collections)
- 缓存(caches)
- 函数式风格(functional idioms)
- 并发(concurrency)
- 字符串处理(strings)
- 原生类型(primitives)
- 区间(ranges)
- I/O
- 散列(hash)
- 事件总线(eventbus)
- 数学运算(math)
- 反射(reflection)
使用Guava cache
pom文件引入依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
使用
新建CacheServer,定义get和set方法
public interface CacheService {
void setCommonCache(String key,Object value);
Object getFromCommonCache(String key);
}
server实现层
@Service
public class CacheServiceImpl implements CacheService {
private Cache<String,Object> commonCache = null;
@PostConstruct
public void init(){
commonCache = CacheBuilder.newBuilder()
//设置缓存容器的初始容量为10
.initialCapacity(10)
//设置缓存中最大可以存储100个KEY,超过100个之后会按照LRU的策略移除缓存项
.maximumSize(100)
//设置写缓存后多少秒过期
.expireAfterWrite(60, TimeUnit.SECONDS).build();
}
@Override
public void setCommonCache(String key, Object value) {
commonCache.put(key,value);
}
@Override
public Object getFromCommonCache(String key) {
return commonCache.getIfPresent(key);
}
}
读取本地缓存的方式:
//先取本地缓存
itemModel = (ItemModel) cacheService.getFromCommonCache("item_"+id);