redisはmybatisの2次キャッシュをします
7438 ワード
1,mybatisのキャッシュ
まずmybatisには1次キャッシュと2次キャッシュの概念1)があり,1次キャッシュはSqlSessionレベルのキャッシュであることを知る.データベースの操作時にsqlSessionオブジェクトを構築する必要があります.オブジェクトにはキャッシュデータを格納するための(メモリ領域)データ構造(HashMap)があります.異なるsqlSession間のキャッシュデータ領域(HashMap)は互いに影響しない.2)レベルキャッシュは複数のSqlSessionで共有され、sqlSessionFactoryレベルであり、その役割ドメインはmapperの同じnamespaceであり、異なるsqlSessionは同じnamespaceの下のsql文を2回実行し、sqlにパラメータを渡すのも同じである最終的に同じsql文を実行し、1回目の実行が終わるとデータベースでクエリーしたデータをキャッシュ(メモリ)に書き込む.2回目にキャッシュからデータを取得すると、データベースからクエリーがなくなり、クエリーの効率が向上します.Mybatisのデフォルトでは、2次キャッシュが開かれていません.settingグローバルパラメータで2次キャッシュを開くように構成する必要があります.2,redisがmybatisの2次キャッシュを行うメリットRedisはデータの永続化をサポートし、メモリのデータをディスクに保持し、再起動時に再ロードして使用することができます.Redisは、単純なkey-valueタイプのデータだけでなく、list、set、zset、hashなどのデータ構造の格納もサポートします.Redisは、データのバックアップ、すなわちmaster-slaveモードのデータバックアップをサポートします.Redisの優位性は極めて高く、Redisが読める速度は110000回/s、書く速度は81000回/sです.豊富なデータ型–Redisは、バイナリ・ケースのStrings、Lists、Hashes、Sets、Ordered Setsのデータ型操作をサポートします.原子‐Redisのすべての操作は原子的であり,同時にRedisはいくつかの操作の完全な並列化後の原子的実行をサポートする.
3 mybatisの2次キャッシュの実装プロファイルによってmybatisの2次キャッシュを開く
jedisツールクラスを書いてredisを操作する
Cacheインタフェースライトツールクラスを実現mybatisのcacheインタフェースを実現
キャッシュが必要なmapperファイルにcacheラベルtypeを追加してcacheインタフェースを実現するクラスのフルリミット名を付けます.
これによりredisがmybatisの2次キャッシュを簡単に実現
まずmybatisには1次キャッシュと2次キャッシュの概念1)があり,1次キャッシュはSqlSessionレベルのキャッシュであることを知る.データベースの操作時にsqlSessionオブジェクトを構築する必要があります.オブジェクトにはキャッシュデータを格納するための(メモリ領域)データ構造(HashMap)があります.異なるsqlSession間のキャッシュデータ領域(HashMap)は互いに影響しない.2)レベルキャッシュは複数のSqlSessionで共有され、sqlSessionFactoryレベルであり、その役割ドメインはmapperの同じnamespaceであり、異なるsqlSessionは同じnamespaceの下のsql文を2回実行し、sqlにパラメータを渡すのも同じである最終的に同じsql文を実行し、1回目の実行が終わるとデータベースでクエリーしたデータをキャッシュ(メモリ)に書き込む.2回目にキャッシュからデータを取得すると、データベースからクエリーがなくなり、クエリーの効率が向上します.Mybatisのデフォルトでは、2次キャッシュが開かれていません.settingグローバルパラメータで2次キャッシュを開くように構成する必要があります.2,redisがmybatisの2次キャッシュを行うメリットRedisはデータの永続化をサポートし、メモリのデータをディスクに保持し、再起動時に再ロードして使用することができます.Redisは、単純なkey-valueタイプのデータだけでなく、list、set、zset、hashなどのデータ構造の格納もサポートします.Redisは、データのバックアップ、すなわちmaster-slaveモードのデータバックアップをサポートします.Redisの優位性は極めて高く、Redisが読める速度は110000回/s、書く速度は81000回/sです.豊富なデータ型–Redisは、バイナリ・ケースのStrings、Lists、Hashes、Sets、Ordered Setsのデータ型操作をサポートします.原子‐Redisのすべての操作は原子的であり,同時にRedisはいくつかの操作の完全な並列化後の原子的実行をサポートする.
3 mybatisの2次キャッシュの実装プロファイルによってmybatisの2次キャッシュを開く
<configuration>
<settings>
<setting name="cacheEnabled" value="true"/>
settings>
configuration>
jedisツールクラスを書いてredisを操作する
public class JedisUtil {
private static JedisPool jedisPool=null;
//
static{
//
JedisPoolConfig poolConfig = new JedisPoolConfig();
//
//
poolConfig.setMaxTotal(100);
//
poolConfig.setMaxIdle(10);
//
jedisPool=new JedisPool(poolConfig, "192.168.12.135");
}
// jedis
public static Jedis getJedis(){
Jedis jedis = jedisPool.getResource();
return jedis;
}
// jedis
public static void closeJedis(Jedis jedis){
if (jedis!=null) {
jedis.close();
}
}
Cacheインタフェースライトツールクラスを実現mybatisのcacheインタフェースを実現
public class RedisCache implements Cache {
private String id;
public void setId(String id){
this.id=id;
}
@Override
public void clear() {
// TODO Auto-generated method stub
}
public RedisCache(String id){
this.id=id;
}
@Override
public String getId() {
// TODO Auto-generated method stub
return id;
}
@Override
public Object getObject(Object key) {
Jedis jedis = JedisUtil.getJedis();
Object obj=null;
if (jedis.exists(SerializationUtils.serialize((Serializable)key))){
byte[] bs = jedis.get(SerializationUtils.serialize((Serializable)key));
//
obj = SerializationUtils.deserialize(bs);
}
JedisUtil.closeJedis(jedis);
return obj;
}
@Override
public ReadWriteLock getReadWriteLock() {
// TODO Auto-generated method stub
System.out.println("111");
return null;
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void putObject(Object key, Object value) {
Jedis jedis = JedisUtil.getJedis();
// jedis
jedis.set(SerializationUtils.serialize((Serializable)key),SerializationUtils.serialize((Serializable)value));
//
JedisUtil.closeJedis(jedis);
}
@Override
public Object removeObject(Object key) {
Jedis jedis = JedisUtil.getJedis();
Object obj=null;
if (jedis.exists(SerializationUtils.serialize((Serializable)key))) {
obj=jedis.del(SerializationUtils.serialize((Serializable)key));
}
return obj;
}
キャッシュが必要なmapperファイルにcacheラベルtypeを追加してcacheインタフェースを実現するクラスのフルリミット名を付けます.
type="com.eric.ddbg.utils.RedisCache" />
これによりredisがmybatisの2次キャッシュを簡単に実現