Redis加锁

customerM = BaseMemCached.setMLock(customerId);

  

/**
* 个人账户表加锁
**/
public static CustomerM setMLock(Integer userId){
  CustomerM customerM = (CustomerM)setLock(USER_M_USERID+userId, CustomerM.class);
  customerM.setAddPiggy(0);
  customerM.setAddPayoff(0);
  customerM.setAddAmountBase(0);
  customerM.setAddAmountCft(0);
  return customerM;
}

  

public static  Object setLock(String key,Class classes){
logger.info("加锁"+key+_LOCK);
long result = JedisPoolClient.getInstance().setnx(key+_LOCK,System.currentTimeMillis());
    try {
long time = System.currentTimeMillis();
  while (result != 1) {
  Thread.sleep(10);
 time = System.currentTimeMillis();
 result = JedisPoolClient.getInstance().setnx(key+_LOCK,time);
}
logger.info("加锁\t"+key+_LOCK+"\t完成");
JedisPoolClient.getInstance().set(key+_LOCK,time,TIME_OUT);
return JedisPoolClient.getInstance().get(key,classes);
}catch (Exception e){
e.printStackTrace();
}
return null;
}

  

public long setnx(String key,Object obj){
Jedis jedis = jedisPool.getResource();
try {
long l = jedis.setnx(key,StringUtil.bean2json(obj));
return l;
}catch(JedisConnectionException e){
jedisPool.returnBrokenResource(jedis);
jedis=null;
logger.error("redis异常:"+e.getMessage());
e.printStackTrace();
}finally{
jedisPool.returnResource(jedis);
}
return -1;
}

  

public boolean  set(String key,Object obj,int seconds){
Jedis jedis = jedisPool.getResource();
try {
jedis.setex(key,seconds,StringUtil.bean2json(obj));
return true;
}catch(JedisConnectionException e){
jedisPool.returnBrokenResource(jedis);
jedis=null;
logger.error("redis异常:" + e.getMessage());
e.printStackTrace();
}catch(Exception e){
logger.error("Json封装失败:" + e.getStackTrace());
}finally{
jedisPool.returnResource(jedis);
}
return false;
}

Redis解锁

BaseMemCached.updateAndUnlock(customerM);

  

/**
* 个人账户修改并解锁
* */
public static void updateAndUnlock(CustomerM customerM){
logger.info("解锁"+USER_M_USERID+customerM.getCustomerId() + _LOCK);
setMem(USER_M_USERID+customerM.getCustomerId(),customerM);
delete(USER_M_USERID+customerM.getCustomerId()+_LOCK);
}

  

protected static boolean setMem(String key,Object obj){
return JedisPoolClient.getInstance().set(key,obj);
}

  

protected static  void delete(String key){
JedisPoolClient.getInstance().delete(key);
}

  

public boolean set(String key,Object obj){
Jedis jedis = jedisPool.getResource();
try {
logger.info(key+":"+StringUtil.bean2json(obj));
jedis.set(key, StringUtil.bean2json(obj));
return true;
}catch(JedisConnectionException e){
jedisPool.returnBrokenResource(jedis);
jedis=null;
logger.error("redis异常:" + e.getMessage());
e.printStackTrace();
}finally{
jedisPool.returnResource(jedis);
}
return false;
}

  

public void delete(String key){
Jedis jedis = jedisPool.getResource();
try {
jedis.del(key);
}catch(JedisConnectionException e){
jedisPool.returnBrokenResource(jedis);
jedis=null;
logger.error("redis异常:"+e.getMessage());
e.printStackTrace();
}finally{
jedisPool.returnResource(jedis);
}
}

  

