利用redis在集群的情况下生成全局唯一时间戳

如题,需要保证两点:

  • 唯一
  • 原子操作

当时间戳相同的情况下,需要对其做+1操作以保证唯一
使用lua脚本保证原子操作

1
2
3
4
5
6
7
8
9
10
local newTS = 0;
if (redis.call('exists', KEYS[1]) == 1) then
newTS = redis.call('get', KEYS[1]);
end
if (newTS < ARGV[1]) then
newTS = ARGV[1];
end
newTS = newTS + 1;
redis.call('set', KEYS[1], newTS);
return redis.call('get', KEYS[1]);

其中KEY[1]为保存时间戳的key, 可自定义任意值
ARGV[1] 为客户端本地取得的当前毫秒戳

文章目录
,