mybatis缓存(二)+redis
来源:互联网 发布:sumif函数匹配数据方法 编辑:程序博客网 时间:2024/05/21 10:25
redis缓存:
缓存中存在数据就直接返回 ,不存在就从数据库读写同时写入缓存
以后再访问同样的数据直接从缓存读取
<!-- redis jar包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
<setting name="cacheEnabled" value="true"/>
</settings>
映射文件:
mybatis默认缓存类 FifoCache :
内存空间不足时 需要一种机制保证内存不溢出
FIFO(默认):
需要将旧的的数据清除(最先插入的数据最先清除)
LRU:最近使用次数最少的,优先删除
LFU:最近一段时间内使用次数最少,优先删除
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" type="自定义实现类的路径">
</cache>
//实体类
public class Student implements Serializable{
private Integer sid;
private String sname;
private Integer gid;
private Integer sex;
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getGid() {
return gid;
}
public void setGid(Integer gid) {
this.gid = gid;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
}
//自定义实现Cache
public class RedisCache implements Cache {
/**
* 操作redis对象
*/
Jedis jedis=new Jedis("localhost",6379);
/**
* 缓存的id
*/
private String cacheId;
public RedisCache(String cacheId){
this.cacheId=cacheId;
}
@Override
public void clear() {
//jedis.flushDB();
}
@Override
public String getId() {
return cacheId;
}
/**
* mybatis自动调用getObject检测是否缓存中存在
*/
@Override
public Object getObject(Object key) {
try {
byte[] bt=jedis.get(RedisTest.objectToByteArray(key));
if(bt==null){
return null;
}
return RedisTest.byteArrayToObject(bt);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public ReadWriteLock getReadWriteLock() {
return new ReentrantReadWriteLock();
}
@Override
public int getSize() {
return 1;
}
/**
* mybatis读取数据时 将数据库中读取的数据 通过
* putObject设置到缓存中
*/
@Override
public void putObject(Object key, Object value) {
//写入redis
try {
jedis.set(RedisTest.objectToByteArray(key), RedisTest.objectToByteArray(value));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* mybatis缓存策略 自动判断内存的大小 绝对是否删除某些过期 久远的数据
* @param key
* @return
*/
@Override
public Object removeObject(Object key) {
Object obj=getObject(key);
try {
jedis.del(RedisTest.objectToByteArray(key));
} catch (IOException e) {
e.printStackTrace();
}
return obj;
}
}
//redis类
public class RedisTest {
/**
* 序列化
* @param object
* @return
* @throws IOException
*/
public static byte[] objectToByteArray(Object object) throws IOException{
ByteOutputStream boStream=new ByteOutputStream();
ObjectOutputStream oosStream=new ObjectOutputStream(boStream);
oosStream.writeObject(object);
return boStream.getBytes();
}
/**
* 反序列化
* @param by
* @return
* @throws Exception
*/
public static Object byteArrayToObject(byte[] by) throws Exception{
ByteInputStream biStream=new ByteInputStream(by,by.length);
biStream.read(by);
ObjectInputStream oisStream=new ObjectInputStream(biStream);
return oisStream.readObject();
}
public static void main(String[] args) {
Jedis jedis=new Jedis("localhost",6379);
//String
jedis.set("name", "ssg");
jedis.get("name");
//Hash
jedis.hset("user","age", "19");
jedis.hget("user", "age");
//List
jedis.lpush("class", "4","6");
jedis.rpush("class", "123");
jedis.lrange("class", 0, 10);
//Set(不支持重复元素)
jedis.sadd("phone", "pingguo");
jedis.smembers("phone");
//sorted set
jedis.zadd("grade", 66, "aa");
jedis.zrange("grade", 0, 10);
}
}
表结构,接口,测试类和mybatis缓存中一致
缓存中存在数据就直接返回 ,不存在就从数据库读写同时写入缓存
以后再访问同样的数据直接从缓存读取
<!-- redis jar包 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.2</version>
</dependency>
配置文件:
<settings><setting name="cacheEnabled" value="true"/>
</settings>
映射文件:
mybatis默认缓存类 FifoCache :
内存空间不足时 需要一种机制保证内存不溢出
FIFO(默认):
需要将旧的的数据清除(最先插入的数据最先清除)
LRU:最近使用次数最少的,优先删除
LFU:最近一段时间内使用次数最少,优先删除
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" type="自定义实现类的路径">
</cache>
//实体类
public class Student implements Serializable{
private Integer sid;
private String sname;
private Integer gid;
private Integer sex;
public Integer getSid() {
return sid;
}
public void setSid(Integer sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public Integer getGid() {
return gid;
}
public void setGid(Integer gid) {
this.gid = gid;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
}
//自定义实现Cache
public class RedisCache implements Cache {
/**
* 操作redis对象
*/
Jedis jedis=new Jedis("localhost",6379);
/**
* 缓存的id
*/
private String cacheId;
public RedisCache(String cacheId){
this.cacheId=cacheId;
}
@Override
public void clear() {
//jedis.flushDB();
}
@Override
public String getId() {
return cacheId;
}
/**
* mybatis自动调用getObject检测是否缓存中存在
*/
@Override
public Object getObject(Object key) {
try {
byte[] bt=jedis.get(RedisTest.objectToByteArray(key));
if(bt==null){
return null;
}
return RedisTest.byteArrayToObject(bt);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
public ReadWriteLock getReadWriteLock() {
return new ReentrantReadWriteLock();
}
@Override
public int getSize() {
return 1;
}
/**
* mybatis读取数据时 将数据库中读取的数据 通过
* putObject设置到缓存中
*/
@Override
public void putObject(Object key, Object value) {
//写入redis
try {
jedis.set(RedisTest.objectToByteArray(key), RedisTest.objectToByteArray(value));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* mybatis缓存策略 自动判断内存的大小 绝对是否删除某些过期 久远的数据
* @param key
* @return
*/
@Override
public Object removeObject(Object key) {
Object obj=getObject(key);
try {
jedis.del(RedisTest.objectToByteArray(key));
} catch (IOException e) {
e.printStackTrace();
}
return obj;
}
}
//redis类
public class RedisTest {
/**
* 序列化
* @param object
* @return
* @throws IOException
*/
public static byte[] objectToByteArray(Object object) throws IOException{
ByteOutputStream boStream=new ByteOutputStream();
ObjectOutputStream oosStream=new ObjectOutputStream(boStream);
oosStream.writeObject(object);
return boStream.getBytes();
}
/**
* 反序列化
* @param by
* @return
* @throws Exception
*/
public static Object byteArrayToObject(byte[] by) throws Exception{
ByteInputStream biStream=new ByteInputStream(by,by.length);
biStream.read(by);
ObjectInputStream oisStream=new ObjectInputStream(biStream);
return oisStream.readObject();
}
public static void main(String[] args) {
Jedis jedis=new Jedis("localhost",6379);
//String
jedis.set("name", "ssg");
jedis.get("name");
//Hash
jedis.hset("user","age", "19");
jedis.hget("user", "age");
//List
jedis.lpush("class", "4","6");
jedis.rpush("class", "123");
jedis.lrange("class", 0, 10);
//Set(不支持重复元素)
jedis.sadd("phone", "pingguo");
jedis.smembers("phone");
//sorted set
jedis.zadd("grade", 66, "aa");
jedis.zrange("grade", 0, 10);
}
}
表结构,接口,测试类和mybatis缓存中一致
阅读全文
0 0
- mybatis缓存(二)+redis
- mybatis 缓存(二) 二级缓存
- spring缓存(二)--redis缓存
- 【二】Springboot+Mybatis+Redis实现用户信息查询缓存
- mybatis缓存 redis实现
- Mybatis redis 缓存配置
- MyBatis+Redis缓存实现
- MyBatis redis缓存
- redis(五)redis与Mybatis的无缝整合让MyBatis透明的管理缓存二
- redis( 4 )redis与Mybatis的无缝整合让MyBatis透明的管理缓存二
- redis(五)redis与Mybatis的无缝整合让MyBatis透明的管理缓存二
- Mybatis的缓存机制(二)
- Redis + EJB 实现缓存(二)
- Redis缓存中的国际化(二)
- Redis(二)-----缓存优化
- mybatis整合REDIS远程缓存
- Spring+SpringMVC+mybatis+redis(二)
- MyBatis缓存分为一级缓存和二级缓存(二)
- HTML中 css实现滚动页面时固定页面其中一栏的效果
- Mac OS X 安装protobuf
- BottomNavigationBar 图片颜色被改变
- jquery 点击按钮,再显示4张图片,再次点击,再次显示4张图片
- Ruby:字符串处理函数
- mybatis缓存(二)+redis
- 配置anaconda镜像
- linux内部命令与外部命令
- 微信开发准备(四)--nat123内网地址公网映射实现
- Unity动画系统学习笔记<二>の问题记录
- android 设备写入文件,立即断电重启后,文件丢失,数据没有保存问题
- nova-virt与libvirt
- 收集 IT 领域伦理与道德的事实或观点
- BZOJ1880[Sdoi2009]Elaxia的路线 spfa+拓扑序