1,setnx:
2,设置超时
setex name 60 zs
3,时间续租
expireat name 60
4,value->id
三:这种实现方式有3大要点(也是面试概率非常高的地方):1 、set命令要用set key value px milliseconds nx:替代 setnx + expire 需要分两次执行命令的方式,保证了。原子性
SET key value [EX seconds] [PX milliseconds] [NX|XX]
set ename zs EX 60 NX
2、value要具有唯一性:可以使用UUID.randomUUID().toString()方法生成,用来标识这把锁是属于哪个请求加的,在解锁的时候就可以有依据;
3、释放锁时要验证value值,不能误解锁:同时利用了eval命令执行Lua脚本的原子性
问题:主服务器加锁成功但是没同步消息的时候宕机,从服务器上位,新的客户端获取到同样的锁。
解决:redlock、没有主从关系,加锁时同步其他服务器,过半节点设置成功,加锁成功。
五:redisson框架加锁原理1.加锁
2.互斥锁
3.watch dog延期
4.可重入加锁机制
5.释放锁
6:其他问题1.redis如何做到持久化(RDB AOF)
2.redis支持的五种数据类型(string ,list, set ,sorede set , hash)
3.redis是单线程的吗?为什么(是,redis瓶颈并不是内存而是网络IO,可以开多个redis实例解决)
4.redis淘汰策略:
1.volatile-lru:从已设置过期的数据集中挑选最近最少使用的淘汰
2.volatile-ttr:从已设置过期的数据集中挑选将要过期的数据淘汰
3.volatile-random:从已设置过期的数据集中任意挑选数据淘汰
4.allkeys-lru:从数据集中挑选最近最少使用的数据淘汰
5.allkeys-random:从数据集中任意挑选数据淘汰
6.noenviction:禁止淘汰数据
5:Redis集群最大节点个数是多少(16384)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)