SpringBoot2.0 使用redis做缓存处理(存储和获取)
一、导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
二、yml写入redis配置信息
三、编写redis配置类解决序列化问题和缓存时间问题
package com.setch.crodigy.datacenter.common.config.redis;
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.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import java.time.Duration;
/**
* 解决redis序列化问题
*/
@Configuration
public class RedisTemplateConfig {
/**
* 解决序列化问题
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<Object,Object> emRedisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<Object,Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
template.setDefaultSerializer(serializer);
return template;
}
@Bean
public RedisCacheManager employeeRedisCacheManager(RedisConnectionFactory redisConnectionFactory) {
RedisCacheConfiguration cacheConfiguration =
RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofDays(1)) // 设置缓存过期时间为一天
.disableCachingNullValues() // 禁用缓存空值,不缓存null校验
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new
GenericJackson2JsonRedisSerializer())); // 设置CacheManager的值序列化方式为json序列化,可加入@Class属性
return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(cacheConfiguration).build(); // 设置默认的cache组件
}
}
四、注入RedisTemplate
//注意这里的emRedisTemplate是上面配置类中为了解决序列化问题,否则存入的是一堆字母和字符
@Autowired
private RedisTemplate emRedisTemplate;
五、使用——向redis中保存数据
这里需要注意的一点是,前面我们配置了解决序列化的config类,这里需使用emRedisTemplate进行redis操作,若使用redisTemplate则会出现一堆字母和字符。
/**
* 主机下所有设备列表存储到redis
* @param jsonPayload
*/
private void saveDevicesToRedis(JSON jsonPayload) {
JSON jsonInfo = JSONUtil.parse(jsonPayload.getByPath("info"));
JSON objectList = JSONUtil.parse(jsonInfo.getByPath("object_list"));
JSONArray deviceArray = JSONUtil.parseArray(objectList);
emRedisTemplate.opsForValue().set("deviceList",deviceArray);
}
这里直接使用emRedisTemplate.opsForValue().set(“deviceList”,deviceArray);即可存储到redis中并自动创建表deviceList
六、通过Redis可视化可查看到我们存入的数据
七、获取上面我们存储到里面的数据
这里需要注意的是 这里仍使用emRedisTemplate进行操作
public void queryDeviceFromRedis(){
if(emRedisTemplate.hasKey("deviceList")){
emRedisTemplate.opsForValue().get("deviceList");
}
}
至此 springBoot使用redis做存储和获取的操作完成。