mybatis使用redis作为自定义缓存的配置
来源:互联网 发布:如何搭讪 知乎 编辑:程序博客网 时间:2024/05/22 06:44
配置mybatis使用redis作为自定义缓存
mybatis自身的缓存做的并不完美,但它提供了使用自定义缓存的机会,我们可以选择使用我们喜欢的自定义缓存,下面将介绍一下,使用redis作为mybatis的自定义缓存的具体步骤。
redis和mybatis的下载以及使用这里就不多介绍了(网上都可以学到)
1.首先,要想使用mybatis自定义缓存,就必须让自定义缓存类实现mybatis提供的Cache 接口(org.apache.ibatis.cache.Cache)
package org.apache.ibatis.cache;import java.util.concurrent.locks.ReadWriteLock;public interface Cache { String getId(); void putObject(Object var1, Object var2); Object getObject(Object var1); Object removeObject(Object var1); void clear(); int getSize(); ReadWriteLock getReadWriteLock();}
我们要使用redis做自定义缓存,就应该完成这个自定义缓存类,但mybatis的git上提供了相对于的适配包,我们只需要下载即可,下面是适配包的maven依赖
<dependency> <groupId>org.mybatis.caches</groupId> <artifactId>mybatis-redis</artifactId> <version>1.0.0-beta2</version> </dependency>
我们可以查看RedisCache的源码:
package org.mybatis.caches.redis;import java.util.Map;import java.util.concurrent.locks.ReadWriteLock;import org.apache.ibatis.cache.Cache;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;public final class RedisCache implements Cache { private final ReadWriteLock readWriteLock = new DummyReadWriteLock(); private String id; private static JedisPool pool; public RedisCache(String id) { if (id == null) { throw new IllegalArgumentException("Cache instances require an ID"); } else { this.id = id; RedisConfig redisConfig = RedisConfigurationBuilder.getInstance().parseConfiguration(); pool = new JedisPool(redisConfig, redisConfig.getHost(), redisConfig.getPort(), redisConfig.getConnectionTimeout(), redisConfig.getSoTimeout(), redisConfig.getPassword(), redisConfig.getDatabase(), redisConfig.getClientName()); } } private Object execute(RedisCallback callback) { Jedis jedis = pool.getResource(); Object var3; try { var3 = callback.doWithRedis(jedis); } finally { jedis.close(); } return var3; } public String getId() { return this.id; } public int getSize() { return ((Integer)this.execute(new RedisCallback() { public Object doWithRedis(Jedis jedis) { Map<byte[], byte[]> result = jedis.hgetAll(RedisCache.this.id.toString().getBytes()); return result.size(); } })).intValue(); } public void putObject(final Object key, final Object value) { this.execute(new RedisCallback() { public Object doWithRedis(Jedis jedis) { jedis.hset(RedisCache.this.id.toString().getBytes(), key.toString().getBytes(), SerializeUtil.serialize(value)); return null; } }); } public Object getObject(final Object key) { return this.execute(new RedisCallback() { public Object doWithRedis(Jedis jedis) { return SerializeUtil.unserialize(jedis.hget(RedisCache.this.id.toString().getBytes(), key.toString().getBytes())); } }); } public Object removeObject(final Object key) { return this.execute(new RedisCallback() { public Object doWithRedis(Jedis jedis) { return jedis.hdel(RedisCache.this.id.toString(), new String[]{key.toString()}); } }); } public void clear() { this.execute(new RedisCallback() { public Object doWithRedis(Jedis jedis) { jedis.del(RedisCache.this.id.toString()); return null; } }); } public ReadWriteLock getReadWriteLock() { return this.readWriteLock; } public String toString() { return "Redis {" + this.id + "}"; }}
2.我们需要在mybatis的配置文件里手动设置缓存可用
<setting name="cacheEnabled" value="true"/>
3.在对应的mapper里设置我们想用的自定义缓存类
如果我们使用的是mapper.xml文件来配置对应的查询语句,那么在它的头部加上
<cache type="org.mybatis.caches.redis.RedisCache"/>
如果我们使用的是在**mapper.java对应的mapper方法上使用注解来设置对应的数据库查询语句,那就在mapper类上加上下面的代码
@CacheNamespace(implementation = org.mybatis.caches.redis.RedisCache.class)
ok,大功告成!
阅读全文
0 0
- mybatis使用redis作为自定义缓存的配置
- 配置Redis作为缓存
- Redis 作为缓存服务器的配置
- Redis 作为缓存服务器的配置
- Redis 作为缓存服务器的配置
- Redis 作为缓存服务器的配置
- Redis 作为缓存服务器的配置
- Redis 作为缓存服务器的配置
- 使用redis作为缓存
- 使用redis作为缓存
- Redis作为MySQL缓存服务器的使用
- Mybatis redis 缓存配置
- mybatis的二级缓存--配置redis缓存
- 使用Redis作为LRU缓存
- 使用Redis作为LRU缓存
- 使用Redis作为缓存2
- 使用Redis作为LRU缓存
- 使用Redis作为LRU缓存
- java反射技术
- a标签中使用img后的高度多了几个像素 解决办法
- 1.统计数字字符个数
- activity使用总结
- Hadoop集群搭建详解
- mybatis使用redis作为自定义缓存的配置
- 第三次实验
- Navicat for MySQL触发器更新和插入操作
- 递归算法
- android知识点链接(一)
- 原型链模式基础
- ERP能效测试待关机产品ErP指令介绍及释疑
- 多年未写的C语言程序
- 二极管几个主要特性