Redis是一个开源的使用ANSI C语言开发的key-value数据库,它的速度非常快,支持近百种数据结构,可以执行复杂的内存数据库操作,比如典型的读写锁机制,可以用来设置操作超时时间。
创新互联建站是专业的南皮网站建设公司,南皮接单;提供做网站、网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行南皮网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
利用Redis实现锁机制非常简单,首先要定义一个自旋锁,用来设置当前操作是否可以在固定时间内完成,通过调用Redis指令来实现:
“`language
String lockKey = “lock”;
//Setting maximum wt time to 10 seconds
Long timeOut = 10L;
//Setting the time when the lock is set
Long lockTime = System.currentTimeMillis() + timeOut;
//Using Redis command to set an ex-time for the lockKey
jedis.set(lockKey, lockTime +””);
从上面的代码我们可以看到,我们将指定的lockKey值设置为当前操作的绝对超时时间,如果此时此刻没有其他线程对lockKey设置对应的值,那么这个操作就得以执行,并且只能在绝对的超时时间内执行。
下面可以定义一个自旋锁方法用来判断超时时间,假设我们设置的最长等待时间为10秒,超时时间为10秒,过了10秒之后线程可以获取这个锁:
```language
public boolean spinLock(String key, Long expireTime){
Long lockTime = System.currentTimeMillis() + expireTime;
if(jedis.setnx(key, lockTime+"")>0){
return true;
}
String redisLockTimeStr = jedis.get(key);
//Check if the lock has expired, then update the lock
if(Long.parseLong(redisLockTimeStr)
//When multiple threads come in at the same time, it will be judged first
//If someone else has set the value, then set the lock to an old value
String oldLockTimeStr = jedis.getSet(key, lockTime+"");
if(oldLockTimeStr != null && oldLockTimeStr.equals(redisLockTimeStr)){
//Judge if there is an unequal operation
return true;
}
}
return false;
}
从上面的代码可以看出,如果超时时间设置正确,则可以有效控制拥有锁的线程可以在合理的时间内完成操作,如果超时时间设置太短,则可能发生死锁现象,造成系统假死,影响系统的正常使用,因此需要选择合理的超时时间,才能使系统良好的运行。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
当前题目:利用Redis锁机制设置超时时间(redis锁设置超时时间)
本文来源:http://www.gawzjz.com/qtweb2/news33/17133.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联