spring boot redis缓存,springboot redis cache
yping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setConnectionFactory(factory); //key序列化方式 template.setKeySerializer(redisSerializer); //value序列化 template.setValueSerializer(jackson2JsonRedisSerializer); //value hashmap序列化 template.setHashValueSerializer(jackson2JsonRedisSerializer); return template; } @Bean public CacheManager cacheManager(RedisConnectionFactory factory) { RedisSerializer<String> redisSerializer = new StringRedisSerializer(); 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); // 配置序列化(解决乱码的问题),过期时间600秒 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofSeconds(600)) //设置数据过期时间600秒 .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer)) .disableCachingNullValues(); RedisCacheManager cacheManager = RedisCacheManager.builder(factory) .cacheDefaults(config) .build(); return cacheManager; }}定义一个controller,写一个测试方法,进行访问
@RestController@RequestMapping("redisTest")public class RedisTestController { @Autowired private RedisTemplate redisTemplate; @GetMapping("/test01") public void test01(){ redisTemplate.opsForValue().set("test","redis存值测试"); String test = (String) redisTemplate.opsForValue().get("test"); System.out.println(test); }}
在reids中也可以查询key与vaule(中文没有显示是shell的编码问题)。
SpringBoot中进行redis的操作基本都是借助于ops*,各位可以根据自己需求进行其他的选用。
三、使用redis作缓存
简单的用redis做一个缓存,这里使用@Cacheable在方法上作缓存。
写一个用于访问的test02方法,并在该方法上作缓存。
controller
@RestController@RequestMapping("redisTest")public class RedisTestController { @Autowired private RedisTemplate redisTemplate; @Autowired private UserService userService; @GetMapping("/test01") public void test01(){ redisTemplate.opsForValue().set("test","redis存值测试"); String test = (String) redisTemplate.opsForValue().get("test"); System.out.println(test); } @GetMapping("/test02") public List<User> test02(){ List<User> userList = userService.test02(); System.out.println(userList); return null; }}
service
@Servicepublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Cacheable(value = "user",key = "cache") @Override public List<User> test02() { List<User> userList = baseMapper.selectList(null); return userList; }}
首先查看redis中缓存内容
然后调用方法
可以看到,这一次查询,由于redis中没有缓存,所以对数据库进行了访问,再次查看redis中key
可以看到redis中多出了user::cache这个键,这个就是我们做的缓存了(编码格式问题导致这么显示)
这个时候我们再次访问方法
可以看到,第二次调用方法,并没有连接数据库,没有操作数据库的语句,这表示我们成功的从缓存中取出了数据。
tpis.
如果你在连接redis的时候出现了MISCONF Redis is configured to save RDB snapshots……这样的错误提示,这表示redis的持久化失效了,可以再redis-cli中直接输入config set stop-writes-on-bgsave-error no,但是这种方法不能永远解决这个问题,如果需要永解决这个问题,可以搜索redis持久化失效的解决方法。
以上就是详解SpringBoot如何使用Redis和Redis缓存的详细内容,更多关于SpringBoot使用Redis 缓存的资料请关注盛行IT其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。