ç®å½
1ãå¼å ¥ redis
1.1 å¼å ¥ç¸å ³ä¾èµ
1.2 é ç½® redis è¿æ¥
1.3 ç¼å redis çé 置类
2ãä½¿ç¨ redis ç¼å
2.1 èªå®ä¹ RedisCacheï¼redisçç¼åå®ç°ï¼
2.2 ä¿®æ¹ç¼åç±»å
3ãæµè¯
说æï¼æ¬ç« æ¯ç»§ SpringBootæ´åredisä¹ç¯å¢æ建ï¼Mybatis ç¼åï¼https://blog.csdn.net/u010559460/article/details/109388128 è¿ä¹åè¿è¡ç¼åçãå°åæ¥ä½¿ç¨ç mybatis ç¼åï¼æ¬å°ç¼åï¼æ¹é æ redis ç¼åï¼åå¸å¼ç¼åï¼
1ãå¼å ¥ redis
1.1 å¼å ¥ç¸å ³ä¾èµ
<!--å¼å
¥ä¾èµ spring data redisä¾èµ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- é¿éJSON解æå¨ -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
<!-- pool å¯¹è±¡æ± -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
1.2 é ç½® redis è¿æ¥
ç¼è¾ application.yml æä»¶ï¼ æ°å¢ redis çé 置信æ¯
spring:
# redis é
ç½®
redis:
# å°å
host: # å¡«åèªå·±ç ip
# 端å£ï¼é»è®¤ä¸º6379
port: 6379
# å¯ç
password: #å¡«åèªå·±çå¯ç
# è¿æ¥è¶
æ¶æ¶é´
timeout: 10s
lettuce:
pool:
# è¿æ¥æ± ä¸çæå°ç©ºé²è¿æ¥
min-idle: 0
# è¿æ¥æ± ä¸çæ大空é²è¿æ¥
max-idle: 8
# è¿æ¥æ± çæ大æ°æ®åºè¿æ¥æ°
max-active: 8
# #è¿æ¥æ± æ大é»å¡çå¾
æ¶é´ï¼ä½¿ç¨è´å¼è¡¨ç¤ºæ²¡æéå¶ï¼
max-wait: -1ms
1.3 ç¼å redis çé 置类
redis é 置类主è¦æ¯ å¾å®¹å¨ä¸æ³¨å ¥ redisTemplate çbean 对象
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean("redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
{
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
template.setValueSerializer(serializer);
// 使ç¨StringRedisSerializeræ¥åºåååååºååredisçkeyå¼
template.setKeySerializer(new StringRedisSerializer());
template.afterPropertiesSet();
return template;
}
}
æ¤å¤ç¨å°Â FastJson2JsonRedisSerializer èªå®ä¹ç redisåºåå·ç±»ï¼ 代ç å¦ä¸ï¼
/**
* Redis使ç¨FastJsonåºåå
*/
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T> {
@SuppressWarnings("unused")
private ObjectMapper objectMapper = new ObjectMapper();
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private Class<T> clazz;
static {
ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
}
public FastJson2JsonRedisSerializer(Class<T> clazz) {
super();
this.clazz = clazz;
}
public byte[] serialize(T t) throws SerializationException {
if (t == null) {
return new byte[0];
}
return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
}
public T deserialize(byte[] bytes) throws SerializationException {
if (bytes == null || bytes.length <= 0) {
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
return JSON.parseObject(str, clazz);
}
public void setObjectMapper(ObjectMapper objectMapper) {
Assert.notNull(objectMapper, "'objectMapper' must not be null");
this.objectMapper = objectMapper;
}
protected JavaType getJavaType(Class<?> clazz) {
return TypeFactory.defaultInstance().constructType(clazz);
}
}
2ãä½¿ç¨ redis ç¼å
2.1 èªå®ä¹ RedisCacheï¼redisçç¼åå®ç°ï¼
Mybatis é»è®¤ä½¿ç¨Â org.apache.ibatis.cache.impl.PerpetualCache å®ææ¬å°ç¼åï¼æ们å¯ä»¥åèè¿ä¸ªç±»æ¥ç¼å
/**
* 1. èªå®ä¹ RedisCache å®ç°åå¸å¼ç¼å
*/
public class RedisCache implements Cache {
// 2. å®ä¹String ç±»å id, idçå¼ å°±æ¯å½åæ¾å
¥ç¼åMapperçnamespacesçå¼
private final String id;
// 3. æé æ¹æ³ï¼åå§å idçå¼
public RedisCache(String id) {
this.id = id;
}
// 4. cache å¯ä¸æ è¯
@Override
public String getId() {
return id;
}
/**
* å¾ ç¼åä¸æ¾ç½®æ°æ®
* @param key
* @param value
*/
@Override
public void putObject(Object key, Object value) {
// ä½¿ç¨ redisHash ç±»åä½ä¸ºç¼åçåå¨æ¨¡å key hashKey value
getRedisTemplate().opsForHash().put(id.toString(), key.toString(), value);
}
/**
* ä» ç¼åä¸è·åæ°æ®
* @param key
* @return
*/
@Override
public Object getObject(Object key) {
return getRedisTemplate().opsForHash().get(id.toString(), key.toString());
}
@Override
public Object removeObject(Object key) {
return null;
}
/**
* æ¸
空ç¼å
*/
@Override
public void clear() {
getRedisTemplate().delete(id.toString());
}
/**
* è®¡ç® ç¼åçæ°é
* @return
*/
@Override
public int getSize() {
return getRedisTemplate().opsForHash().size(id.toString()).intValue();
}
/**
* éè¿ ApplicationContextå·¥å
·ç±»ï¼ è·å redisTemplate
*/
private RedisTemplate getRedisTemplate(){
return (RedisTemplate) ApplicationContextUtils.getBean("redisTemplate");
}
}
æ¤å¤ç¨å°Â ApplicationContextUtils èªå®ä¹çå·¥å ·ç±»ï¼ è¡¥å 说æï¼å¹³æ¶æ们å¨ç¼åControlleræServiceå±ä»£ç æ¶ï¼éè¦ä»Spring容å¨ä¸è·å对象ï¼é£åªéè¦ @Autowire æ @Resource 注解就å¯ä»¥ãä½
å¦æè¦å建çè¿ä¸ªå¯¹è±¡ä¸æ¯æ Spring 管ççï¼é£å°±ä¸è½ç´æ¥ä½¿ç¨Â @Autowire æ @Resourceï¼èæ¯è¦å®ç°Â ApplicationContextAwareï¼ç¶åå¾éé¢ä¼ é ApplicationContext 对象ï¼å®¹å¨å¯¹è±¡ï¼ï¼è°ç¨ApplicationContext 对象ç getBean æ¹æ³è·åbeanã èèå°å«çå°æ¹ä¹å¯è½ä¼æè·åbeançæä½ï¼å æ¤å°è£  ApplicationContextUtils ç±»æ¥è·åbean 对象
ApplicationContext ç±»ï¼
@Component
public class ApplicationContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
// å°å建好çå·¥å 以åæ°çå½¢å¼ä¼ éç»è¿ä¸ªç±»
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* æä¾ è·åbean 对象çæ¹æ³
* @param beanName
* @return
*/
public static Object getBean(String beanName) {
return applicationContext.getBean(beanName);
}
}
2.2 ä¿®æ¹ç¼åç±»å
å¨ UserDaoMapper.xml æ件ä¸ï¼æ·»å
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lcy.dao.UserDao">
<!--å¼å¯äºçº§ç¼å-->
<cache type="com.lcy.cache.RedisCache"/>
ããããã
è¿æ ·çè¯ï¼å½æ们è¿è¡æ¥è¯¢æä½çæ¶åï¼Mybatiså°±ä¼ä½¿ç¨æ们èªå®ä¹ RedisCache èä¸æ¯ä½¿ç¨å®èªå¸¦ç PerpetualCache ç¼å
3ãæµè¯
æµè¯æ¹æ³è¿éå°±ä¸éå¤äºï¼é½æ¯https://blog.csdn.net/u010559460/article/details/109388128 è¿ä¸ç« éè¾¹çã
Â
Â
Â
Â
Â
Â
Â
Â
Â