内容:一个按钮,快速点击,当你的第一个线程进入,先判断发现redis里面没有数据,则放入一个1,然后继续走下面的方法,然后第二个线程进入,发现redis里面有数据,说明重复了。
问题:假如第一个线程判断完还未将1put进入,此时第二个线程也判断完,这不就重复了吗。
猜测:put的时候必须put完才能get,请问是这样的吗??
使用setnx命令 ,意思是 set if not exist, 只在key不存在的时候才会设置成功。像你说的先用get或exists命令判断是否存在,再去set确实会出现你说的问题,因为是两步操作。 但是setnx是一步操作,不会出现这种问题。
也可以使用redis lua脚本,lua操作是原子性的