平时在工作中,我们经常看到一段运行很正常的功能代码,一旦遇到用户并发请求的时候,总会出现一些让人意外的bug。
首先来看下这2个方法,一个从redis中取数据,一个往redis中存数据:
|
|
现在调用这2个方法,并且在redis的cacheKey中存入一个数组。
|
|
然而在用户并发调用上面操作时候会发生什么操作。
首先,如果存在2个并发的用户从redis中获得相同的缓存数据。然后将一个mongoId存入数组,这时候2个用户生成的数组就不一样了,当他们把数据存入redis中时候,第一写入数据库中的数据就会被后面写入的数据给覆盖掉了。从而造成数据的丢失。
因此,平时写代码过程中,我们要考虑到用户正常请求和并发请求的案例。