redisjar引用
<!-- redis工具类 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!-- 去掉下面这个,是因为在高并发调用redis时,如果你用的jedis的方式连接,大量连接redis就会出现连接不上redis的错误 -->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
springboot配置文件,我这个是yml的配置文件,(下面是集群的redis,如果是单个的就加host和port,以及密码这些)
spring: redis: # redis密码,如果是集群,所有密码必须一致 password: jedis: pool: # 连接池最大连接数(使用负值表示没有限制) max-active: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) max-wait: -1 # 连接池中的最大空闲连接 max-idle: 8 # 连接池中的最小空闲连接 min-idle: 0 # 链接超时时间(毫秒) timeout: 30000 # redis集群配置 cluster: # redis集群所有的服务器 nodes: 10.5.9.140:7000,10.5.9.140:7001,10.5.9.140:7002 # 跨集群执行命令时要遵循的最大重定向数量 max-redirects: 3
redis初始化连接工具
//
private RedisTemplate redisTemplate;
// 初始化redis连接工具
@Autowired(required = false)
public void setRedisTemplate(RedisTemplate redisTemplate) {
RedisSerializer stringSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringSerializer);
redisTemplate.setValueSerializer(stringSerializer);
redisTemplate.setHashKeySerializer(stringSerializer);
redisTemplate.setHashValueSerializer(stringSerializer);
this.redisTemplate = redisTemplate;
}
锁的代码
/**
* 判断是否已经锁上 true 表示已经上锁 flase表示没有上锁
*/
public boolean isLock(String key) {
try {
Object object = redisTemplate.opsForValue().get(key);
if (object != null) {
return true;
} else {
return false;
}
} catch (Throwable e) {
log.error("[redis分布式锁] 获取锁异常, {}", key);
}
return false;
}
/**
* 加锁
* @param key
* @param value 随便存储一个值,也可以不用存储
* @return
*/
public boolean lock(String key, String value) {
//SETNX命令, 可以设置返回true, 不可以返回false
try {
if (StringUtils.isBlank(value)) {
value = "1";
}
// 这个方法表示,如果这个key值存在就不更新值
if (redisTemplate.opsForValue().setIfAbsent(key, value)) {
return true;
}
} catch (Throwable e) {
log.error("[redis分布式锁] 加锁异常, {}", key);
}
return false;
}
/**
* 解锁
*/
public boolean unLock(String key) {
try {
Object object = redisTemplate.opsForValue().get(key);
if (object != null) {
return redisTemplate.opsForValue().getOperations().delete(key);
}
} catch (Throwable e) {
log.error("[redis分布式锁] 解锁异常, {}", key);
}
return false;
}
个人心得记录,如果其他观点,欢迎一起指点,讨论学习
个人学习或者工作过程中的一些简要记录,欢迎各位大神一起指导,共同学习