缓存框架接口
功能
存储业务数据,通过缓存方式提高数据存取速度,减少网络数据请求。
目标
- 提供Heap缓存、Disk缓存、数据库缓存
- 提供内存大小、缓存有效时间等配置
- 将数据存储单元化,将功能内聚的数据以单元形式管理
接口
Cache<V>
缓存存储单元接口,提供读取接口。
- 方法
V get(String key)
通过键值,获取值。boolean put(String key, V value)
存储键值对。V remove(String key)
移除键值对,返回值为删除的值。void clear()
清空所有键值对。boolean containsKey(String key)
是否含有键值对。CacheTransaction beginTransaction()
开启事务,返回缓存事务类。
CacheTransaction
缓存事务类,多个数据同时存取就要使用事务,事务保证数据的原子性、一致性、隔离性、持续性。
- 方法
boolean commit()
提交相应的操作。
CacheManager
缓存管理接口,用来管理存储单元;
- 方法
Cache<Object> createCache(String alias)
创建缓存存储单元。Cache<Object> createCache(String alias, CacheConfiguration config)
创建制定配置的缓存存储单元。Cache<V> createCache(String alias, Class<V> cls)
创建存储类型的缓存存储单元。Cache<V> createCache(String alias, Class<V> cls, CacheConfiguration config)
创建指定存储类型及配置的缓存存储单元。
CacheConfiguration
缓存配置类,用来配置缓存的属性。(接口暂时列两个)
- 方法
void setMaxHeapSize(long maxHeapSize)
设置内存最大值void setMaxDiskSize(long maxDiskSize)
设置硬盘存储最大值
CacheManagerBuilder
- 方法
CacheManager build()
创建缓存管理实例
IKeyGenerator
键值生成器接口,创建唯一key值来支持对象的唯一性
- 方法
String getKey()
获取键值
示例
简单数据示例
第一步,创建CacheManager.
CacheManager cacheManager = new CacheManagerBuilder().build();
第二步,创建Cache
Cache<User> cache = cacheManager.createCache("user");
第三步,调用存取接口
cache.put("UER_KEY", new User("zliang", "123456"));
复杂关联数据
第一步,对于比较复杂的数据,需实现IKeyGenerator。
public DeviceInfo implements IKeyGenerator{
private String mSnCode;
public String getSnCode()
{
return mSnCode;
}
public String getKey()
{
return mSnCode;
}
}
public ChannelInfo implements IKeyGenerator {
private String mDeviceSncode;
private int mIndex;
public String getKey()
{
return mDeviceKey+"$"+mIndex;
}
}
第二步,创建Cache
Cache<Object> cache = cacheManager.createCache("device");
第三步 ,调用存取接口
DeviceInfo device = new Device("1DSFS22233", ...);
cache.put(device.getKey(), device);
第四步,如果涉及多数据存储要采用事务,保证数据的一致性
public void saveChannel(Cache cache, deviceKey){
CacheTransaction transaction = cache.beginTransaction();
DeviceInfo deviceInfo = (DeviceInfo)cache.get(deviceKey);
ChanneInfo channelInfo = new Channel(deviceInfo.getSnCode(), 0, ...);
ChanneInfo channelInfo1 = new Channel(deviceInfo.getSnCode(), 1, ...);
cache.put(channelInfo.getKey(), channelInfo );
cache.put(channelInfo1.getKey(), channelInfo1 );
transaction.commit();
}