Clinet side caching: take count of used caching slots.

This commit is contained in:
antirez 2019-07-22 11:47:44 +02:00
parent bc5cb168f5
commit e00442eb13

View File

@ -60,6 +60,7 @@
* use the most significant bits instead of the full 24 bits. */
#define TRACKING_TABLE_SIZE (1<<24)
rax **TrackingTable = NULL;
unsigned long TrackingTableUsedSlots = 0;
robj *TrackingChannelName;
/* Remove the tracking state from the client 'c'. Note that there is not much
@ -109,8 +110,10 @@ void trackingRememberKeys(client *c) {
sds sdskey = c->argv[idx]->ptr;
uint64_t hash = crc64(0,
(unsigned char*)sdskey,sdslen(sdskey))&(TRACKING_TABLE_SIZE-1);
if (TrackingTable[hash] == NULL)
if (TrackingTable[hash] == NULL) {
TrackingTable[hash] = raxNew();
TrackingTableUsedSlots++;
}
raxTryInsert(TrackingTable[hash],
(unsigned char*)&c->id,sizeof(c->id),NULL,NULL);
}
@ -176,6 +179,7 @@ void trackingInvalidateKey(robj *keyobj) {
* again if more keys will be modified in this hash slot. */
raxFree(TrackingTable[hash]);
TrackingTable[hash] = NULL;
TrackingTableUsedSlots--;
}
void trackingInvalidateKeysOnFlush(int dbid) {