SpringBoot+Redis存储序列化对象+Spring cache的使用

    技术2022-07-12  84

    SpringBoot+Redis存储序列化对象+Spring cache的使用

    导入依赖配置config文件缓存的使用Redis的单独使用

    导入依赖

    <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.9.0</version> </dependency>

    配置config文件

    @Configuration @EnableCaching public class RedisConfig extends CachingConfigurerSupport { /** * 自定义配置以JSON格式存储的RedisTemplate * @param redisConnectionFactory * @return */ @Bean(name = "redisTemplate") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>(); //参照StringRedisTemplate内部实现指定序列化器 redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(keySerializer()); redisTemplate.setHashKeySerializer(keySerializer()); redisTemplate.setValueSerializer(valueSerializer()); redisTemplate.setHashValueSerializer(valueSerializer()); return redisTemplate; } /** * 配置以redis为缓存的缓存管理中心 * @param redisConnectionFactory * @return */ @Bean(name = "redisCacheManager") public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(30)) .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(keySerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(valueSerializer())) .disableCachingNullValues(); RedisCacheManager redisCacheManager = RedisCacheManager.builder(redisConnectionFactory) .cacheDefaults(config) .transactionAware() .build(); return redisCacheManager; } private RedisSerializer<String> keySerializer() { return new StringRedisSerializer(); } private RedisSerializer<Object> valueSerializer() { return new GenericJackson2JsonRedisSerializer(); } }

    缓存的使用

    @Cacheable(cacheNames = {"User"} ,key = "#userId") @RequestMapping("/user/getter/{userId}") public User getUser(@PathVariable("userId") Long userId){ User user = new User(); user.setCompanyId(1L); user.setCreatedTime(new Date()); user.setCreatedBy(1L); user.setVersion("3.0.0"); user.setOrgId(1L); user.setUpdatedBy(1L); user.setUpdatedTime(new Date()); user.setUserId(1L); user.setUserName("Jim"); return user; }

    调用过此方法后你会发现,Redis已经将return 的User以序列化的方式存在了数据库中,并且建为UserId

    Redis的单独使用

    @Resource(name = "redisTemplate") private RedisTemplate redisTemplate; @ApiOperation("考试人员答案暂时保存到redis") @Override public CommonResponse doPreserveMyAnswerToRedis(@RequestBody @Valid CommonRequest<RedisExamVO> commonRequest){ RedisExamVO examVO = commonRequest.getBody(); try { redisTemplate.opsForValue().set(examVO.getKey(), examVO, 60 * 60 * 10, TimeUnit.SECONDS); }catch (Exception e){ throw new BusinessException(BusinessErrorCode.EXAM_CENTER_MOBILE_EXAM_PRESERVE_ANSWERS_TO_REDIS_ERROR); } return CommonResponse.success(true); } @ApiOperation("考试人员从redis读取答案") @Override public CommonResponse doGetMyAnswerFromRedis(@RequestBody @Valid CommonRequest<String> commonRequest){ String key = commonRequest.getBody(); RedisExamVO examVO; try { examVO = (RedisExamVO)redisTemplate.opsForValue().get(key); }catch (Exception e){ throw new BusinessException(BusinessErrorCode.EXAM_CENTER_MOBILE_EXAM_GET_ANSWERS_FROM_REDIS_ERROR ); } if (examVO == null){ throw new BusinessException(BusinessErrorCode.EXAM_CENTER_MOBILE_EXAM_GET_ANSWERS_FROM_REDIS_ERROR ); } return CommonResponse.success(examVO); } ``` 本篇博客的介绍到这里就结束了。。。。。
    Processed: 0.009, SQL: 9