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就是用来解决这种问题的