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 {
@
Bean(name
= "redisTemplate")
public RedisTemplate
<String
, Object
> redisTemplate(RedisConnectionFactory redisConnectionFactory
) {
RedisTemplate
<String
,Object
> redisTemplate
= new RedisTemplate<>();
redisTemplate
.setConnectionFactory(redisConnectionFactory
);
redisTemplate
.setKeySerializer(keySerializer());
redisTemplate
.setHashKeySerializer(keySerializer());
redisTemplate
.setValueSerializer(valueSerializer());
redisTemplate
.setHashValueSerializer(valueSerializer());
return redisTemplate
;
}
@
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
);
}
```
本篇博客的介绍到这里就结束了。。。。。