概述
1.问题简介:当三台机器使用Spring定时器,会同时给消费者发送支付成功的通知。而且会发三次,对商户的影响很大。例如:客户在使用商户的平台去购买票的时候,支付成功发了三次通知,那么就会出票三次。
2.问题解决:使用redis分布式锁,并设置超时时间。当消费者发送通知失败的时候去删除锁,然后重新推送.
3.技术:使用Redis的Spring-data-redis依赖, TimeUnit的介绍.
一:Redis简介
Redis是一款开源的Key-Value数据库,运行在内存中,由C语言编写。企业开发通常采用Redid来实现缓存。同类的产品还有memcache、memcached等。
二:Jedis
Jedis是Redis官方推出的一款面向Javad的客户端,提供了很多接口供Java语言调用。可以在Redis官网下载,当然还有一些开源爱好者提供的客户端,如Jredis、SRP等等,推荐使用Jedis。
三:Spring-data-redis
Spring-data-redis是Spring大家族的一部分,提供了在spring应用中通过简单的配置访问redis服务,对redis底层开发包(Jedis,JRedis,an RJC)进行了高度封装,RedisTemplate提供了redis各种操作、异常处理及序列化,支持发布订阅。
四:TimeUnit的介绍
TimeUnit是JDK封装好的java.uitl.concurrent包下面的一个类,表示给定单元粒度的时间段
五:TimeUnit的作用
1.时间颗粒度转换
2.线程延时六:TimeUnit讲解
TimeUnit.DAYS //天
TimeUnit.HOURS //小时
TimeUnit.MINUTES //分钟
TimeUnit.SECONDS //秒
TimeUnit.MILLISECONDS //毫秒
TimeUnit.MICROSSECONDS //微妙
TimeUnit.NANOSSECONDS //纳秒七:TimeUnit中有最全面的转换颗粒度方法,基本所有的都能转换,具体要用的话可以查看他的源码,下面这个方法是把10分钟转换为多少毫米
TimeUnit.MILLISECONDS.convert(10L,TimeUnit.MINUTES);
2.问题解决:
(1):Spring-data-redis针对Jedis提供了如下功能:
(2):RedisTemplate中API使用
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.4.RELEASE</version>
</dependency>
(3):RedisTemplate的直接方法
@Autowired
private StringRedisTemplate redisTemplate;
#注释:setIfAbsent 分布式锁 true加锁成 false 失败
Boolean temp = redisTemplate.opsForValue().setIfAbsent(Key, plain);
#注释Key:唯一标识
#注释Plian:存入redis的内容
if (!temp) {
log.info("加锁失败");
return false;
}
#注释Expire 过期时间
Boolean expire = redisTemplate.expire(Key, 5, TimeUnit.MINUTES);
#注释删除单个key
redisTemplate.delete(Key);
#注释根据Key获取过期时间
redisTemplate.getExpire(Key);
#注释判断key是否存在
redisTemplate.hasKey(Key);
注:建议使用spring-data-redis 2.1.0版本 举例说明,只需要一行代码,加锁已经设置失效时间(需要和Jedis版本匹配,要不会报错)
Boolean temp = redisTemplate.opsForValue().setIfAbsent(Key, plain,5, TimeUnit.MINUTES);
最后
以上就是端庄墨镜为你收集整理的Redis.setIfAbsent分布式锁的全部内容,希望文章能够帮你解决Redis.setIfAbsent分布式锁所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复