因為還沒有寫入MySQL,所以你在把資料寫入Redis時,需要設計一個key來唯一標識一條資料.
MySQL表中應該設定一個唯一欄位用於儲存這個key.
這個key可以是一個由程式即時生成的隨機唯一值,比如可以取Linux提供的uuid:
/proc/sys/kernel/random/uuid
取到後用sadd新增到Redis的集合(元素唯一)裡.
新增成功,表示集合中沒有這個uuid,在集合裡是唯一的.
然後再把這個uuid用lpush新增到Redis的列表(元素有序)裡.
lpush入隊後,當列表的長度大於等於N(自定義數值)時,Redis用lrange取出列表裡的元素並批次寫入到MySQL,寫入成功後用ltrim刪掉列表中已經處理的元素.
最佳化就體現在:原來的即時寫入轉變為批次寫入.
風險是:Redis意外崩潰有可能丟資料.
比如你的Redis配置了 appendfsync everysec
那就有丟失前1秒資料的風險.
因為還沒有寫入MySQL,所以你在把資料寫入Redis時,需要設計一個key來唯一標識一條資料.
MySQL表中應該設定一個唯一欄位用於儲存這個key.
這個key可以是一個由程式即時生成的隨機唯一值,比如可以取Linux提供的uuid:
/proc/sys/kernel/random/uuid
取到後用sadd新增到Redis的集合(元素唯一)裡.
新增成功,表示集合中沒有這個uuid,在集合裡是唯一的.
然後再把這個uuid用lpush新增到Redis的列表(元素有序)裡.
lpush入隊後,當列表的長度大於等於N(自定義數值)時,Redis用lrange取出列表裡的元素並批次寫入到MySQL,寫入成功後用ltrim刪掉列表中已經處理的元素.
最佳化就體現在:原來的即時寫入轉變為批次寫入.
風險是:Redis意外崩潰有可能丟資料.
比如你的Redis配置了 appendfsync everysec
那就有丟失前1秒資料的風險.