我有兴趣使用 Redis 在服务器端存储客户的 session 以进行授权。基本上,当客户登录时,哈希值将存储在 Redis 集群中,并将 key 返回给客户端。对于每个请求,客户端都会将 key 作为 header 传递,服务将检查哈希值是否仍然存在于 Redis 中,如果不存在,则会返回错误消息。该 key 将在 X 分钟后过期,导致使用该 key 的任何请求失败。然而,我一直在网上读到,有些人由于过期复制到从属设备的方式而遇到了问题。从机仅在收到来自主机的 del 命令时才会使键过期,因此如果在此命令之前在从机上执行“get”,则将返回该键的值。
https://github.com/antirez/redis/issues/187
这个问题还存在吗?这对我来说似乎是一个大问题,并且会造成一些安全漏洞。对于过时的数据来说也许没什么大不了的,但是当用于授权时就很重要了
最佳答案
A)不,不是真的 - 自 2014 年以来,即使从属设备尚未从复制流接收到 DEL,对过期 key 的 GET 也会在从属设备上返回“未找到”。突出的问题与 EXISTS 与 GET 不一致有关,这仅在您依赖 EXISTS 命令的输出时才重要。
B) 与此问题完全无关,复制滞后的可能性始终存在。应用程序的安全性不应依赖于副本始终是最新的前提。
关于Redis 过期复制到从站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62072143/