redis
redis 标签描述

一、基于数据库实现分布式锁 1.悲观锁 利用select…where…forupdate排他锁 注意:其他附加功能与实现一基本一致,这里需要注意的是“wherename=lock”,name字段必须要走索引,否则会锁表。有些情况下,比如表不大,mysql优化器会不走这个索引,导致锁表问题。 2.乐观锁 所谓乐观锁与前边最大区别在于基于CAS思想,是不具有互斥性,不会产生锁等待而消耗资源,操作过程中认为不存在并发冲突,只有updateversion失败后才能觉察到。我们的抢购、秒杀就是用了这种实现以防止超卖。 通过增加递增的版本号字段实现乐观锁 二、基于jdk的实现方式 思路:另启一...

  liuliu   15天前   30   1   0 redis

记录一次大版本上线后回滚的案例 一问题 一个大版本的迭代,保存到Redis中的缓存数据实体类增加了一些属性,就用了一个子类继承旧实体类。获取缓存数据时可以通过Redis的class类型判断是新数据,如果不是,就用旧实体类序列化,代码如下: 旧的实体类 java classOldEntity{ //旧的属性 privateIntegerage; } 新的实体类 java classNewEntityextendsOldEntity{ //新增属性 privateStringname; } 从Redis获取数据,适配旧数据 java Map<byte[],byte[]loadedHa...

  qbian   2019年11月12日   73   1   0 tomcatjava-eeredis

一问题 向redis中保存hash数据类型时,保存的对象中有Map类型的属性,切Map的key是Integer类型,在从redis中将数据取出反序列化的时候,Map的key会变为String类型。 例子 java publicclassTest{ privateStringname; privateIntegerage; privateMap<Integer,Stringmaps; } 将以上对象保存到redis的hash数据类型中。 取出结果 json { "name":"xxx", "age":20, "maps":{ "1":"aaa",//这里的key变为了String类...

  qbian   2019年11月12日   93   1   0 java-eeredis

一设计思路 1.本地锁:本地多线程并发时,保证只有一个线程在竞争redis锁; 2.redis锁(setNX):分布式部署多个服务器之间并发时,保证只有一个服务器可以竞争到redis锁; 3.本地多线程并发时,先获取本地锁成功,然后再去尝试获取redis锁; redis锁的实现原理setNX:redis的setNX操作在设置同一个key时,只会有一个成功,当已经存在了该key时,setNX接口会返回false,也就可以理解为获取锁失败。setNX成功的即可理解为获取redis锁成功,再设置一个超时时间,防止发生异常时死锁。 二实现类 java packagecom.qbian.comm...

  qbian   2019年11月12日   91   3   0 java-eejavaredis