diff --git a/src/db.cpp b/src/db.cpp index 509673cbe..589181e58 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -2781,8 +2781,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 b311317c8..3b20f59f7 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -5838,7 +5838,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), @@ -5876,7 +5878,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 4b1a84bf1..70709efc4 100644 --- a/src/server.h +++ b/src/server.h @@ -2244,6 +2244,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 {