redisとspringの完全な統合
6909 ワード
spring-data-redisをダウンロードし、gavは以下の通りです.
org.springframework.data
spring-data-redis
1.0.1.RELEASE
org.slf4j
slf4j-log4j12
org.slf4j
jcl-over-slf4j
プロジェクト内の他のパッケージと競合するため、exclusionには2つのパッケージがあります.
beanは以下のように構成する、web.xmlでbeanファイルのロードを構成するには:
プロパティ・ファイルの内容は次のとおりです.
redis.ip=192.168.1.110
redis2.ip=192.168.1.112
#Port
redis.port=6379
#
redis.pool.maxActive=1024
# idel
redis.pool.maxIdle=200
# ,
redis.pool.maxWait=1000
# borrow Object ,
redis.pool.testOnBorrow=true
# return Object ,
redis.pool.testOnReturn=true
キャッシュ管理インタフェース:
public interface RedisCache {
public T getRedisCacheInfo(String key);
public boolean setRedisCacheInfo(String key, T value);
}
キャッシュ管理の実装:
public class RedisCacheManger implements RedisCache {
private ShardedJedisPool pool ;
private Logger log = Logger.getLogger(RedisCacheManger.class);
public ShardedJedisPool getPool() {
return pool;
}
public void setPool(ShardedJedisPool pool) {
this.pool = pool;
}
public T getRedisCacheInfo(String key) {
try {
log.info("get from redisCache :"+key);
System.out.println("get from rediscache");
ShardedJedis jedis = pool.getResource();
pool.returnResource(jedis);
return (T)jedis.get(key);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public boolean setRedisCacheInfo(String key, T value) {
try {
log.info("add to redisCache :"+key);
System.out.println("add to rediscache");
ShardedJedis jedis = pool.getResource();
jedis.set(key, (String)value);
pool.returnResource(jedis);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args) {
new RedisCacheManger().setRedisCacheInfo("12345", "asdfg");
}
}
キャッシュ断面注記:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NeedRedisCached {}
キャッシュ断面処理クラス:
@Aspect
public class RedisCacheAspect implements Ordered {
private static Logger log = Logger.getLogger(RedisCacheAspect.class);
private RedisCache redisCacheManager;
private int orderValue = 3;
public RedisCache getRedisCacheManager() {
return redisCacheManager;
}
public void setRedisCacheManager(RedisCache redisCacheManager) {
this.redisCacheManager = redisCacheManager;
}
@Pointcut("@annotation(com.jd.bi.odp.common.cache.core.NeedRedisCached)")
public void needRedisCached() {
}
@Around("needRedisCached() && args(filter,..)")
public Object aroundInvoke(ProceedingJoinPoint pjp, QueryFilter filter) throws Throwable {
log.info("enter aroundInvoke!!!");
if (filter.getValue() == null) {
return null;
}
boolean cacheEnabled = CommonUtil.parseBoolean(HBaseConfig.getProperty("redisCache.enabled"), false);
if (cacheEnabled) {
String md5key = MD5Util.getMD5(filter.getValue().toString());
Object value = redisCacheManager.getRedisCacheInfo(md5key);
boolean flag = false;
if (null != value) {
JSONObject json = new JSONObject(value.toString());
return json;
} else if ("null".equals(value)) {
return null;
} else { // hbase
value = pjp.proceed();
if(null!=value){//
}
else{
flag = redisCacheManager.setRedisCacheInfo(md5key, value.toString());
if(flag)
log.info("add a cache success by key: "+md5key);
else
log.warn("add a cache failure by key: "+md5key);
}
}
return value;
}
} else {// hbase
return pjp.proceed();
}
}
@Override
public int getOrder() {
return orderValue;
}
public int getOrderValue() {
return orderValue;
}
public void setOrderValue(int orderValue) {
this.orderValue = orderValue;
}
}
キャッシュが存在する場合は直接戻り、存在しない場合はデータソースクエリーを実行します.ここではhbaseクエリーで、キャッシュを設定します.
切断面の設定:
このとき,フロントエンドウェブページユーザのアクセストリガのactionが条件を満たすと,接面メソッド処理に入りredisキャッシュの使用を完了する.