springboo2_cache_redis

启动类增加开启缓存注解

或者在注入CacheManager类上加也可以
@EnableCaching

注入一个CacheManager

注入一个CacheManager 并且设置redis使用jackson序列化value,若使用jdk序列化
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
其实怎么样序列化也可以自定义 只要实现 implements RedisSerializer<T> 就可以了
这里展示jackson现成序列化例子

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;

import java.time.Duration;
@Configuration
public class CacheManagerConfig {
	@Bean
	public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
		RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
		//jackson进行序列化
		Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
		ObjectMapper om = new ObjectMapper();
		om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
		om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
		jackson2JsonRedisSerializer.setObjectMapper(om);
		RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer);
		RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig().serializeValuesWith(pair);
		//设置默认超过期时间是30秒
		defaultCacheConfig.entryTtl(Duration.ofSeconds(30));
		//初始化RedisCacheManager
		RedisCacheManager cacheManager = new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
		return cacheManager;
	 }
}

在UserMapper.xml中标注缓存注解的使用

定义缓存的名称  及缓存的使用
@CacheConfig(cacheNames = "users")
查询
@Cacheable(key ="#p0")
User findById(@Param("id") String id);
更新
@CachePut既保证更新数据库方法被调用,同时又保证结果被缓存
@CachePut(key = "#p0")  
void updataById(@Param("id")String id,@Param("name")String name);
删除
//如果指定为 true,则方法调用后将立即清空所有缓存
@CacheEvict(key ="#p0",allEntries=true)
void deleteById(@Param("id")String id);

springCache_redis缓存后在redis对应的物理结构

SaUserMapper::124978ec8b3911e88f37005056aa2273

猜你喜欢

转载自blog.csdn.net/maqingbin8888/article/details/83620406
今日推荐