Redis:如何区分跨多个数据库的客户端跟踪密钥失效
Redis: How to distinguish between client tracking invalidation of keys across multiple databases
有没有办法区分失效适用于哪个数据库?
示例:
跟踪插座:
CLIENT ID // 77
PSUBSCRIBE __redis__:*
主插座:
CLIENT TRACKING on REDIRECT 77 OPTIN
SELECT 1
SET MYKEY VALUE1
CLIENT CACHING YES
GET MYKEY //VALUE1
SELECT 2
SET MYKEY VALUE2
GET MYKEY //VALUE2
SELECT 1
GET MYKEY //VALUE1
我遇到的问题是跟踪套接字收到:redis:invalidate 1) MYKEY 当 MYKEY 设置在数据库 2 中时。但是我想跟踪的密钥在数据库 1.
没有重新设计应用程序以避免跨数据库的键冲突或为每个数据库+跟踪创建一个套接字,我如何以有意义的方式使用跟踪?
编辑:Redis 6.0.8 独立安装
在Redis documentation中找到答案:
"只有一个键命名空间,没有按数据库编号划分。因此,如果客户端在数据库 2 中缓存键 foo,而其他一些客户端更改了数据库 3 中键 foo 的值,则无效消息仍将被发送。这样我们就可以忽略数据库编号,从而减少内存使用和实现复杂性。"
有没有办法区分失效适用于哪个数据库?
示例:
跟踪插座:
CLIENT ID // 77
PSUBSCRIBE __redis__:*
主插座:
CLIENT TRACKING on REDIRECT 77 OPTIN
SELECT 1
SET MYKEY VALUE1
CLIENT CACHING YES
GET MYKEY //VALUE1
SELECT 2
SET MYKEY VALUE2
GET MYKEY //VALUE2
SELECT 1
GET MYKEY //VALUE1
我遇到的问题是跟踪套接字收到:redis:invalidate 1) MYKEY 当 MYKEY 设置在数据库 2 中时。但是我想跟踪的密钥在数据库 1.
没有重新设计应用程序以避免跨数据库的键冲突或为每个数据库+跟踪创建一个套接字,我如何以有意义的方式使用跟踪?
编辑:Redis 6.0.8 独立安装
在Redis documentation中找到答案:
"只有一个键命名空间,没有按数据库编号划分。因此,如果客户端在数据库 2 中缓存键 foo,而其他一些客户端更改了数据库 3 中键 foo 的值,则无效消息仍将被发送。这样我们就可以忽略数据库编号,从而减少内存使用和实现复杂性。"