- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SpringBoot+Mybatis项目使用Redis做Mybatis的二级缓存的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
介绍 。
使用mybatis时可以使用二级缓存提高查询速度,进而改善用户体验.
使用redis做mybatis的二级缓存可是内存可控<如将单独的服务器部署出来用于二级缓存>,管理方便.
1.在pom.xml文件中引入redis依赖 。
1
2
3
4
|
<
dependency
>
<
groupId
>org.springframework.boot</
groupId
>
<
artifactId
>spring-boot-starter-data-redis</
artifactId
>
</
dependency
>
|
2.在application.properties配置文件中进行redis的配置 。
1
2
3
4
5
6
7
8
9
10
|
## Redis
spring.redis.database=0
spring.redis.host=172.16.3.123
spring.redis.port=6379
spring.redis.password=
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.timeout=0
|
3.创建cache包,然后创建两个类,一个ApplicationContextHolder实现ApplicationContextAware接口,具体内容如下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
package
com.ruijie.SpringBootandRedis.cache;
import
org.springframework.beans.BeansException;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.ApplicationContextAware;
import
org.springframework.stereotype.Component;
@Component
public
class
ApplicationContextHolder
implements
ApplicationContextAware {
private
static
ApplicationContext applicationContext;
@Override
public
void
setApplicationContext(ApplicationContext ctx)
throws
BeansException {
applicationContext = ctx;
}
/**
* Get application context from everywhere
*
* @return
*/
public
static
ApplicationContext getApplicationContext() {
return
applicationContext;
}
/**
* Get bean by class
*
* @param clazz
* @param <T>
* @return
*/
public
static
<T> T getBean(Class<T> clazz) {
return
applicationContext.getBean(clazz);
}
/**
* Get bean by class name
*
* @param name
* @param <T>
* @return
*/
public
static
<T> T getBean(String name) {
return
(T) applicationContext.getBean(name);
}
}
|
4.创建RedisCache类实现Cache接口,具体内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
package
com.ruijie.SpringBootandRedis.cache;
import
org.apache.ibatis.cache.Cache;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
org.springframework.data.redis.core.RedisCallback;
import
org.springframework.data.redis.core.RedisTemplate;
import
org.springframework.data.redis.core.ValueOperations;
import
java.util.concurrent.TimeUnit;
import
java.util.concurrent.locks.ReadWriteLock;
import
java.util.concurrent.locks.ReentrantReadWriteLock;
public
class
RedisCache
implements
Cache {
private
static
final
Logger logger = LoggerFactory.getLogger(RedisCache.
class
);
private
final
ReadWriteLock readWriteLock =
new
ReentrantReadWriteLock();
private
final
String id;
// cache instance id
private
RedisTemplate redisTemplate;
private
static
final
long
EXPIRE_TIME_IN_MINUTES =
30
;
// redis过期时间
public
RedisCache(String id) {
if
(id ==
null
) {
throw
new
IllegalArgumentException(
"Cache instances require an ID"
);
}
this
.id = id;
}
@Override
public
String getId() {
return
id;
}
/**
* Put query result to redis
*
* @param key
* @param value
*/
@Override
public
void
putObject(Object key, Object value) {
try
{
RedisTemplate redisTemplate = getRedisTemplate();
ValueOperations opsForValue = redisTemplate.opsForValue();
opsForValue.set(key, value, EXPIRE_TIME_IN_MINUTES, TimeUnit.MINUTES);
logger.debug(
"Put query result to redis"
);
}
catch
(Throwable t) {
logger.error(
"Redis put failed"
, t);
}
}
/**
* Get cached query result from redis
*
* @param key
* @return
*/
@Override
public
Object getObject(Object key) {
try
{
RedisTemplate redisTemplate = getRedisTemplate();
ValueOperations opsForValue = redisTemplate.opsForValue();
logger.debug(
"Get cached query result from redis"
);
System.out.println(
"****"
+opsForValue.get(key).toString());
return
opsForValue.get(key);
}
catch
(Throwable t) {
logger.error(
"Redis get failed, fail over to db"
, t);
return
null
;
}
}
/**
* Remove cached query result from redis
*
* @param key
* @return
*/
@Override
@SuppressWarnings
(
"unchecked"
)
public
Object removeObject(Object key) {
try
{
RedisTemplate redisTemplate = getRedisTemplate();
redisTemplate.delete(key);
logger.debug(
"Remove cached query result from redis"
);
}
catch
(Throwable t) {
logger.error(
"Redis remove failed"
, t);
}
return
null
;
}
/**
* Clears this cache instance
*/
@Override
public
void
clear() {
RedisTemplate redisTemplate = getRedisTemplate();
redisTemplate.execute((RedisCallback) connection -> {
connection.flushDb();
return
null
;
});
logger.debug(
"Clear all the cached query result from redis"
);
}
/**
* This method is not used
*
* @return
*/
@Override
public
int
getSize() {
return
0
;
}
@Override
public
ReadWriteLock getReadWriteLock() {
return
readWriteLock;
}
private
RedisTemplate getRedisTemplate() {
if
(redisTemplate ==
null
) {
redisTemplate = ApplicationContextHolder.getBean(
"redisTemplate"
);
}
return
redisTemplate;
}
}
|
5.实体类中要实现Serializable接口,并且要声明序列号 。
1
|
private
static
final
long
serialVersionUID = -2566441764189220519L;
|
6.开启Mybatis的二级缓存 。
在pom.xml配置文件中配置 。
1
|
mybatis.configuration.cache-enabled=true
|
在mapper接口中加入 。
1
|
@CacheNamespace
(implementation=(com.demo.testdemo.cache.RedisCache.
class
))
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:http://blog.csdn.net/qq_38158631/article/details/78721794 。
最后此篇关于SpringBoot+Mybatis项目使用Redis做Mybatis的二级缓存的方法的文章就讲到这里了,如果你想了解更多关于SpringBoot+Mybatis项目使用Redis做Mybatis的二级缓存的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
1.概述 转载:MyBatis 二级缓存全详解 上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存,什么是 SqlSession 级别的缓存呢?一级缓存的本质
1.概述 转载:核心配置综述之StatementHandler 2.MyBatis 四大组件之StatementHandler StatementHandler 是四大组件中最重要的一个对象,负责操作
1.概述 转载:MyBatis 启动流程 MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的类持久框架。MyBatis 消除了大部分 JDBC 的样板代码、手动设置参数以及检索结果。My
1.概述 转载:MyBatis 基础搭建及架构概述 2.MyBatis 是什么? MyBatis是第一个支持自定义SQL、存储过程和高级映射的类持久框架。MyBatis消除了大部分JDBC的样板代码、
1.概述 转载:核心配置综述之 ParameterHandler MyBatis 四大核心组件我们已经了解到了两种,一个是 Executor ,它是MyBatis 解析SQL请求首先会经过的第一道关卡
1.概述 转载:核心配置综述之 ResultSetHandler 我们之前介绍过了MyBatis 四大核心配置之 Executor、StatementHandler、 ParameterHandler
如果我使用mybatis,我可以很容易地得到更新的行数,就像 update table set desc = 'xxx' where name = ? 但是,如果我想获取更新的行数,而不是计数,我该如
如何在MyBatis 3中使用小于等于 SELECT * FROM( SELECT * FROM TABLE1 WHERE COL1 =#{COL1,jdbc
我将 mybatis3.0.6 与 java 一起使用 哪个性能更好? [select id="getData" parameterType="Integer" resultType="Integer
我无法在 mybatis 中使用动态排序类型创建 SQL,如下例 select user_profile.user_profile_id, user_profile.first_name
这是一个流行的例子。 insert into ACCOUNT ( ACC_ID, ACC_FIRST_NAME, ACC_LAST_NAME, ACC_EMAIL )values (
我下载了MyBatis,文件夹中有一个mybatis-3.0.4-javadoc.jar,我解压并打开它,但它几乎是空的。 哪里可以找到MyBatis的API文档? 最佳答案 http://repo1
我正在尝试为 ArrayList 编写类型处理程序,但这给了我错误,任何人都可以帮助我。 我想将 ArrayList 作为 VARCHAR 存储在数据库中并将其检索为 ArrayList。 packa
目录 依赖 配置 CodeGenerator mybatis-plus-generator + clickhouse 自动生成代码 依赖
目录 三者实现对比 使用fluent mybatis 来实现上面的功能 换成mybatis原生实现效果 换成mybatis plus
例如,我有查询从员工中选择 ID、姓名、年龄、地址,而不是拥有员工对象列表。我希望有一个 map 列表,如 list{ map{ ("id", 123), ("name","jac
我在使 MyBatis (3.4.6) 工作时遇到一些麻烦。 我已将 mybatis-config.xml 文件放置在项目的 src/main/resources 文件夹中,但是当我运行单元测试时,出
我现在使用 Mybatis 和 spring-boot。我没有添加mybatis-config.xml。我根据说明通过 application.properties 为数据源和 mybatis 进行所
这是我的第一篇文章,用我糟糕的英语...... 我使用的是MyBatis3.0 在查询中,我使用 SqlBuilder 的方法如下: public class DataStatisticSqlBuil
主题:MyBatis:Boolean Paraeter:MyBatis 正在使用 Getter 内容: 大家好, 我一直在寻找解决我近乎简单的 MyBatis 问题的方法: 给定代码(仅必要部分):
我是一名优秀的程序员,十分优秀!