业务场景:多线程的业务系统不断写入数据到内存中,同步线程不断读取数据并同步redis
设计方案:
由于业务非常适合map的结构,因此采用了双层map
typedef std::map<int,int> EventCountMap;
typedef std::map<int,EventCountMap> RuleEventCountMap;
为了实现读写分离,采用双缓冲,一个读,一个写,由于std::map并不是线程安全的,所以读写的时候需要加锁处理。
class BufferProc
{
public:
BufferProc();
~BufferProc();
int init();
RuleEventCountMap * get();
int set(int key, int field_key, int field_value);
void clear();
private:
MutexLock buffer_map_mutex;
RuleEventCountMap *buffermap_A_ptr;
RuleEventCountMap *buffer_map_B_ptr;
RuleEventCountMap *buffer_map_producer_ptr;
RuleEventCountMap *buffer_map_consumer_ptr;
};
init用于初始化双缓冲,get返回消费者的指针,set用于生产者插入数据,celar用于清空缓冲区。