Redis入門簡単その5【JedisとSpringの統合】
前回の記事ではJedisの接続プールの使い方を簡単に紹介しました.
Springと統合すれば、より簡潔で柔軟性が得られ、より優雅な方法であることは明らかです.
[一].構築環境:1.以前のバージョンの基礎の上で、spring.jar commons-logging.jar log4j-1.2.15.jarログプロファイル:log 4 jを同時に追加する.propertiesはclasspathの下にあります. 2. Springファイルの構成:アプリケーションContext.xml注意:接続プールjedisPoolの構成は、JedisのAPIと一致する構造注入を使用します.portを注入する場合はtype=「int」を使用して注入のパラメータタイプを指定する必要があります.そうしないと、異常が発生します.
[二].SPringコンテナからJedisPoolを取得するには:
[三].キャッシュJavaBean:前の記事では、Jedisの使用に関する基本的な説明がありました.
もちろん、多くの場合、RedisがJavaBeanをキャッシュすることを望んでいます.これはJDKが提供するシーケンス化技術を借りる必要があります. 1. キャッシュエンティティにシリアル化Serializableインタフェースを実装する必要があります.ここではUserinfoを例に挙げます. 2. シーケンス化ツールクラス:Jedisのシーケンス化のサポートは、バイト配列byte[]をパラメータとして提供します.このためにSerializingUtilツールクラスを作成し、byte[]とJavaBean間の相互変換を担当します.この方法のAPIは以下の通りである.
このツールクラスの具体的な実装:
3. JavaBeanの格納と取得:エンティティの定義:Timestampクラスを使用してms値を取得します.
Jedis操作を使用:key、valueはbyte[]バイト配列に変換する必要があります.
オブジェクトの比較:equalsメソッドとhashCodeメソッドを上書きする必要があります.
Springと統合すれば、より簡潔で柔軟性が得られ、より優雅な方法であることは明らかです.
[一].構築環境:1.以前のバージョンの基礎の上で、spring.jar commons-logging.jar log4j-1.2.15.jarログプロファイル:log 4 jを同時に追加する.propertiesはclasspathの下にあります. 2. Springファイルの構成:アプリケーションContext.xml注意:接続プールjedisPoolの構成は、JedisのAPIと一致する構造注入を使用します.portを注入する場合はtype=「int」を使用して注入のパラメータタイプを指定する必要があります.そうしないと、異常が発生します.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<!-- redis -->
<context:property-placeholder location="classpath:redis.properties"/>
<!-- redis -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxActive" value="${redis.pool.maxActive}"/>
<property name="maxIdle" value="${redis.pool.maxIdle}"/>
<property name="minIdle" value="${redis.pool.minIdle}"/>
<property name="maxWait" value="${redis.pool.maxWait}"/>
<property name="testOnBorrow" value="${redis.pool.testOnBorrow}"/>
<property name="testOnReturn" value="${redis.pool.testOnReturn}"/>
</bean>
<!-- redis pool, :timeout/password -->
<bean id = "jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg index="0" ref="jedisPoolConfig"/>
<constructor-arg index="1" value="${redis.host}"/>
<constructor-arg index="2" value="${redis.port}" type="int"/>
<constructor-arg index="3" value="${redis.timeout}" type="int"/>
<constructor-arg index="4" value="${redis.password}"/>
</bean>
</beans>
[二].SPringコンテナからJedisPoolを取得するには:
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
JedisPool pool = (JedisPool) context.getBean("jedisPool");
Jedis jedis = pool.getResource();
...
pool.returnResource(jedis);
[三].キャッシュJavaBean:前の記事では、Jedisの使用に関する基本的な説明がありました.
もちろん、多くの場合、RedisがJavaBeanをキャッシュすることを望んでいます.これはJDKが提供するシーケンス化技術を借りる必要があります. 1. キャッシュエンティティにシリアル化Serializableインタフェースを実装する必要があります.ここではUserinfoを例に挙げます. 2. シーケンス化ツールクラス:Jedisのシーケンス化のサポートは、バイト配列byte[]をパラメータとして提供します.このためにSerializingUtilツールクラスを作成し、byte[]とJavaBean間の相互変換を担当します.この方法のAPIは以下の通りである.
public static byte[] serialize(Object source);
public static Object deserialize(byte[] source);
このツールクラスの具体的な実装:
/**
* : , byte[] Object .
* @author Nick Xu
* @version 1.0
*/
public class SerializingUtil {
private static Log logger = LogFactory.getLog(SerializingUtil.class);
/**
* : Bean .
* @param source
* @return
* @throws Exception
*/
public static byte[] serialize(Object source) {
ByteArrayOutputStream byteOut = null;
ObjectOutputStream ObjOut = null;
try {
byteOut = new ByteArrayOutputStream();
ObjOut = new ObjectOutputStream(byteOut);
ObjOut.writeObject(source);
ObjOut.flush();
}
catch (IOException e) {
logger.error(source.getClass().getName()
+ " serialized error !", e);
}
finally {
try {
if (null != ObjOut) {
ObjOut.close();
}
}
catch (IOException e) {
ObjOut = null;
}
}
return byteOut.toByteArray();
}
/**
* : Bean.
* @param source
* @return Bean
* @throws Exception
*/
public static Object deserialize(byte[] source) {
ObjectInputStream ObjIn = null;
Object retVal = null;
try {
ByteArrayInputStream byteIn = new ByteArrayInputStream(source);
ObjIn = new ObjectInputStream(byteIn);
retVal = ObjIn.readObject();
}
catch (Exception e) {
logger.error("deserialized error !", e);
}
finally {
try {
if(null != ObjIn) {
ObjIn.close();
}
}
catch (IOException e) {
ObjIn = null;
}
}
return retVal;
}
}
3. JavaBeanの格納と取得:エンティティの定義:Timestampクラスを使用してms値を取得します.
Userinfo actual = new Userinfo(140520, "Nick Xu",
new Date(Timestamp.valueOf("1990-11-11 00:00:00").getTime()));
Jedis操作を使用:key、valueはbyte[]バイト配列に変換する必要があります.
String key = "user.userid." + actual.getUserId();
jedis.set(key.getBytes(), SerializingUtil.serialize(actual));
Userinfo expected = (Userinfo) SerializingUtil.deserialize(jedis.get(key.getBytes()));
オブジェクトの比較:equalsメソッドとhashCodeメソッドを上書きする必要があります.
assertEquals(expected, actual);