-
Notifications
You must be signed in to change notification settings - Fork 15
Annotation
Tony Shen edited this page Feb 7, 2019
·
2 revisions
类似 Retrofit 风格的方式,支持通过标注 Annotation 来完成缓存的操作。
注解名称 | 作用 | 备注 |
---|---|---|
@CacheClass | 设置缓存类,标注一个Class对象 | 参数注解 |
@CacheKey | 设置缓存的key值 | 方法注解 |
@CacheLifecycle | 设置缓存的过期时间,只在缓存保存时有效 | 方法注解 |
@CacheMethod | 设置缓存的操作方法。以及返回的对象是 RxJava 的各种 Observable 类型,或者返回所存储的对象类型。 | 方法注解 |
@CacheValue | 设置缓存的值 | 参数注解 |
例如先定义一个接口,用于定义缓存的各种操作。
public interface Provider {
@CacheKey("user")
@CacheMethod(methodType = MethodType.GET)
<T> Record<T> getData(@CacheClass Class<T> clazz);
@CacheKey("user")
@CacheMethod(methodType = MethodType.SAVE)
@CacheLifecycle(duration = 2000)
void putData(@CacheValue User user);
@CacheKey("user")
@CacheMethod(methodType = MethodType.REMOVE)
void removeUser();
@CacheKey("test")
@CacheMethod(methodType = MethodType.GET, observableType = ObservableType.MAYBE)
<T> Maybe<Record<T>> getMaybe(@CacheClass Class<T> clazz);
}
通过 CacheProvider 创建该接口,然后可以完成各种缓存操作。
public class TestCacheProvider {
public static void main(String[] args) {
RxCache.config(new RxCache.Builder());
RxCache rxCache = RxCache.getRxCache();
CacheProvider cacheProvider = new CacheProvider.Builder().rxCache(rxCache).build();
Provider provider = cacheProvider.create(Provider.class);
User u = new User();
u.name = "tony";
u.password = "123456";
provider.putData(u); // 将u存入缓存中
Record<User> record = provider.getData(User.class); // 从缓存中获取key="user"的数据
if (record!=null) {
System.out.println(record.getData().name);
}
provider.removeUser(); // 从缓存中删除key="user"的数据
record = provider.getData(User.class);
if (record==null) {
System.out.println("record is null");
}
User u2 = new User();
u2.name = "tony2";
u2.password = "000000";
rxCache.save("test",u2);
Maybe<Record<User>> maybe = provider.getMaybe(User.class); // 从缓存中获取key="test"的数据,返回的类型为Maybe
maybe.subscribe(new Consumer<Record<User>>() {
@Override
public void accept(Record<User> userRecord) throws Exception {
User user = userRecord.getData();
if (user!=null) {
System.out.println(user.name);
System.out.println(user.password);
}
}
});
}
}
- General
- Memory
- Persistence
-
Disk
-
Serialization
- Gson
- Fastjson
- Moshi
- Kryo
- Hessian
- FST
- Protobuf
-
Encryption
- AES 128
- DES
-
Serialization
-
Disk
- Cache Statistics
- Spring