20 #include <condition_variable> 25 #include <boost/noncopyable.hpp> 38 template<
typename K,
typename V>
88 virtual void clear() = 0;
95 namespace persistence {
97 std::chrono::milliseconds(5000);
118 template <
typename K,
typename V,
typename MutexT = std::mutex>
121 public std::enable_shared_from_this<LRUPersistentCache<K, V, MutexT>>,
122 private boost::noncopyable {
124 using Ptr = std::shared_ptr<LRUPersistentCache<K, V, MutexT>>;
145 std::size_t cacheCapacity,
146 std::chrono::milliseconds syncInterval =
152 std::shared_ptr<folly::Executor>
executor,
153 std::size_t cacheCapacity,
154 std::chrono::milliseconds syncInterval,
169 bool hasPendingUpdates();
175 return cache_.get(key);
178 void put(
const K& key,
const V&
val)
override;
180 bool remove(
const K& key)
override {
181 return cache_.remove(key);
184 void clear(
bool clearPersistence =
false)
override {
186 if (clearPersistence) {
187 auto persistence = getPersistence();
189 persistence->clear();
195 return cache_.size();
199 syncOnDestroy_ = syncOnDestroy;
215 void setPersistenceHelper(
238 static void* syncThreadMain(
void* arg);
253 std::shared_ptr<CachePersistence<K, V>> getPersistence();
260 bool stopSyncer_{
false};
267 std::atomic_flag executorScheduled_ = ATOMIC_FLAG_INIT;
270 const std::chrono::milliseconds syncInterval_{
279 bool syncOnDestroy_{
false};
std::shared_ptr< CachePersistence< K, V > > persistence_
std::shared_ptr< LRUPersistentCache< K, V, M >> Ptr
std::condition_variable stopSyncerCV_
uint64_t CacheDataVersion
std::shared_ptr< folly::Executor > executor_
requires E e noexcept(noexcept(s.error(std::move(e))))
PUSHMI_INLINE_VAR constexpr __adl::get_executor_fn executor
std::chrono::steady_clock::time_point lastExecutorScheduleTime_
virtual void setPersistedVersion(CacheDataVersion version) noexcept
CacheDataVersion persistedVersion_
bool persistVersionedData(const folly::dynamic &kvPairs, const CacheDataVersion &version)
LRUInMemoryCache< K, V, MutexT > cache_
constexpr std::chrono::milliseconds DEFAULT_CACHE_SYNC_INTERVAL
constexpr int DEFAULT_CACHE_SYNC_RETRIES
void clear(bool clearPersistence=false) override
void setSyncOnDestroy(bool syncOnDestroy)
std::mutex stopSyncerMutex_
virtual bool persist(const folly::dynamic &kvPairs) noexcept=0
virtual CacheDataVersion getLastPersistedVersion() const
virtual ~CachePersistence()=default
virtual folly::Optional< folly::dynamic > load() noexcept=0