推荐方式:
使用
我正在尝试实现会话管理,我们将 jwt 令牌存储到 redis 中。现在,如果对象空闲时间超过 8 小时,我想删除密钥。请帮忙
除了密钥到期的非常微不足道的内存要求外,我没有充分的理由使用IDLETIME
而不是使用更简单的模式,即发出GET
后跟EXPIRE
。
推荐方式:GET
EXPIRE
GET
您想要的密钥。- 发出
EXPIRE <key> 28800
。
使用OBJECT IDLETIME
、DEL
和一些应用程序逻辑的方式:
GET
您想要的密钥。- 呼叫
OBJECT IDLETIME <key>
。 - 如果空闲时间> 8 小时,请检查应用程序代码。
- 如果满足条件 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
}
});`