Redis加锁与解锁的更多相关文章

  1. PHP中redis加锁和解锁的简单实现

    背景说明 在程序开发过程中,通常会遇到需要独占式的访问一些资源的情形,比如商品秒杀时扣减库存.这时就需要对资源加锁.实现锁的方式有很多,比如数据库锁.文件锁等等.本文简单介绍PHP中使用redis来实 ...

  2. redis 加锁与解锁的详细总结,解决线程并发导致脏数据

    1.前言 对每个controller来说都是全新且单独的,原因是多线程,如果多个请求操作共有的数据,这样的并发操作会导致脏数据 怎么解决? mysql可以使用积极锁解决, 这里讲解的是redis的解决 ...

  3. sql语句对数据库表进行加锁和解锁

    锁是数据库中的一个非常重要的概念,它主要用于多用户环境下保证数据库完整性和一致性. 我们知道,多个用户能够同时操纵同一个数据库中的数据,会发生数据不一致现象.即如果没有锁定且多个用户同时访问一个数据库 ...

  4. Redis系列-远程连接redis并给redis加锁

    假设两台redis服务器,ip分别为:192.168.1.101和192.168.1.103,如何在101上通过redis-cli访问103上的redis呢?在远程连接103之前,先讲下redis-c ...

  5. svn使用相关问题:eclipse插件,加锁,解锁,偷锁,更新不了,记住密码

    svn使用相关问题:eclipse插件,加锁,解锁,偷锁,更新不了,记住密码 获取锁的时候可以看下 是谁锁住了,让对方提交解锁,如果是给离职人员锁住需要使用偷锁的方式先解锁再提交偷锁处理办法:选中该文 ...

  6. redis加锁

    1. redis加锁分类 redis能用的的加锁命令分表是INCR.SETNX.SET2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 ...

  7. redis加锁的几种实现

    redis加锁的几种实现 2017/09/21 1. redis加锁分类 redis能用的的加锁命令分表是INCR.SETNX.SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在, ...

  8. REDIS中加锁和解锁问题

    使用lua+redis的方法.之所以使用lua是为了保证原子性 问题: 1. redis发现锁失败了要怎么办?中断请求还是循环请求?2. 循环请求的话,如果有一个获取了锁,其它的在去获取锁的时候,是不 ...

  9. ABAP 加锁与解锁

    维护一个旧程序,直接用UPDATE更新数据库透明表,现要求加上正在操作提示,以免数据出错. 1.先找到PA30多人修改时对应的锁对象. 2.在UPDATE前加锁,调用函数. CALL FUNCTION ...

随机推荐

  1. webpack2.x基础属性讲解

    webpack作为构建工具平时作为前端作为优化.模块编程.和分片打包的重要组成部分,大家可能并不陌生,如果没有时刻的去关注文档,那么大家可能不太清楚webpack已经默默然的升级到2.x了,对比1.x ...

  2. Android开发必须知道SERVICE的10件事

    这些年我在和其他安卓攻城狮交流时经常谈到的一个话题就是Service组件被开发者错误地理解,不管是新手还是老司机.这篇文章就是交流的成果. 这篇文章不会讲解Service的使用方法,这个要去看官方的( ...

  3. httpanalyzer 抓包时会更换证书

    今天是要httpanalyzer时发现,在启用的时候,如果当前网络地址是https的话,那么当前证书会被更换掉,效果如下: 而原来的证书如下: 所以,请注意,如果你的请求有严格的证书验证,那么证书验证 ...

  4. 初识Nginx及编译安装Nginx

    初识Nginx及编译安装Nginx 环境说明: 系统版本    CentOS 6.9 x86_64 软件版本    nginx-1.12.2 1.什么是Nginx? 如果你听说或使用过Apache软件 ...

  5. 联想T470设置U盘启动

    联想T470设置U盘启动 学习了:http://www.udaxia.com/upqd/10092.html # F12 in Enter in USB HDD 如果不行: App Menu > ...

  6. android layout 布局属性

    控件属性: android属性 Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料, 第一类:属性值为true或false android:layout ...

  7. [阿里Hao]Android无线开发的几种经常使用技术

    本文由阿里巴巴移动安全client.YunOS资深project师Hao(嵌入式企鹅圈原创团队成员)撰写,是Hao在嵌入式企鹅圈发表的第一篇原创文章.对Android无线开发的几种经常使用技术进行综述 ...

  8. 系统封装 EasyBoot如何将WIN7安装版提取到光盘

    1 将WIN7光盘中的文件提取到Easyboot根目录,注意不要autorun.inf和setup.exe这两个文件.我们这里的Easyboot已经有了一些其他东西(XP的安装版文件,PE的文件等等, ...

  9. Unity里面的自动寻路(一)

    来自:http://www.narkii.com/club/forum.php?mod=viewthread&tid=269146&highlight=Unity%E9%87%8C%E ...

  10. Android学习(五) 圆角实现(转)

    设置边框圆角可以在drawable-mdpi目录里定义一个取名为corners_bg.xml <?xml version="1.0" encoding="utf-8 ...