版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangyunsheng11/article/details/84977970
1、在pom.xml文件中新增如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、application.yml文件增加redis配置
3、新建RedisConfig的bean
@Component
public class RedisConfig {
}
4、在RedisConfig文件中注入StringRedisTemplate,如:
@Autowired
private StringRedisTemplate stringRedisTemplate;
完整的RedisConfig.java:
@Component
public class RedisConfig {
@Autowired
private StringRedisTemplate stringRedisTemplate;
/**
* Set value for key, only if key does not exist.
* @param key
* @param value
* @param seconds 过期时间
* @return
*/
public boolean setNX(final String key, final String value, final int seconds) {
boolean result = stringRedisTemplate.execute(new RedisCallback<Boolean>() {
@Override
public Boolean doInRedis(RedisConnection connection)
throws DataAccessException {
RedisSerializer<String> serializer = stringRedisTemplate
.getStringSerializer();
byte[] keyByte = serializer.serialize(key);
byte[] nameByte = serializer.serialize(value);
boolean flag = connection.setNX(keyByte, nameByte);
if (flag) {
connection.expire(keyByte, seconds);
}
return flag;
}
});
return result;
}
/**
* 获取value
* @param key
* @return
*/
public String get(final String key){
String result = (String)stringRedisTemplate.execute(new RedisCallback<String>() {
@Override
public String doInRedis(RedisConnection connection) throws DataAccessException {
RedisSerializer<String> serializer = stringRedisTemplate
.getStringSerializer();
byte[] keyByte = serializer.serialize(key);
byte[] valueByte = connection.get(keyByte);
if (valueByte == null) {
return null;
}
String value = serializer.deserialize(valueByte);
return value;
}
});
return result;
}
/**
* 获取过期时间
* @param key
* @return
*/
public Long getExpiry(final String key) {
return stringRedisTemplate.getExpire(key, TimeUnit.SECONDS);
}
public void ceshi(){
//key,value,过期时间,时间单位 s
stringRedisTemplate.opsForValue().set("key","value",20,TimeUnit.SECONDS);
//获取对应key的value
stringRedisTemplate.opsForValue().get("key");
}
}
5、使用如下
String redisKey = Constants.TUC_REGISTER_MOBILE + ":" + mobile;
boolean lock = redisConfig.setNX(redisKey, "1", 1800);
if (!lock) {
return;
}
表示设置键的过期时间为30分钟,多个请求同时请求,只有一个能获取锁成功,其他的获取失败之后返回。