Spring cache redisをキャッシュに使用
16045 ワード
Paste_Image.png
1.pom追加
ここで
2.spring構成
springのプロファイルアプリケーションContext.xmlに次のredisの構成情報を追加します.
ここでredisのいくつかの情報を構成します.もちろん、プロファイルで構成することもできます.
次に、プロファイルでキャッシュするオブジェクトの値を次のように設定します.
ここで構成されているorderServiceImpl.selectInterestsとorderServiceImpl.selectInterestsListはそれぞれredisキャッシュの名前です.次のコードで説明します.
3.redisキャッシュ構成クラス
ここではプロファイルで実装されるSystemRedisCacheを追加し、ここでは主にredisのビジネスの操作方法について説明します.
開発中のobjectとlistオブジェクトのシーケンス化と逆シーケンス化を主に行うツールクラスのコードが付属しています.Redisはobjectと汎用性を知らないため,オブジェクトをredisに格納する際にキャッシュされたすべてのデータをシーケンス化する必要がある.
4.キャッシュサービス方法
指定したサービスメソッドをキャッシュします.使用方法は次のとおりです.
この上の2つの方法はspringプロファイルに構成されている2つのキャッシュです.ここでは主にクエリーのページングをキャッシュします.上記の方法はキャッシュを追加し、10分後に期限が切れます.ここでkeyはredisに対応する識別子であり、クエリーする場合はkey値を使用してクエリーできます.
キャッシュを変更および削除する必要がある場合は、
Cache注記の詳細
5.終了
これらはspring cacheを使用してredisをキャッシュする方法です.あなたのプロジェクトで試してみる必要がある場合は、ここでEcacheキャッシュを使用していないのは、プロジェクトが分散配置を使用しているためであり、ローカルキャッシュではだめなので、redisをキャッシュとして使用し、アクセスを統一します.
何か問題があったら、手紙や伝言をください.
spring , , 。
1.pom追加
ここで
spring-data-redis
とjedis
を追加するにはjarパッケージが必要です.
org.springframework.data
spring-data-redis
1.3.4.RELEASE
redis.clients
jedis
2.5.2
2.spring構成
springのプロファイルアプリケーションContext.xmlに次のredisの構成情報を追加します.
ここでredisのいくつかの情報を構成します.もちろん、プロファイルで構成することもできます.
redis.host=192.168.31.4
redis.port=6379
redis.pass=
redis.maxIdle=50
redis.maxActive=50
redis.maxWait=50
redis.testOnBorrow=true
redis.timeout=1000
次に、プロファイルでキャッシュするオブジェクトの値を次のように設定します.
ここで構成されているorderServiceImpl.selectInterestsとorderServiceImpl.selectInterestsListはそれぞれredisキャッシュの名前です.次のコードで説明します.
3.redisキャッシュ構成クラス
ここではプロファイルで実装されるSystemRedisCacheを追加し、ここでは主にredisのビジネスの操作方法について説明します.
import com.hejia.alauda.utils.SerializableUtil;
import org.springframework.cache.Cache;
import org.springframework.cache.support.SimpleValueWrapper;
import org.springframework.dao.DataAccessException;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.util.StringUtils;
/**
* info:redis
* Created by shang on 2016/11/9.
*/
public class SystemRedisCache implements Cache {
/**
* Redis
*/
private RedisTemplate redisTemplate;
/**
*
*/
private String name;
/**
*
*/
private long timeout;
/*
* (non-Javadoc)
* @see org.springframework.cache.Cache#getName()
*/
@Override
public String getName() {
return this.name;
}
/*
* (non-Javadoc)
* @see org.springframework.cache.Cache#getNativeCache()
*/
@Override
public Object getNativeCache() {
// TODO Auto-generated method stub
return this.redisTemplate;
}
/*
* (non-Javadoc)
* @see org.springframework.cache.Cache#get(java.lang.Object)
*/
@Override
public ValueWrapper get(Object key) {
if (StringUtils.isEmpty(key)) {
return null;
} else {
final String finalKey;
if (key instanceof String) {
finalKey = (String) key;
} else {
finalKey = key.toString();
}
Object object = null;
object = redisTemplate.execute(new RedisCallback
開発中のobjectとlistオブジェクトのシーケンス化と逆シーケンス化を主に行うツールクラスのコードが付属しています.Redisはobjectと汎用性を知らないため,オブジェクトをredisに格納する際にキャッシュされたすべてのデータをシーケンス化する必要がある.
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* info:
* Created by shang on 2016/11/9.
*/
public class SerializableUtil {
/**
*
*
* @param object
* @return
*/
public static byte[] serialize(Object object) {
if (object == null) {
return null;
}
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
byte[] bytes = null;
try {
//
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
oos.writeObject(object);
bytes = baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
close(oos);
close(baos);
}
return bytes;
}
/**
*
*
* @param bytes
* @return
*/
public static Object unserialize(byte[] bytes) {
if (bytes == null) {
return null;
}
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
//
bais = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(bais);
return ois.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally {
close(bais);
close(ois);
}
return null;
}
/**
* list
*
* @param list
* @return
*/
public static byte[] serializeList(List> list) {
if (list==null||list.size()==0) {
return null;
}
ObjectOutputStream oos = null;
ByteArrayOutputStream baos = null;
byte[] bytes = null;
try {
baos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(baos);
for (Object obj : list) {
oos.writeObject(obj);
}
bytes = baos.toByteArray();
} catch (Exception e) {
e.printStackTrace();
} finally {
close(oos);
close(baos);
}
return bytes;
}
/**
* list
*/
public static List> unserializeList(byte[] bytes) {
if (bytes == null) {
return null;
}
List list = new ArrayList();
ByteArrayInputStream bais = null;
ObjectInputStream ois = null;
try {
//
bais = new ByteArrayInputStream(bytes);
ois = new ObjectInputStream(bais);
while (bais.available() > 0) {
Object obj = (Object) ois.readObject();
if (obj == null) {
break;
}
list.add(obj);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
close(bais);
close(ois);
}
return list;
}
/**
* io
*
* @param closeable
*/
public static void close(Closeable closeable) {
if (closeable != null) {
try {
closeable.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
4.キャッシュサービス方法
指定したサービスメソッドをキャッシュします.使用方法は次のとおりです.
@Cacheable(value = "orderServiceImpl.selectInterests",key = "'selectInterests_'+#params.get('user_id')+'_'+#params.get('type')+'_'+#pager.pageNumber")// redis
@Override
public Pager selectInterests(Map params, Pager pager) {
System.out.println("select selectInterests class ....");
pager.setList(interestMapper.findInterestListV3(params, pager));
pager.setTotalCount(interestMapper.findCountInterestListV3(params));
return pager;
}
@Cacheable(value = "orderServiceImpl.selectInterestsList",key = "'selectInterestsList_'+#params.get('user_id')+'_'+#params.get('type')+'_'+#params.get('valueDate')")// redis
@Override
public List
この上の2つの方法はspringプロファイルに構成されている2つのキャッシュです.ここでは主にクエリーのページングをキャッシュします.上記の方法はキャッシュを追加し、10分後に期限が切れます.ここでkeyはredisに対応する識別子であり、クエリーする場合はkey値を使用してクエリーできます.
キャッシュを変更および削除する必要がある場合は、
@CachePut
および@CacheEvict
を使用します.使用方法は以下の通りです.Cache注記の詳細
- @CacheConfig: 。 @CacheConfig(cacheNames = "users"): users , , @Cacheable 。
- @Cacheable: findByName 。 , , 。 :
- value、cacheNames: (cacheNames Spring 4 , value ), 。 Spring 4 @CacheConfig, Spring 3 value ,
- key: Map key , , key , SpEL , :@Cacheable(key = "#p0"): key , SpEL
- condition: , , SpEL , , :@Cacheable(key = "#p0", condition = "#p0.length() < 3"), 3 , AAA , 。
- unless: , , SpEL 。 condition , , result 。
- keyGenerator: key , 。 key , org.springframework.cache.interceptor.KeyGenerator , 。 : key
- cacheManager: , 。
- cacheResolver: , 。 org.springframework.cache.interceptor.CacheResolver , 。
, :
- @CachePut: , , @Cacheable , , 。 @Cacheable , @Cacheable
- @CacheEvict: , , 。 @Cacheable , :
- allEntries: , false。 true ,
- beforeInvocation: , false, 。 true , 。
5.終了
これらはspring cacheを使用してredisをキャッシュする方法です.あなたのプロジェクトで試してみる必要がある場合は、ここでEcacheキャッシュを使用していないのは、プロジェクトが分散配置を使用しているためであり、ローカルキャッシュではだめなので、redisをキャッシュとして使用し、アクセスを統一します.
何か問題があったら、手紙や伝言をください.