话不多说直接开始:
首先,引入 maven依赖:
<!-- redis依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
yml 文件:
这里有 MysqL 和 redis 的,需要写上host,端口,密码和默认数据库
spring:
redis:
host: 8.140.xx.xxx
port: 6379
database: 0
password: xxxx
datasource:
driver-class-name: com.MysqL.cj.jdbc.Driver
url: jdbc:MysqL://8.xxxxx55/qingxxxxxxxxmuity?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username: roxxxxx
password: Txxxxxx
开始编写redis的配置类:
@Component
@EnableCaching
@EnableAutoConfiguration
@Configuration
public class RedisConfig extends CachingConfigurerSupport {
private static final long DEFAULT_TTL = 999999L;
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Value("${spring.redis.database}")
private int database;
@Value("${spring.redis.password}")
private String password;
/**
* 连接redis的工厂类
* @return
*/
@Bean
public JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName(host);
factory.setPort(port);
factory.setPassword(password);
factory.setDatabase(database);
return factory;
}
/**
* 配置Redistemplate
* 设置添加序列化器
* key 使用string序列化器
* value 使用Json序列化器
* 还有一种简答的设置方式,改变defaultSerializer对象的实现。
* @return
*/
@Bean
public Redistemplate<String, Object> redistemplate() {
Redistemplate<String, Object> template = new Redistemplate<>();
RedisSerializer stringSerializer = new StringRedisSerializer();//序列化为String
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);//序列化为Json
template.setKeySerializer(stringSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(stringSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setobjectMapper(objectMapper);
//set value serializer
template.setDefaultSerializer(jackson2JsonRedisSerializer);
template.setConnectionFactory(jedisConnectionFactory());
template.afterPropertiesSet();
return template;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
//初始化一个RedisCacheWriter
RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory);
//自定义key前缀
CacheKeyPrefix cacheKeyPrefix = new CacheKeyPrefix() {
@Override
public String compute(String cacheName) {
return cacheName+":";
}
};
//设置CacheManager的值序列化方式为json序列化
RedisSerializer<Object> jsonSerializer = new GenericJackson2JsonRedisSerializer();
RedisSerializationContext.SerializationPair<Object> pair = RedisSerializationContext.SerializationPair
.fromSerializer(jsonSerializer);
//生成RedisCacheConfiguration配置
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig()
.computePrefixWith(cacheKeyPrefix)
.serializeValuesWith(pair);
//设置默认超过期时间是30秒
defaultCacheConfig.entryTtl(Duration.ofSeconds(DEFAULT_TTL));
//初始化RedisCacheManager
return new RedisCacheManager(redisCacheWriter, defaultCacheConfig);
}
}
package com.community.util;
/**
* @Classname RedisUtil
* @Description redis工具类
* @Date 2021/10/10 16:15
* @Created by thx
*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.Redistemplate;
import org.springframework.data.redis.core.StringRedistemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.Collection;
import java.util.concurrent.TimeUnit;
/**
* @ClassName RedisUtil
* @Description Todo
* @Author 华达州
* @Date 2021/8/6 13:54
* @Version 1.0
**/
@Component
public class RedisUtil {
@Autowired
private Redistemplate redistemplate;
public Object get(String key) {
return key == null ? null : redistemplate.opsForValue().get(key);
}
/**
* 本来只可以放入string类型,但是配置了自动序列化所以这儿可以传入object
*/
public boolean set(String key, Object value) {
try {
redistemplate.opsForValue().set(key, value);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 原子操作
*
* @param key
* @param value
* @param expire 过期时间 秒
* @return
*/
public boolean setExpire(String key, Object value, long expire) {
try {
//TimeUnit.SECONDS指定类型为秒
redistemplate.opsForValue().set(key, value, expire, TimeUnit.SECONDS);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 非原子操作
*
* @param key
* @param expire
* @return
*/
public boolean expire(String key, long expire) {
try {
redistemplate.expire(key, expire, TimeUnit.SECONDS);
return true;
} catch (Exception e) {
return false;
}
}
/**
* @param key
* @return 获取key的过期时间
*/
public long ttl(String key) {
return redistemplate.getExpire(key);
}
/**
* @param keys 删除key 可变参数
*/
public void del(String... keys) {
if (keys != null && keys.length > 0) {
redistemplate.delete((Collection<String>) CollectionUtils.arrayToList(keys));
}
}
/**
* @param key
* @param step 传入正数 就是加多少 传入负数就是减多少
* @return
*/
public long incrBy(String key, long step) {
return redistemplate.opsForValue().increment(key, step);
}
/**
* @param key
* @param value
* @return 如果该key存在就返回false 设置不成功 key不存在就返回ture设置成功
* 如果不存在的话再 set,如果存在,不改变值:
*/
public boolean setNx(String key, Object value) {
return redistemplate.opsForValue().setIfAbsent(key, value);
}
/**
* 原子操作
*
* @param key
* @param value
* @param expire 在上面方法加上过期时间设置
* @return
*/
public boolean setNxAndExpire(String key, Object value, long expire) {
return redistemplate.opsForValue().setIfAbsent(key, value, expire, TimeUnit.SECONDS);
}
/**
* @param key
* @return 判断key是否存在
*/
public boolean hasKey(String key) {
return redistemplate.hasKey(key);
}
}
配置完成,开始测试!
在 controller 层里写一个 demo 进行测试
@Resource
private RedisUtil redisUtil;
@RequestMapping("demo")
public ResultJson test() {
redisUtil.set("thx", "123");
System.out.println(redisUtil.get("thx"));
return null;
}
去 redis 查看数据,如果发现有 thx 的键值,说明测试成功,完成闭环
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。