您的购物车目前是空的!
get key
如果key不存在返回nil
getset key value
原子的设置key的值,并返回key的旧值。如果key不存在返回nil。应用场景:设置新值,返回旧值,配合setnx可实现分布式锁。
分布式锁的思路:注意该思路要保证多台Client服务器的NTP一致。
伪代码为:
# get lock lock = 0 while lock != 1:
timestamp = current Unix time + lock timeout + 1
lock = SETNX lock.foo timestamp
if lock == 1 or (now() > (GET lock.foo) and now() > (GETSET lock.foo timestamp)):
break;
else:
sleep(10ms)
# do your job do_job()
# release if now() < GET lock.foo: DEL lock.foo
以上是一个单Server 的分布式锁思路,官网上还介绍了另一个单机使用超时方式进行的思路,和这个基本一致,并且在同一个文档中介绍了一个名为redlock的多Server容错型分布式锁的算法,同时列出了多语言的实现。这个算法的优势在于几个服务器可以有少量的时间差,不要求严格时间一致。
也可以设计一个按小时计算的计数器,可以用GetSet获取计数并重置为0。
mget key1 key2 ... keyN
一次获取多个key的值,如果对应key不存在,则对应返回nil