redis是典型的非关系型数据库,支持key-value,hash,list,set等各种数据结构。那么如何利用redis实现缓存呢?
接口定义
首先,我们需要定义一个数据包装类,用来包装缓存的值,为什么需要包装类呢?举个例子,假设我们缓存了一个null值,那么缓存返回的也是null值,使用者怎么知道这个null是说缓存中没数据还是缓存的就是null?
CacheWrapper类:public class CacheWrapper implements Serializable {
private E value;
private boolean exist = false;
public CacheWrapper() {
}
public CacheWrapper(E e) {
this.value = e;
}
public CacheWrapper(E value, boolean exist) {
this.value = value;
this.exist = exist;
}
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
public boolean isExist() {
return exist;
}
public void setExist(boolean exist) {
this.exist = exist;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof CacheWrapper)) return false;
CacheWrapper> that = (CacheWrapper>) o;
if (isExist() != that.isExist()) return false;
return getValue() != null ? getValue().equals(that.getValue()) : that.getValue() == null;
}
@Override
public int hashCode() {
int result = getValue() != null ? getValue().hashCode() : 0;
result = 31 * result + (isExist() ? 1 : 0);
return result;
}
}
接下来,我们需要定一个接口,方便未来扩展。
Cac