分布式学习笔记SpringBoot整合redis实现mybatis二级缓存

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Redis实现mybatis的二级缓存
0:引入jar
1 <dependency>
2
<groupId>org.springframework.boot</groupId>
3
<artifactId>spring-boot-starter-data-redis</artifactId>
4 </dependency>
13
redisTemplate=ApplicatonContextHolder.getBean("redisTemplate");
14
}
15
return redisTemplate;
16
}
17
18
//命名空间的标识
19
private String id;
20
21
/**
22
* 构造方法:初始化iD
23
13
ObjectMapper mapper=new ObjectMapper();
14
mapper.setVisibility(PropertyAccessor.FIELD,
JsonAutoDetect.Visibility.NON_PRIVATE);
15
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
3
private static ApplicationContext ctx;
4
/**
5
* 注入上下文对象
6
* @param applicationContext
7
* @throws BeansException
8
*/
9
@Override
10
public void setApplicationContext(ApplicationContext
43
ops.set(key.toString(), value);
44
}
45
46
}
47
48
/**
49
* 根据key获取redis 值
50
* @param key
51
* @return
52
*/
53
@Override
54
public Object getObject(Object key) {
55
if(key!=null){
return ctx.getBean(tClass); }
/** * 根据名字获取bean * @param beanName * @param <T> * @return */
public static <T> T getBean(String beanName){ return (T) ctx.getBean(beanName);
applicationContext) throws BeansException {
11
//实例方法可以直接操作静态属性
12
ctx=applicationContext;
13
}
14
15
/**
16
* 泛型方法:方法的返回类型或者是参数的数据类型,都可以在定义时用占位符来代替,实际调
用时指定具体的数据类型
17
* public <类型占位符:T> T
18
* @param tClass
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 }
* @return */ public static <T> T getBean(Class<T> tClass){
16
jackson2JsonRedisSerializer.setObjectMapper(mapper);
17
18
//value:值得序列化方式
19
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
20
21
return redisTemplate;
connectionFactory){
5
//创建实例
6
RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();
7
//配置连接对象
8
redisTemplate.setConnectionFactory(connectionFactory);
7
8
//Spring中封装的用来操作redis的一个工具类,连接,支持redis中的个中命令
9
private RedisTemplate redisTemplate;
10
11
public RedisTemplate getRedisTemplate() {
12
if(redisTemplate==null){
9
//key:使用字符串序列化
10
redisTemplate.setKeySerializer(new StringRedisSerializer());
11
12
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer=new
Jackson2JsonRedisSerializer<Object>(Object.class);
return readWriteLock; }
准备工具类ApplicationContextHolder:获取到指定的bean
1 //ApplicationContextAware:获取到上下文对象
2 public class ApplicatonContextHolder implements ApplicationContextAware {
}
6、确定要开启二级缓存的命名空间
7、测试 测试查询, 测试:修改、删除、增加
22
23
}
24 }
5、创建myabtis 中的Cache接口的实现类
1 //将数据存入到Redis中,删除、获取
2 public class RedisCache implements Cache {
3
4
5
//创建一个重入锁 的对象:防止线程并发带来的资源争抢
6
private ReadWriteLock readWriteLock=new ReentrantReadWriteLock();
76
* 清空该命名空间下所有的key
77
*/
78
@Override
79
public void clear() {
80
Set keys = getRedisTemplate().keys("*" + id + "*");
81
getRedisTemplate().delete(keys);
82
}
83
84 85 86 87 88 89 90 91 92 93 94 95 96 97 }
/** * 获取该命名空间下的key的数量 * @return */
@Override public int getSize() {
return getRedisTemplate().keys("*" + id + "*").size(); }
@Override public ReadWriteLock getReadWriteLock() {
66
*/
67
@Override
68
public Object removeObject(Object key) {
69
if(key!=null){
70
return getRedisTemplate().delete(key.toString());
71
}
72
return null;
73
}
74
75
/**
* @param id
24
*/
25
public RedisCache(String id) {
26
this.id = id;
27
}
28
29
@Override
30
public String getId() {
31
return this.id;
32
}
33
34
/**
35
* 将数据存入缓存:redis
36
56
ValueOperations ops = getRedisTemplate().opsForValue();
57
return ops.get(key.toString());
58
}
59
return null;
60
}
61
62
/**
63
* 删除指定的key
64
* @param key
65
* @return
1、开启二级缓存
2、linux服务器上启动redis服务 3、配置连接信息
4、默认可以直接使用RedisTemplate,注入就可以使用,需要配置下序列化方式,转换成json序列化
1 @Configuration
2 public class RedisConfig {
3
@Bean
4
public RedisTemplate redisTemplate(RedisConnectionFactory
* @param key
Байду номын сангаас

37
* @param value

38
*/
39
@Override
40
public void putObject(Object key, Object value) {
41
if(key!=null){
42
ValueOperations ops = getRedisTemplate().opsForValue();
相关文档
最新文档