用 Redis 实现分布式锁,下列写法中最合理的是?

中间件

  1. A.先执行 SETNX lock 1 加锁,再单独执行一条 EXPIRE lock 30 设过期
  2. B.SET lock <随机值> NX PX 30000,释放时 Lua 比对随机值再 DEL
  3. C.SET lock 1,业务结束后 DEL lock,不需要过期时间
  4. D.INCR lock,返回 1 即获得锁,释放时 DECR 归零即可