rediscache-invalidation

Redis: How to distinguish between client tracking invalidation of keys across multiple databases


Is there anyway to distinguish which database an invalidation applies to?

example:

Tracking socket:

CLIENT ID // 77
PSUBSCRIBE __redis__:*

Main socket:

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

The issue i have is that the tracking socket receives a: redis:invalidate 1) MYKEY when MYKEY is set in database 2. However the key I wanted to track is in database 1.

Short of redesigning the application to avoid key collisions across databases or creating a socket per database+tracking, how can i use tracking in a meaningful way?

Edit: Redis 6.0.8 stand alone install


Solution

  • Found the answer in Redis documentation:

    "There is a single keys namespace, not divided by database numbers. So if a client is caching the key foo in database 2, and some other client changes the value of the key foo in database 3, an invalidation message will still be sent. This way we can ignore database numbers reducing both the memory usage and the implementation complexity."