redis-cli INFO SERVER
# Server
redis_version:7.0.5
...
因此,在节点缓存一些用户数据时,存在的问题是“EX”不是设置为以秒为单位的过期时间,而是作为字段,其代码如下:
const resultCached = await redisClient.hset(
accessToken,
'user',
JSON.stringify({
'username' : username,
'passHash' : passHash,
'loginToken': accessTokenHash
}),
'EX',
7200
);
返回此哈希的所有字段的命令可以看到问题,因为返回“EX”作为字段
redis-cli HGETALL '$2a$08$a9dv5bFwxsP0Z0eVUuw9XOOwNq85MvP5XHZbpw1cCgfvjlqeqQs0G'
1) "EX"
2) "7200"
3) "user"
4) "{\"username\":\"xpto1\",\"passHash\":\"$2a$08$MeJDVEAw.JKvuKKlC84gMuy0/dZZ/BOsoZSphxuPJZU.1Ro6W6tA.\",\"loginToken\":\"$2a$08$5Pqd6WDZaw6.D71kbqciA.Bz1USDVzPYGqbnQ4BnQcDhZXwofL6La\"}"
错误,这不应该是一个字段,而是该键/数据的过期配置
~$ redis-cli HGET '$2a$08$a9dv5bFwxsP0Z0eVUuw9XOOwNq85MvP5XHZbpw1cCgfvjlqeqQs0G' 'EX'
"7200"
正确:
$ redis-cli HGET '$2a$08$a9dv5bFwxsP0Z0eVUuw9XOOwNq85MvP5XHZbpw1cCgfvjlqeqQs0G' 'user'
"\"username\":\"xpto1\",\"passHash\":\"$2a$08$MeJDVEAw.JKvuKKlC84gMuy0/dZZ/BOsoZSphxuPJZU.1Ro6W6tA.\",\"loginToken\":\"$2a$08$5Pqd6WDZaw6.D71kbqciA.Bz1USDVzPYGqbnQ4BnQcDhZXwofL6La\"}"
我的问题是,识别为配置参数(“EX”)过期的正确格式是什么,而不是此键的额外字段(请注意,在
set
的情况下,它仅在 hset
出现问题时才按预期正常工作)
使用单独的命令
expire
效果很好,如果可能的话,仍然更愿意使用单个命令。
const resultExpire = 等待 redisClient.expire( 访问令牌, 10 );