如何从表值Redis Lua脚本中检索值

时间:2019-04-06 10:11:04

标签: redis lua

我正在尝试从JSON编码的字符串中提取一个值,该字符串是从Redis中的排序集返回的。

127.0.0.1:6379> eval 'local r= redis.call("ZRANGEBYSCORE", "iprange:locations", 34625535, "+inf", "LIMIT", 0, 1); return type(r);' 0
"table"
127.0.0.1:6379> eval 'local r= redis.call("ZRANGEBYSCORE", "iprange:locations", 34625535, "+inf", "LIMIT", 0, 1); return r;' 0
1) "{\"countryCode\": \"IT\", \"countryName\": \"Italy\"}"

我只想从结果中提取countryValue

尝试过return r.countryCode;return r["countryCode"];,但所有人都返回了(nil)

顺便说一句,我已经通过将json解码为数据,在我的应用程序中处理了这个json编码的字符串。 只是试图将这个简单的任务委托给Redis Lua脚本引擎。

1 个答案:

答案 0 :(得分:2)

使用built-in JSON library

eval 'local  r = redis.call("ZRANGEBYSCORE", "iprange:locations", 34625535, "+inf", "LIMIT", 0, 1);
      return cjson.decode(r[1])["countryCode"];'

请注意,ZRANGEBYSCORE返回一个结果数组,在Lua中用table表示。大概您需要遍历结果并为每个结果提取countryCode