设为首页 收藏本站
查看: 556|回复: 0

[经验分享] 未完成的redis集成

[复制链接]

尚未签到

发表于 2016-12-18 10:31:18 | 显示全部楼层 |阅读模式
  
springmvc + mybatis +redis  没有调研完成的 缓存引入,
查找了各种资料,包括【Iteye上的大神:http://liuyieyer.iyunv.com/blog/2081382】
【github上的大神:https://github.com/mybatis/redis-cache】
  package xx.redis;
  import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
  import org.apache.ibatis.cache.Cache;
  import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;
  public final class RedisCache implements Cache {
  private final ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
  private String id;
  public RedisCache(final String id) {
  if (id == null) {
   throw new IllegalArgumentException("Cache instances require an ID");
  }
  this.id = id;
 }
  private Object execute(RedisCallback callback) {
  Jedis jedis = CachePool.getInstance().getJedis();
  try {
   return callback.doWithRedis(jedis);
  } finally {
   // jedis.close();
   jedis.quit();
  }
 }
  public String getId() {
  return this.id;
 }
  public int getSize() {
  return (Integer) execute(new RedisCallback() {
   public Object doWithRedis(Jedis jedis) {
    Map<byte[], byte[]> result = jedis.hgetAll(id.toString().getBytes());
    return result.size();
   }
  });
 }
  public void putObject(final Object key, final Object value) {
  execute(new RedisCallback() {
   public Object doWithRedis(Jedis jedis) {
    jedis.hset(id.toString().getBytes(), key.toString().getBytes(), SerializeUtil.serialize(value));
    return null;
   }
  });
 }
  public Object getObject(final Object key) {
  return execute(new RedisCallback() {
   public Object doWithRedis(Jedis jedis) {
    Object val = SerializeUtil.unserialize(jedis.hget(id.toString().getBytes(), key.toString().getBytes()));
    System.out.println("get from redis:id=" + key + ",val=" + val);
    return val;
   }
  });
 }
  public Object removeObject(final Object key) {
  return execute(new RedisCallback() {
   public Object doWithRedis(Jedis jedis) {
    return jedis.hdel(id.toString(), key.toString());
   }
  });
 }
  public void clear() {
  execute(new RedisCallback() {
   public Object doWithRedis(Jedis jedis) {
    jedis.del(id.toString());
    return null;
   }
  });
  }
  public ReadWriteLock getReadWriteLock() {
  return readWriteLock;
 }
  @Override
 public String toString() {
  return "Redis {" + id + "}";
 }
  /**
  *
  * @ClassName: CachePool
  * @Description: TODO(单例Cache池)
  * @author LiuYi
  */
 public static class CachePool {
  JedisPool pool;
  private static final CachePool cachePool = new CachePool();
  public static CachePool getInstance() {
   return cachePool;
  }
  private CachePool() {
   JedisPoolConfig config = new JedisPoolConfig();
   Properties p = new Properties();
   InputStream f = CachePool.class.getClassLoader().getResourceAsStream("redis.properties");
   try {
    p.load(f);
   } catch (IOException e) {
    e.printStackTrace();
   }
   config.setMaxIdle(Integer.valueOf(p.getProperty("redis.maxIdle")));
   config.setMaxWait(Integer.valueOf(p.getProperty("redis.maxWait")));
   pool = new JedisPool(config, p.getProperty("redis.host"));
  }
  public Jedis getJedis() {
   Jedis jedis = null;
   boolean borrowOrOprSuccess = true;
   try {
    jedis = pool.getResource();
   } catch (JedisConnectionException e) {
    borrowOrOprSuccess = false;
    if (jedis != null)
     pool.returnBrokenResource(jedis);
   } finally {
    if (borrowOrOprSuccess)
     pool.returnResource(jedis);
   }
   jedis = pool.getResource();
   return jedis;
  }
  public JedisPool getJedisPool() {
   return this.pool;
  }
  }
}
  ================================================
  package xx.redis;
import redis.clients.jedis.Jedis;
  public interface RedisCallback {
  Object doWithRedis(Jedis jedis);
}
  ================================================
  package xx.redis;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
  import org.apache.ibatis.cache.CacheException;
  public final class SerializeUtil {
  public static byte[] serialize(Object object) {
  ObjectOutputStream oos = null;
  ByteArrayOutputStream baos = null;
  try {
   baos = new ByteArrayOutputStream();
   oos = new ObjectOutputStream(baos);
   oos.writeObject(object);
   byte[] bytes = baos.toByteArray();
   return bytes;
  } catch (Exception e) {
   throw new CacheException(e);
  }
 }
  public static Object unserialize(byte[] bytes) {
  if (bytes == null) {
   return null;
  }
  ByteArrayInputStream bais = null;
  try {
   bais = new ByteArrayInputStream(bytes);
   ObjectInputStream ois = new ObjectInputStream(bais);
   return ois.readObject();
  } catch (Exception e) {
   throw new CacheException(e);
  }
 }
  }
  ================================================
redis.properties 文件:
  #redis configuration
redis.host=172.16.180.75
redis.port=6379
redis.pass=
redis.default.db=0
redis.timeout=100000
redis.maxActive=300
redis.maxIdle=100
redis.maxWait=1000
DBSync.testOnBorrow=true
  ====================================================
mybatis-config.xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 <settings>
  <setting name="cacheEnabled" value="true" />
<!--   <setting name="lazyLoadingEnabled" value="true" /> -->
<!--   <setting name="multipleResultSetsEnabled" value="true" /> -->
<!--   <setting name="useColumnLabel" value="true" /> -->
<!--   <setting name="useGeneratedKeys" value="false" /> -->
<!--   <setting name="enhancementEnabled" value="false" /> -->
<!--   <setting name="defaultExecutorType" value="SIMPLE" /> -->
 </settings>
</configuration>
  spring-mybatis文件
<!-- mybatis文件配置,扫描所有mapper文件 -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="mapperLocations">
   <array>
    <value>classpath:conf-mybatis/ext/*Mapper.xml</value>
    <value>classpath:conf-mybatis/*Mapper.xml</value>
   </array>
  </property>
  <property name="configLocation" value="classpath:conf-mybatis/mybatis-config.xml" />
  <property name="dataSource" ref="dataSource" />
  <property name="plugins">
   <ref bean="pageHelper" />
  </property>
 </bean>
=============================================================
  
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315913-1-1.html 上篇帖子: redis 性能问题查找 下篇帖子: redis、memcached、mongoDB 对比
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表