springboot与redis缓存
-
在docker中启动redis
run -d -p 6379:6379 --name myredis redis
-d: 后台运行
-p 端口映射
– name : 设置容器名字
redis : 启动镜像名;
-
springboot项目中添加redis支持
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
-
配置redis
spring.redis.host=192.168.85.132 # 直接添加主机地址即可
-
使用redis 缓存
当添加完redis缓存支持后,spring容器中会添加redis缓存管理器,RedisCacheManager;
RediasCacheManager缓存管理器会创建RedisCache;来做缓存组件。
此时,RedisCache默认序列化使用jdk序列化机制。
那么如何将序列化改为我们自己想要的序列化效果:
@Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer<String> redisSerializer = new StringRedisSerializer(); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 配置序列化 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; }
自定义缓存管理组件,因为springboot会优先加载我们自己写的配置类,所以只需要将RedisCacheConfiguration类中的serializeValuesWith改为我们想要的格式,即可改变序列化效果。
并在使用缓存在加上:
@Cacheable(value = "book",key="#id",cacheManager = "cacheManager")
用于标注使用我们自己编写的缓存管理组件;
使用编码方式使用缓存;
-
将我们自己编写的缓存管理器在容器中 注入
@Qualifier("cacheManager") @Autowired CacheManager cacheManager;
-
使用编码进行数据缓存
public Book getBook(Integer id) { System.out.println("从数据库中查询"); Book bookById = bookMapper.getBookById(id); Cache cache = cacheManager.getCache("book"); cache.put("eeee",bookById); return bookById; }
-