diff --git a/src/db.cpp b/src/db.cpp index b322c1942..d1b33be61 100644 --- a/src/db.cpp +++ b/src/db.cpp @@ -2442,11 +2442,11 @@ void redisDbPersistentData::processChanges() { for (auto &change : m_setchanged) { - dictEntry *de = dictFind(m_pdict, change.strkey.get()); - if (de == nullptr) + auto itr = find_cached_threadsafe(change.strkey.get()); + if (itr == nullptr) continue; - robj *o = (robj*)dictGetVal(de); - sds temp = serializeStoredObjectAndExpire(this, (const char*) dictGetKey(de), o); + robj *o = itr.val(); + sds temp = serializeStoredObjectAndExpire(this, (const char*) itr.key(), o); m_spstorage->insert(change.strkey.get(), sdslen(change.strkey.get()), temp, sdslen(temp), change.fUpdate); sdsfree(temp); } diff --git a/src/server.h b/src/server.h index dcff5d0fe..ad15c319a 100644 --- a/src/server.h +++ b/src/server.h @@ -1333,6 +1333,8 @@ public: bool removeCachedValue(const char *key); void removeAllCachedValues(); + dict_iter find_cached_threadsafe(const char *key) const; + protected: uint64_t m_mvccCheckpoint = 0; @@ -1397,9 +1399,9 @@ public: using redisDbPersistentData::endSnapshot; using redisDbPersistentData::endSnapshotAsync; using redisDbPersistentData::end; + using redisDbPersistentData::find_cached_threadsafe; dict_iter random_cache_threadsafe(bool fPrimaryOnly = false) const; - dict_iter find_cached_threadsafe(const char *key) const; expireEntry *getExpire(robj_roptr key) { return getExpire(szFromObj(key)); } expireEntry *getExpire(const char *key); diff --git a/src/snapshot.cpp b/src/snapshot.cpp index e689bc69c..cb65eb30a 100644 --- a/src/snapshot.cpp +++ b/src/snapshot.cpp @@ -376,7 +376,7 @@ dict_iter redisDbPersistentDataSnapshot::random_cache_threadsafe(bool fPrimaryOn return dict_iter(de); } -dict_iter redisDbPersistentDataSnapshot::find_cached_threadsafe(const char *key) const +dict_iter redisDbPersistentData::find_cached_threadsafe(const char *key) const { dictEntry *de = dictFind(m_pdict, key); if (de == nullptr && m_pdbSnapshot != nullptr && dictFind(m_pdictTombstone, key) == nullptr)