如何在redis上过期凝胶化

时间:2016-01-12 10:14:17

标签: java redis geolocation maps

我在Redis上使用地理支持。

以这种方式添加新的地理定位:

 std::string url = "classname * varname  ;";
  boost::regex exp("^w+[ ] etc.");
  boost::smatch match;
  if (boost::regex_search(url, match, exp))
       std::cout << std::string(match[1].first, match[1].second).c_str();

我想在X小时后从report-geo-set中过期john键。

有任何建议吗?

谢谢你, 射线。

1 个答案:

答案 0 :(得分:7)

内置命令无法实现。请记住,基于zset的地理支持和您的问题看起来像&#34;如何在ZSET&#34;中使用TTL用于单个键。

你可以使用类似的东西:

  1. 添加&#34; john&#34;额外的特殊超时ZSET,时间()+ X小时得分。
  2. 不时运行脚本/工作人员从超时zset获取所有过时的密钥,并为你的&#34; john&#34;执行ZREM。键。
  3. 给定建议的示例。添加项目:

    MULTI
    GEOADD report-geo-set 30.52439985197 50.56539003041 john
    ZADD geo-timeout 1452600528 john //1452600528 is unix time stamp current + X hours 
    EXEC
    

    清理不时调用的脚本(使用LUA):

    local currentTime = redis.call('TIME');
    local list = redis.call('ZRANGEBYSCORE', 'geo-timeout', 0, currentTime[0]);
    local keysRemoved = 0;
    for i, name in ipairs(list) do
        redis.call('ZREM', 'geo-timeout', name);
        redis.call('ZREM', 'report-geo-set', name);
        keysRemoved = keysRemoved + 1;
    end
    return keysRemoved;