diff --git a/src/db.cpp b/src/db.cpp index 4a31e8ef6..fc786f095 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -2801,8 +2801,10 @@ LNotFound: serverAssert(m_setexpire->find(sdsKey) != m_setexpire->end()); } serverAssert(o->FExpires() == (m_setexpire->find(sdsKey) != m_setexpire->end())); + g_pserver->stat_storage_provider_read_hits++; } else { sdsfree(sdsNewKey); + g_pserver->stat_storage_provider_read_misses++; } *pde = dictFind(m_pdict, sdsKey); diff --git a/src/server.cpp b/src/server.cpp index 05ca231bd..0b2c5ed68 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -5798,7 +5798,9 @@ sds genRedisInfoString(const char *section) { "total_reads_processed:%lld\r\n" "total_writes_processed:%lld\r\n" "instantaneous_lock_contention:%d\r\n" - "avg_lock_contention:%f\r\n", + "avg_lock_contention:%f\r\n" + "storage_provider_read_hits:%lld\r\n" + "storage_provider_read_misses:%lld\r\n", g_pserver->stat_numconnections, g_pserver->stat_numcommands, getInstantaneousMetric(STATS_METRIC_COMMAND), @@ -5836,7 +5838,9 @@ sds genRedisInfoString(const char *section) { stat_total_reads_processed, stat_total_writes_processed, aeLockContention(), - avgLockContention); + avgLockContention, + g_pserver->stat_storage_provider_read_hits, + g_pserver->stat_storage_provider_read_misses); } /* Replication */ diff --git a/src/server.h b/src/server.h index b18989603..adf16dc41 100644 --- a/src/server.h +++ b/src/server.h @@ -2242,6 +2242,8 @@ struct redisServer { long long stat_dump_payload_sanitizations; /* Number deep dump payloads integrity validations. */ std::atomic stat_total_reads_processed; /* Total number of read events processed */ std::atomic stat_total_writes_processed; /* Total number of write events processed */ + long long stat_storage_provider_read_hits; + long long stat_storage_provider_read_misses; /* The following two are used to track instantaneous metrics, like * number of operations per second, network traffic. */ struct {