首先pom文件引入
org.springframework.boot spring-boot-starter-data-redis
然后 application.yml文件加入以下配置
spring
redis:
host: localhost
port: 6379
password: 666666
timeout: 5000
database: 0
redis配置类
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypevalidator;
import com.tarzan.cms.common.constant.CoreConst;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.CacheKeyPrefix;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import java.time.Duration;
@EnableCaching
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration
.defaultCacheConfig()
.entryTtl(Duration.ofDays(30))
.computePrefixWith(CacheKeyPrefix.prefixed(CoreConst.TARZAN_REDIS_CMS_PREFIX))
.serializevaluesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer()));
return RedisCacheManager
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(factory))
.cacheDefaults(cacheConfiguration)
.transactionAware()
.build();
}
@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
// 用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// 使用StringRedisSerializer来序列化和反序列化redis的key值
redisTemplate.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
redisTemplate.setHashKeySerializer(stringRedisSerializer);
// hash的value序列化方式采用jackson
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
@Bean
public Jackson2JsonRedisSerializer
redis封装服务类代码
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@Service
@AllArgsConstructor
public class RedisService {
private final RedisTemplate redisTemplate;
public void set(String key, T value) {
redisTemplate.opsForValue().set(key, value);
}
public void set(String key, T value, long expire, TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key, value, expire, timeUnit);
}
@SuppressWarnings("unchecked")
public T get(String key) {
Object o = redisTemplate.opsForValue().get(key);
return Objects.isNull(o) ? null : (T) o;
}
public boolean expire(String key, long expire) {
return redisTemplate.expire(key, expire, TimeUnit.SECONDS);
}
public void del(String key) {
redisTemplate.opsForValue().getOperations().delete(key);
}
public void delBatch(Set keys) {
redisTemplate.delete(keys);
}
public void delBatch(String keyPrefix) {
Set keys = keySet(keyPrefix);
if (CollectionUtils.isNotEmpty(keys)) {
delBatch(keys);
}
}
public void setList(String key, List list) {
String value = JSON.toJSonString(list);
set(key, value);
}
public void setList(String key, List list, long expire, TimeUnit timeUnit) {
String value = JSON.toJSonString(list);
set(key, value, expire, timeUnit);
}
public List getList(String key, Class clz) {
String json = get(key);
if (json != null) {
return JSON.parseArray(json, clz);
}
return null;
}
public boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
public long getExpire(String key) {
return redisTemplate.getExpire(key);
}
public Set keySet(String keyPrefix) {
return redisTemplate.keys(keyPrefix + '*');
}
}



