服务器是集群的,会有很多并发问题,比如数据取出来加1再存进去,如果单独处理会很麻烦,所以我想在每个请求在最外面包一层redis分布式锁,但是又怕会大大影响请求的吞吐量,稍微有点影响可以接受
看你并发多少啊,加锁肯定是会对性能有影响的,而且如果你的要求是绝对不能有冲突的话,是不可以用redis的,因为redis是AP模型,极端情况下,会丢失锁
用阿里云的集群版redis丢失锁的问题吗
@拖鞋王子: 你用什么集群都有可能有这问题,你要求绝对不丢失的话,就etcd
可以在redis的key上加锁,这样多个请求修改不同的key是不会阻塞的,只有再多个请求修改一个key的时候才会有阻塞。
@拖鞋王子: 你要让不同请求同时修改同一个数据吗?
@拖鞋王子: 我说的是同时哦!
@Shendu.CC: 会有同时的请求
@拖鞋王子: 那你这样就会出问题呀,开箱子获得1个金币,打怪获得1金币,原来有三个金币,同时请求,就可能发生最终只得倒4哥金币。
@Shendu.CC: 对啊,所以要加锁
@拖鞋王子: 所以我的回答,应该没有问题哦,
Redis支持很多原子性操作。合理使用数据结构而非一股脑序列化成String 会有很大帮助。
你举得例子 金币+N,完全可以用 Incre 命令打成目的
Redis锁还是要根据具体场景来实践,在所有请求层来加锁肯定是不可取的。
至少也是放在数据层,最大降低 锁区域内的 流程。