redis不是单线程吗?为什么还需要setnx

setnx是「SET if Not eXists」的缩写, 只有不存在的时候才设置,可以利用它来实现锁的效果。setnx 其实是两个操作,而且这两个操作是原子性的

一. https://blog.csdn.net/HuffmanTree_J/article/details/119423385
搜素该文章关键字:但是redis本身天然是单线程的

二. 这篇文章讲的非常好:https://www.jianshu.com/p/5ca4f67fc0d2

有个键,假设名称为myNum,里面保存的是阿拉伯数字,假设现在值为1,存在多个连接对myNum进行操作的情况,这个时候就会有并发的问题。假设有两个连接linkA和linkB,这两个连接都执行下面的操作,取出myNum的值,+1,然后再存回去,看看下面的交互:
linkA get myNum => 此时myNum为 1
linkB get myNum => 此时myNum为 1
linkA set muNum => 此时myNum为 2
linkB set myNum =>此时myNum为 2

执行完操作之后,结果可能是2。 没有保证多个操作的原子性,setnx就是用来解决这种问题的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容