使用Redis实现客户信息加锁,等待功能

RedisTools.java

package com.sys.util;

import java.util.List;
import java.util.Map;
import java.util.Set;

import redis.clients.jedis.Jedis;

/**
 * Redis工具类
 * @author liuJack
 *
 */
public class RedisTools {

	private static Jedis jedis = null;
	
	private static final String IP = "127.0.0.1";
	
	private static final Integer PROT = 6666;
	
	static{
		jedis = new Jedis(IP,PROT);
	}
	
	/**
	 * 获取值
	 * @param key
	 * @return
	 */
	public static final String get(String key) {
	     return jedis.get(key);
	}
	
	/**
	 * 设置list信息,(多个)
	 * @param listName list名称
	 * @param list 值的集合
	 */
	public static final void setList(String listName,List<String> list) {
		if(list!=null){
			for (String value : list) {
				jedis.lpush(listName, value);
			}
		}
	}
	
	/**
	 * 设置list信息,(单个)
	 * @param listName list名称
	 * @param value 值
	 */
	public static final void setList(String listName,String value) {
		jedis.lpush(listName, value);
	}
	
	/**
	 * 获得指定集合
	 * @param listName 集合名词
	 * @param start 开始值
	 * @param end 结束值
	 * @return 结果集合
	 */
	public static final List<String> getList(String listName,Long start,Long end) {
		return jedis.lrange(listName, start, end);
	}
	
	/**
	 * 清空所有数据
	 */
	public static final void clearAll(){
		jedis.flushDB();
	}
	
	/**
	 * 判断某key值是否存在
	 * @param key 需要检查的key
	 * @return
	 */
	public static final Boolean exists(String key){
		return jedis.exists(key);
	}
	
	/**
	 * 添加数据--如果存此key值,则覆盖
	 * @param key 键
	 * @param value 值
	 */
	public static final void set(String key,Object value){
		jedis.set(key, value.toString());
	}
	
	/**
	 * 获得所有的key
	 * @return
	 */
	public static final Set<String> getAllKeys(){
		return jedis.keys("*"); 
	}
	
	/**
	 * 删除指定键,如果不存在则忽略
	 * @param key 需要删除的键
	 */
	public static final void delByKeys(String... keys){
		if(keys==null) return;
		for (String key : keys) {
			jedis.del(key);
		}
	}
	
	/**
	 * 获得Jedis对象
	 * @return Jedis对象
	 */
	public static final Jedis getJedis(){
		return jedis;
	}
	
	public static final void setMap(Map<String, Object> map){
		if(map==null) return;
		for (String key : map.keySet()) {
			if(map.get(key)!=null){
				jedis.set(key, map.get(key).toString());
			}
		}
	}
	
}

LockUtils.java

package com.sys.util;

/**
 * 加锁工具类
 * @author liuJack
 *
 */
public class LockUtils {


	/**间隔获得时间*/
	public static final Integer sleep_millis = 1000;

	/**最大等待时间*/
	public static final long max_await = 1000*50;

	private static final String lock_no_title = "lock_user_";

	/**
	 * 锁住用户信息
	 * @param userId
	 */
	public static final void lockUser(String userId){
		RedisTools.set(lock_no_title+userId, "");
	}

	/**
	 * 取消锁
	 * @param userId
	 */
	public static final void unLock(String userId){
		RedisTools.delByKeys(lock_no_title+userId);
	}

	/**
	 * 检查用户是否锁住
	 * @param userId 
	 * @return true:执行成功,false:等待超时,不能向下执行
	 */
	@SuppressWarnings("static-access")
	public static final boolean checkUserLock(String userId){
		boolean result = true;
		try {
			Thread thread = Thread.currentThread();
			long millis = System.currentTimeMillis();
			while (true) {
				if(RedisTools.exists(lock_no_title+userId)){
					if((System.currentTimeMillis()-millis)<max_await)
						thread.sleep(sleep_millis);
					else {
						result = false;
						break;
					}
				}else {
					result = true;
					break;
				}

			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return result;


	}

}

转载于:https://my.oschina.net/LJack/blog/802151

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值