如何使用 Spring boot Redis 获取对象空闲时间



我正在尝试实现会话管理,我们将 jwt 令牌存储到 redis 中。现在,如果对象空闲时间超过 8 小时,我想删除密钥。请帮忙

除了密钥到期的非常微不足道的内存要求外,我没有充分的理由使用IDLETIME而不是使用更简单的模式,即发出GET后跟EXPIRE

推荐方式:GETEXPIRE

  1. GET您想要的密钥。
  2. 发出EXPIRE <key> 28800

使用OBJECT IDLETIMEDEL和一些应用程序逻辑的方式:

  1. GET您想要的密钥。
  2. 呼叫OBJECT IDLETIME <key>
  3. 如果空闲时间> 8 小时,请检查应用程序代码。
  4. 如果满足条件 3,则发出DEL命令。

第二种方式更麻烦,并且会引入网络延迟,因为您需要三次往返 redis 服务器,而如果您使用管道或两次往返,则第一种解决方案只是在一次往返中完成,最坏的情况是没有任何应用程序服务器时间。

这就是我使用绝地武士所做的。我一次获取 1000 条记录。您可以添加一个循环来提取批处理中的所有记录。

Jedis jedis = new Jedis("addURLHere");
ScanParams scanParams = new ScanParams().count(1000);
ScanResult<String> scanResult = jedis.scan(ScanParams.SCAN_POINTER_START, scanParams);
List<String> result = scanResult.getResult();
result.stream().forEach((key) -> {
if (jedis.objectIdletime(key) > 8 * 60 * 60) { // more than 5 days
//your functionality here
}
});`

最新更新