Jedis缓存实现类
来源:互联网 发布:js 过去选中的radio 编辑:程序博客网 时间:2024/06/08 08:35
pom.xml导入架包
<!-- 导入jedis架包 --><dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.1</version></dependency>
Jedis缓存实现类
package cn.et.mybatis.buff;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.util.Set;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;import org.apache.commons.pool2.impl.GenericObjectPoolConfig;import org.apache.ibatis.cache.Cache;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;public class JedisCache implements Cache {/** * 序列化和反序列化的操作类 * @author Administrator * */static class SeqUtils{/** * 对象序列化成字节数组 * @param obj * @return * @throws IOException */public static byte[] ser(Object obj) throws IOException{ByteArrayOutputStream baos=new ByteArrayOutputStream();ObjectOutputStream obos=new ObjectOutputStream(baos);obos.writeObject(obj);return baos.toByteArray();}/** * 反序列化为对象 * @param bt * @return * @throws IOException * @throws ClassNotFoundException */static public Object deSer(byte[] bt) throws IOException, ClassNotFoundException{ByteArrayInputStream bais=new ByteArrayInputStream(bt);ObjectInputStream ois = new ObjectInputStream(bais);return ois.readObject();}}static JedisPool jp = null;private String id;public JedisCache(String id){if(jp==null){try {GenericObjectPoolConfig gopc=new GenericObjectPoolConfig();gopc.setMaxTotal(100);gopc.setMaxIdle(10);jp=new JedisPool(gopc, "localhost");//去数据库连接一下,这样出错就会抛异常Jedis jedis = jp.getResource();jp.returnResourceObject(jedis);} catch (Exception e) {//e.printStackTrace();jp=null;}}this.id=id;}/** * 清空所有的缓存 */public void clear() {Jedis jedis = jp.getResource();jedis.flushAll();jp.returnResourceObject(jedis);}/** * 返回当前的id */public String getId() {return this.id;}/** * maBatis会自动调用该方法,判断返回值是否为null * 如果为空就去数据查 * 不为空就直接返回缓存对象 */public Object getObject(Object key) {//从连接池中获取一条连接Jedis jedis = jp.getResource();try {byte[] bt = jedis.get(SeqUtils.ser(key));if(bt!=null){Object obj = SeqUtils.deSer(bt);//将redis对象回收到连接池中jp.returnResourceObject(jedis);return obj;}} catch (Exception e) {e.printStackTrace();}return null;}/** * non-block io非阻塞式IO * 读写锁 * 同一时间只能有一个线程访问 */public ReadWriteLock getReadWriteLock() {return new ReentrantReadWriteLock();}/** * 用于读取redis中缓存了多少元素 */public int getSize() {Jedis jedis=jp.getResource();Set<String> allElements=jedis.keys("*");return allElements.size();}/** * 第一次查询数据库后mybatis会自动调用该方法将数据写入缓存 */public void putObject(Object key, Object value) {Jedis jedis=jp.getResource();try {jedis.set(SeqUtils.ser(key), SeqUtils.ser(value));//将redis对象回收到连接池中jp.returnResourceObject(jedis);} catch (IOException e) {e.printStackTrace();}}/** * 调用了myBatis flush方法自动清空缓存 * 自动调用removeObject 需要从redis中删除该元素 */public Object removeObject(Object key) {Jedis jedis=jp.getResource();try {jedis.del(SeqUtils.ser(key));//将redis对象回收到连接池中jp.returnResourceObject(jedis);} catch (IOException e) {e.printStackTrace();}return null;}}
emp_mapper.xml
<!-- 加上cache标签就开启mybatis的二级缓存了 eviction="LRU" eviction属性 FIFO 将队列最右端的数据T出内在 为先进先去 LFU 使用次数最少的T出内存 这个在这里不支持 LRU 最近使用次数最少的 --> <cache type="cn.et.mybatis.buff.JedisCache"></cache> <select id="queryEmp2" resultType="cn.et.mybatis.lesson05.buff.Emp">select empno,ename,sal from emp where empno=#{0} </select>
阅读全文
0 0
- Jedis缓存实现类
- Jedis缓存实现类
- Jedis-缓存操作具体实现代码。
- jedis缓存
- Jedis 缓存
- 【redis-demo】使用Jedis api 实现后端缓存优化
- 缓存之Redis--Jedis
- 缓存 Redis + Jedis
- Redis+Jedis+Spring封装RedisManager类操作缓存(三)
- 用Jedis操作redis缓存
- 缓存之Jedis API篇
- Redis缓存系统(一)Java-Jedis操作Redis,基本操作以及 实现对象保存
- Redis缓存系统(1)Java-Jedis操作Redis,基本操作以及 实现对象保存
- jedis实现监控-JedisMonitor
- Jedis动态分片实现
- Jedis主从切换实现
- Jedis 实现发布订阅
- Jedis连接 HelloWorld实现
- 英国BBC micro:bit 已登陆中国销售,用于促进青少年编程教育的ARM开发板。
- 父组件调用子组件的方法以及子组件调用父组件的方法
- windows、linux下之IBM MQ两个队列管理器之间的通信(终篇)
- 笨方法34-39
- 大数据-什么是云计算
- Jedis缓存实现类
- webService公共开放接口大全
- Docekr network
- ARM汇编指令
- 关于ajax中success返回值赋值给全局变量undefined
- 利用npm命令从获取淘宝镜像的cnpm
- 随笔记:MySQL not in 查询失效
- 人工智能发展史
- 时间复杂度与空间复杂度