#pragma once #include #include #include #include #include #include #include #include #include "rediska/cache/lru/LRU.hpp" #include "rediska/common/QueueMessage.hpp" #include "rediska/common/types.hpp" namespace rediska::worker { class AsyncWorker { public: explicit AsyncWorker(size_t num_workers = 4, size_t cache_capacity = 1000); ~AsyncWorker(); void Start(); void Stop(); void Enqueue(QueueMessage msg); bool IsRunning() const { return running_; } private: void WorkerLoop(); void ProcessMessage(QueueMessage& msg); void InitializeCache(); std::vector workers_; std::queue message_queue_; std::mutex queue_mutex_; std::condition_variable queue_cv_; std::atomic running_{false}; size_t num_workers_; std::unique_ptr cache_; cache::LRUConfig cache_config_; }; } // namespace rediska::worker