多个项目共用同一个redis_高并发多线程共用同一个全局连接实例读写数据会有问题吗(Redis/MySQL)?...

本文探讨了在高并发环境下,多个项目使用全局的MySQL和Redis连接实例进行读写操作可能面临的问题。场景1中,由于并发执行,可能存在线程间结果交错;场景2中,事务的并发执行可能导致意外的提交顺序;场景3中,Redis的简单操作理论上不会有数据交错,但实际应用仍需谨慎。文章期望得到关于底层处理方式的专业解答。
摘要由CSDN通过智能技术生成

全局变量 gMySQLClient=new MySQLClient(127.0.0.1:3306),gRedisClient =new RedisClient(127.0.0.1:6379);

场景 1-MySQL:

线程 A:

resA=gMySQLClient.Exec("Select * From A WHERE id=1").GetExecResult();

线程 B:

resB=gMySQLClient.Exec("Select * From B WHERE id=1").GetExecResult();

该场景有没可能发生 resA 是线程 B 返回的结果?假设线程 B 的结果比线程 A 先返回

场景 2-MySQL:

线程 A:

resA1=gMySQLClient.Exec("BEGIN").GetExecResult();

resA2=gMySQLClient.Exec("Update A SET a='a1' WHERE id=1").GetExecResult();

sleep(5*Time.Second);//t1 时刻,resA2 执行成功,resA3 暂未执行

resA3=gMySQLClient.Exec("Update B SET b='b1' WHERE id=1").GetExecResult();

resA4=gMySQLClient.Exec("COMMIT").GetExecResult();

线程 B:

resB1=gMySQLClient.Exec("BEGIN").GetExecResult();

resB2=gMySQLClient.Exec("Update C SET c='c1' WHERE id=1").GetExecResult()

resA3=gMySQLClient.Exec("COMMIT").GetExecResult();

该场景有没可能发生线程 B 执行的 COMMIT 恰好在 t1 时刻执行,然后把线程 A 提前 COMMIT 生效了?

场景 3-Redis:

线程 A:

resA=gRedisClient.Get("keyA")

线程 B:

resB=gRedisClient.Get("keyB")

该场景有没可能发生 resA 是线程 B 返回的结果?假设线程 B 的结果比线程 A 先返回

不太清楚它们底层的处理方式,恳请大佬解答,谢谢~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值