redis学习总结-redis作为MyBatis的自定义缓存
1、RedisCache.java
- package com.houtai.cache;
- import java.util.concurrent.locks.ReadWriteLock;
- import java.util.concurrent.locks.ReentrantReadWriteLock;
- import org.apache.ibatis.cache.Cache;
- import org.apache.ibatis.logging.Log;
- import org.apache.ibatis.logging.LogFactory;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
- public class RedisCache implements Cache {
- private static Log logger = LogFactory.getLog(RedisCache.class);
- private Jedis redisClient = createClient();
- /** The ReadWriteLock. */
- 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");
- }
- logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>MybatisRedisCache:id=" + id);
- this.id = id;
- }
- public String getId() {
- return this.id;
- }
- public int getSize() {
- return Integer.valueOf(redisClient.dbSize().toString());
- }
- public void putObject(Object key, Object value) {
- logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>putObject:" + key + "=" + value);
- redisClient.set(SerializeUtil.serialize(key.toString()), SerializeUtil
- .serialize(value));
- }
- public Object getObject(Object key) {
- Object value = SerializeUtil.unserialize(redisClient.get(SerializeUtil
- .serialize(key.toString())));
- logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>getObject:" + key + "=" + value);
- return value;
- }
- public Object removeObject(Object key) {
- return redisClient.expire(SerializeUtil.serialize(key.toString()), 0);
- }
- public void clear() {
- redisClient.flushDB();
- }
- public ReadWriteLock getReadWriteLock() {
- return readWriteLock;
- }
- protected static Jedis createClient() {
- try {
- JedisPool pool = new JedisPool(new JedisPoolConfig(),
- "localhost");
- return pool.getResource();
- } catch (Exception e) {
- e.printStackTrace();
- }
- throw new RuntimeException("初始化连接池错误");
- }
- }
2、序列化与方序列化工具类
- package com.houtai.cache;
- import java.io.ByteArrayInputStream;
- import java.io.ByteArrayOutputStream;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- /**
- *
- * @author 作者: wcy
- * @version 创建时间:Mar 20, 2015 3:27:39 PM
- * @Description: TODO(用于序列化键值对)
- */
- public 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) {
- e.printStackTrace();
- }
- return null;
- }
- 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) {
- e.printStackTrace();
- }
- return null;
- }
- }
3、自定义缓存的入口,继承MyBatis的loggingCache类
- package com.houtai.cache;
- import org.apache.ibatis.cache.decorators.LoggingCache;
- public class LoggingRedisCache extends LoggingCache{
- public LoggingRedisCache(String id) {
- super(new RedisCache(id));
- // TODO Auto-generated constructor stub
- }
- }
4、同时配置MyBatis的配置文件
- <?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" />
- <!-- 对于未知的SQL查询,允许返回不同的结果集以达到通用的效果 -->
- <setting name="multipleResultSetsEnabled" value="true" />
- <!-- 配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 -->
- <setting name="defaultExecutorType" value="REUSE" />
- <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 -->
- <setting name="lazyLoadingEnabled" value="false" />
- <setting name="aggressiveLazyLoading" value="true" />
- <!-- <setting name="enhancementEnabled" value="true"/> -->
- <!-- 设置超时时间,它决定驱动等待一个数据库响应的时间。 -->
- <setting name="defaultStatementTimeout" value="25000" />
- </settings>
- <typeAliases>
- <package name="com.houtai.model" />
- </typeAliases>
- <mappers>
- <mapper resource="sqlmap/houtai/accountMapper.xml" />
- <mapper resource="sqlmap/houtai/categoryMapper.xml" />
- <mapper resource="sqlmap/houtai/goodsMapper.xml" />
- <mapper resource="sqlmap/houtai/sorderMapper.xml" />
- <mapper resource="sqlmap/houtai/forderMapper.xml" />
- </mappers>
- </configuration>
5、因为使用MyBatis的二级缓存,所以要缓存的类,必须开启<cache/>
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.houtai.model.Account">
- <!-- redis缓存 -->
- <cache eviction="LRU" type="com.houtai.cache.LoggingRedisCache"/>
- <select id="loginAccount" parameterType="account" resultType="account" useCache="true">
- select * from account a where a.login=#{login} and a.pass=#{pass}
- </select>
- </mapper>
6、最后测试通过。
redis学习总结-redis作为MyBatis的自定义缓存的更多相关文章
- Redis学习笔记~Redis主从服务器,读写分离
回到目录 Redis这个Nosql的存储系统一般会被部署到linux系统中,我们可以把它当成是一个数据服务器,对于并发理大时,我们会使用多台服务器充当Redis服务器,这时,各个Redis之间也是分布 ...
- redis学习笔记-redis的安装
Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情况选择, ...
- Redis学习-redis概述
最近刚刚接触了redis技术,对此有一些了解,这是简单做一点总结. Redis简介 首先,简单了解一下NoSQL(Not only sql),不要错误的理解为:没有SQL,而是不仅仅是SQL.NoSQ ...
- Redis学习笔记-Redis内部数据结构
Redis内部数据结构 Redis和其他key-value数据库的很大区别是它支持非字符串类型的value值.它支持的value值的类型如下: sds (simple dynamic string) ...
- redis学习之——redis.conf配置(基本)文件学习
# Redis configuration file example # Note on units: when memory size is needed, it is possible to sp ...
- Redis集成到Spring做mybatis做二级缓存
一.原理: 要缓存的 Java 对象必须实现 Serializable 接口,因为 Spring 会将对象先序列化再存入 Redis,比如本文中的 com.defonds.bdp.city.bean. ...
- Redis学习笔记--Redis配置文件Sentinel.conf参数配置详解
redis-sentinel.conf配置项说明如下: 1.port 26379 sentinel监听端口,默认是26379,可以修改. 2.sentinel monitor <master-n ...
- redis学习笔记——Redis过期键的删除策略
Redis过期键的删除策略 对于过期键一般有三种删除策略 定时删除:在设置键的过期时间的同时,创建一个定时器(timer),让定时器在键的过期时间来临时,立即执行对键的删除操作: 惰性删除:放任键过期 ...
- [转载] redis学习入门 Redis 3.2.100
参考博客: https://blog.csdn.net/flyer_tang/article/details/80320974 https://blog.csdn.net/weixin_3077313 ...
随机推荐
- 【信号与线性系统】为什么求解零输入响应时转移算子H(p)不能约分,但计算单位冲激响应时却可以约分?
为什么求零输入响应rZI时转移算子H(p)不能约分? . . . 我们知道,求零输入响应rZI的实质其实是求解微分方程 D(p)r(t) = N(p)e(t) 的解.由于这里 e(t)=0 ,所以这是 ...
- 运用SharedPreferences“偷取”输入的信息
运用SharedPreferences"偷取"输入的信息 本次的任务是 利用SharedPreferences来完成信息的保存和读取 就是你输入什么 手机就可以把输入的内容&quo ...
- 别人的Linux私房菜(21)基础系统设置与备份策略
网络设置,手动设置IP,DHCP自动获取. 以太网协议开发出来的网卡ethN,N为数字. CentOS7对网卡命名的规则:eno代表由主板BIOS内建立的网卡,ens1由主板BIOS内建的PCI-E界 ...
- WPF一组Radio与enum绑定
工作中用到了一组RadioButton对应一组数据的情况,这个时候最好能将一组RadioButton绑定Enum. 步骤 1.MyControl库中Type.cs中定义Enum namespace M ...
- swagger 参数
http://www.mamicode.com/info-detail-2213514.html
- ScrollView无法滚动
ScrollView视图无法滚动 箭头所指地方应该用dp单位的数值
- Win7 VS2017 NASM编译FFMPEG(2018.12.22)
今天无意中在gayhub发现个牛逼工程,全VS工程编译FFMPEG库,包括依赖库全是VS生成的,无需Mingw等Linux环境. 简单记录下过程,以防将来重装系统等情况,备忘. https://git ...
- POJ2947-Widget Factory
工厂里每件期间的生产时间为3-9天,告诉你有N个器件和M个计划,每个计划都是说明生产1-N号器件的时间,最后问你每件器件的生产时间.或者多解或没有解. 例如样例 2 3 2 MON THU 1 2 3 ...
- future项目上报
private String name;//预警名称 private String detail;//详细 用于定义位置和报错信息,越多越好private String code;//编码 1001是 ...
- MATLAB2016a安装破解教程
首先,下载软件:下面是某博主的分享,可以下载软件. 链接:https://pan.baidu.com/s/1i6BgD8p 密码:17gg 第一步:安装软件 1,下载文件,得到R2016 ...