redis分布式锁是setnx命令吧?底层实现原理是什么?