Redis加锁

  1. customerM = BaseMemCached.setMLock(customerId);

  

  1. /**
  2. * 个人账户表加锁
  3. **/
  4. public static CustomerM setMLock(Integer userId){
  5.   CustomerM customerM = (CustomerM)setLock(USER_M_USERID+userId, CustomerM.class);
  6.   customerM.setAddPiggy(0);
  7.   customerM.setAddPayoff(0);
  8.   customerM.setAddAmountBase(0);
  9.   customerM.setAddAmountCft(0);
  10.   return customerM;
  11. }

  

  1. public static Object setLock(String key,Class classes){
  2. logger.info("加锁"+key+_LOCK);
  3. long result = JedisPoolClient.getInstance().setnx(key+_LOCK,System.currentTimeMillis());
  4.     try {
  5. long time = System.currentTimeMillis();
  6.   while (result != 1) {
  7.   Thread.sleep(10);
  8.  time = System.currentTimeMillis();
  9.  result = JedisPoolClient.getInstance().setnx(key+_LOCK,time);
  10. }
  11. logger.info("加锁\t"+key+_LOCK+"\t完成");
  12. JedisPoolClient.getInstance().set(key+_LOCK,time,TIME_OUT);
  13. return JedisPoolClient.getInstance().get(key,classes);
  14. }catch (Exception e){
  15. e.printStackTrace();
  16. }
  17. return null;
  18. }

  

  1. public long setnx(String key,Object obj){
  2. Jedis jedis = jedisPool.getResource();
  3. try {
  4. long l = jedis.setnx(key,StringUtil.bean2json(obj));
  5. return l;
  6. }catch(JedisConnectionException e){
  7. jedisPool.returnBrokenResource(jedis);
  8. jedis=null;
  9. logger.error("redis异常:"+e.getMessage());
  10. e.printStackTrace();
  11. }finally{
  12. jedisPool.returnResource(jedis);
  13. }
  14. return -1;
  15. }

  

  1. public boolean set(String key,Object obj,int seconds){
  2. Jedis jedis = jedisPool.getResource();
  3. try {
  4. jedis.setex(key,seconds,StringUtil.bean2json(obj));
  5. return true;
  6. }catch(JedisConnectionException e){
  7. jedisPool.returnBrokenResource(jedis);
  8. jedis=null;
  9. logger.error("redis异常:" + e.getMessage());
  10. e.printStackTrace();
  11. }catch(Exception e){
  12. logger.error("Json封装失败:" + e.getStackTrace());
  13. }finally{
  14. jedisPool.returnResource(jedis);
  15. }
  16. return false;
  17. }

Redis解锁

  1. BaseMemCached.updateAndUnlock(customerM);

  

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

  

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

  

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

  

  1. public boolean set(String key,Object obj){
  2. Jedis jedis = jedisPool.getResource();
  3. try {
  4. logger.info(key+":"+StringUtil.bean2json(obj));
  5. jedis.set(key, StringUtil.bean2json(obj));
  6. return true;
  7. }catch(JedisConnectionException e){
  8. jedisPool.returnBrokenResource(jedis);
  9. jedis=null;
  10. logger.error("redis异常:" + e.getMessage());
  11. e.printStackTrace();
  12. }finally{
  13. jedisPool.returnResource(jedis);
  14. }
  15. return false;
  16. }

  

  1. public void delete(String key){
  2. Jedis jedis = jedisPool.getResource();
  3. try {
  4. jedis.del(key);
  5. }catch(JedisConnectionException e){
  6. jedisPool.returnBrokenResource(jedis);
  7. jedis=null;
  8. logger.error("redis异常:"+e.getMessage());
  9. e.printStackTrace();
  10. }finally{
  11. jedisPool.returnResource(jedis);
  12. }
  13. }

  

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. Matlab绘图时横坐标重叠怎么办

    如横坐标重叠了,咋回事?蛋疼. 后来发现plot里已经横坐标1到50了,我又写了个 set(gca,'XTick',1:1:50);没写XTickLabel,后来我把XTick注视了就好了.

  2. Creating and Flashing UBIFS with MTD Utils

    转:http://wiki.atlas-embedded.com/index.php?title=Creating_and_Flashing_UBIFS_with_MTD_Utils Contents ...

  3. 利用PPPOE认证获取路由器中宽带账号密码

    前言 回家时买了一台极路由准备换掉家里老掉牙的阿里路由器,想进后台看一下宽带账号密码,咦???后台密码是什么来着??? 我陷入了沉思,家里的路由器一般都是pppoe拨号,而路由器在与pppoe认证服务 ...

  4. python调用top命令获得CPU利用率

    1.python调用top命令获得CPU利用率 思路:通过python调用top命令获取cpu使用率 #python2代码 [root@zdops-server script]# cat cpu_lo ...

  5. python 常用的模块(base64)转

    Base64是一种用64个字符来表示任意二进制数据的方法. 用记事本打开exe.jpg.pdf这些文件时,我们都会看到一大堆乱码,因为二进制文件包含很多无法显示和打印的字符,所以,如果要让记事本这样的 ...

  6. Hadoop之Flume详解

    1.日志采集框架Flume 1.1 Flume介绍 Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到 ...

  7. Nginx user_agent、if指令及全局变量

    Nginx user_agent.if指令及全局变量 1.User_agent User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CP ...

  8. Python 实现指定目录下 删除指定大小的文件

    import os, sys from stat import * BIG_FILE_THRESHOLD = 6000L #1000000L dict1 = {} # dict2 = {} # def ...

  9. iOS开发:解决UIScrollView不滚动的问题

    照着书上的Demo(iOS 5.0的教程),在- (void)viewDidLoad里设置scrollView的contentsize,让它大于屏幕的高度,却发现在模拟器中没用,还是不能滚.经过 一翻 ...

  10. 内置函数new() 和struct{} 初始化的区别

    一.new() 这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针.在golang的代码定义如下: func new(t Type ...