如何在Redis中生成序列号?

时间:2016-10-20 13:37:00

标签: redis

我需要Redis服务器生成的一系列数字。 像abc这样的东西: 20160912 185342000000000123 这里,粗体数字是当前日期,其余数字是redis提供的序列号。

2 个答案:

答案 0 :(得分:2)

实现此目的的Lua脚本可能如下所示:

eval "local count = redis.call('incr','sequence_number')\n return ARGV[1] .. ':' .. ARGV[2] .. count" 0 abc 20160912

这假定序列号将存储在名为sequence_number的键中,并且每次评估此脚本时将增加1。如果sequence_number不存在,则将创建它,并且其初始值将为1.

调用EVAL时必须提供当前日期和前缀字符串。您似乎无法在Redis Lua脚本中调用os.date。

与Redis Lua脚本一样,您可以通过使用EVALSHA发送表示Lua脚本的字符串的SHA1来避免对脚本进行系统评估。仅当EVALSHA失败时才使用EVAL发送整个脚本(这意味着脚本未在Redis中缓存)。

答案 1 :(得分:1)

Redis不能本身。这里有两个选项可以解决这个问题:

  1. Lua脚本
  2. 应用层中的生成器。