zoukankan      html  css  js  c++  java
  • 一种简单的redis分布式锁方案

    前言

    用于分布式程序彼此之间不能同时执行的场景。例如计算程序等。

    代码

    锁工具类

    
    @Component
    public class RedisLockUtil {
    
    	@Autowired
    	private RedisTemplate redisTemplate;
    
    	private static final String CALC_LOCK_KEY = "CalculateLock";
    	private static final Long CALC_LOCK_TIME = 30L;
    
    
    	public boolean setIfAbsent (String key,String value,Long lockTime) {
    		return redisTemplate.opsForValue().setIfAbsent(key,value,lockTime,TimeUnit.MINUTES);
    	}
    
    	public String getValue(String key) {
    		return (String) redisTemplate.opsForValue().get(key);
    	}
    
    	public void delete (String key) {
    		redisTemplate.delete(key);
    	}
    
    	public boolean calcLock (String value) {
    		return redisTemplate.opsForValue().setIfAbsent(CALC_LOCK_KEY,value,CALC_LOCK_TIME,TimeUnit.MINUTES);
    	}
    
    	public String getCalcValue () {
    		return (String) redisTemplate.opsForValue().get(CALC_LOCK_KEY);
    	}
    
    	public String getTimeSeed(){
    		return String.valueOf(new Date().getTime());
    	}
    
    	public void unCalclock () {
    		redisTemplate.delete(CALC_LOCK_KEY);
    	}
    
    
    }
    
    

    实际调用的代码

    @PostMapping("/calc")
    public void calc() throws Exception{
    
    	String redisValue = "计算"+redisLockUtil.getTimeSeed();
    	boolean flag = redisLockUtil.calcLock(redisValue);
    	if(!flag){
    		return ;
    	}
    	try{
    		//业务代码
    	}catch (Exception e){
    		e.printStackTrace();
    		//业务代码
    		return ;
    	}finally {
    		//为了防止过期导致删除了其他人的锁
    		if(redisValue.equals(redisLockUtil.getCalcValue())){
    			redisLockUtil.unCalclock();
    		}
    	}
    	return;
    }
    
  • 相关阅读:
    友盟推送
    主流推送平台分析
    “完成”的定义和测试的职责
    HDU 1069 Monkey and Banana
    HDU 5587 Array
    ACM组队安排(hdu校赛)
    逆袭指数(hdu校赛)
    玩骰子(hdu校赛)
    Codeforce 546 A. Soldier and Bananas
    Codeforce 546 B. Soldier and Badges
  • 原文地址:https://www.cnblogs.com/jichi/p/13537094.html
Copyright © 2011-2022 走看看