首页 新闻 搜索 专区 学院

每一个请求都加上一个redis分布式锁,会不会大大影响请求的吞吐量

0
[待解决问题]

服务器是集群的,会有很多并发问题,比如数据取出来加1再存进去,如果单独处理会很麻烦,所以我想在每个请求在最外面包一层redis分布式锁,但是又怕会大大影响请求的吞吐量,稍微有点影响可以接受

拖鞋王子的主页 拖鞋王子 | 初学一级 | 园豆:50
提问于:2020-04-08 11:19
< >
分享
所有回答(3)
0

看你并发多少啊,加锁肯定是会对性能有影响的,而且如果你的要求是绝对不能有冲突的话,是不可以用redis的,因为redis是AP模型,极端情况下,会丢失锁

yytxdy | 园豆:1154 (小虾三级) | 2020-04-08 11:51

用阿里云的集群版redis丢失锁的问题吗

支持(0) 反对(0) 拖鞋王子 | 园豆:50 (初学一级) | 2020-04-08 11:55

@拖鞋王子: 你用什么集群都有可能有这问题,你要求绝对不丢失的话,就etcd

支持(0) 反对(0) yytxdy | 园豆:1154 (小虾三级) | 2020-04-08 14:35
0

可以在redis的key上加锁,这样多个请求修改不同的key是不会阻塞的,只有再多个请求修改一个key的时候才会有阻塞。

Shendu.CC | 园豆:1914 (小虾三级) | 2020-04-09 08:11
这样不行,不同请求可以会修改同一个数据
支持(0) 反对(0) 拖鞋王子 | 园豆:50 (初学一级) | 2020-04-09 10:35

@拖鞋王子: 你要让不同请求同时修改同一个数据吗?

支持(0) 反对(0) Shendu.CC | 园豆:1914 (小虾三级) | 2020-04-09 11:02
@Shendu.CC: 嗯,我这是游戏项目,举个例子,比如打怪会获得金币,开宝箱会获得金币,这两个不同的请求都会修改金币
支持(0) 反对(0) 拖鞋王子 | 园豆:50 (初学一级) | 2020-04-09 11:09

@拖鞋王子: 我说的是同时哦!

支持(0) 反对(0) Shendu.CC | 园豆:1914 (小虾三级) | 2020-04-09 11:39

@Shendu.CC: 会有同时的请求

支持(0) 反对(0) 拖鞋王子 | 园豆:50 (初学一级) | 2020-04-09 11:40

@拖鞋王子: 那你这样就会出问题呀,开箱子获得1个金币,打怪获得1金币,原来有三个金币,同时请求,就可能发生最终只得倒4哥金币。

支持(0) 反对(0) Shendu.CC | 园豆:1914 (小虾三级) | 2020-04-09 11:42

@Shendu.CC: 对啊,所以要加锁

支持(0) 反对(0) 拖鞋王子 | 园豆:50 (初学一级) | 2020-04-09 11:43

@拖鞋王子: 所以我的回答,应该没有问题哦,

支持(0) 反对(0) Shendu.CC | 园豆:1914 (小虾三级) | 2020-04-09 11:45
0

Redis支持很多原子性操作。合理使用数据结构而非一股脑序列化成String 会有很大帮助。
你举得例子 金币+N,完全可以用 Incre 命令打成目的
Redis锁还是要根据具体场景来实践,在所有请求层来加锁肯定是不可取的。
至少也是放在数据层,最大降低 锁区域内的 流程。

gt1987 | 园豆:776 (小虾三级) | 2020-04-10 17:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册