淄博網(wǎng)站備案網(wǎng)絡(luò)服務(wù)提供者收集和使用個(gè)人信息應(yīng)當(dāng)符合的條件有
問(wèn)題:單機(jī)qps增加時(shí)請(qǐng)求摘要后端,耗時(shí)也會(huì)增加,因?yàn)槌^(guò)了后端處理能力(最大qps,存在任務(wù)堆積)。
- 版本一
引入LruCache。為了避免數(shù)據(jù)失效,cache數(shù)據(jù)的時(shí)效性要小于摘要后端物料的更新時(shí)間,設(shè)置0.8倍的過(guò)期時(shí)間。寫(xiě)cache時(shí)將數(shù)據(jù)更新的時(shí)間戳一起緩存下來(lái),讀cache時(shí)計(jì)算當(dāng)前時(shí)間與時(shí)間戳的差值是否超過(guò)過(guò)期時(shí)間,如果過(guò)期清空緩存數(shù)據(jù)。
如何防止大量緩存數(shù)據(jù)一起失效?
問(wèn)題:并發(fā)讀寫(xiě)的LruCache使用鎖保護(hù),單機(jī)qs過(guò)高時(shí)鎖競(jìng)爭(zhēng)嚴(yán)重,很多時(shí)間消耗在鎖等待上,導(dǎo)致耗時(shí)增長(zhǎng)。
-
版本二
Cache分片,引入key的哈希函數(shù),將數(shù)據(jù)分散到不同分片上,減小臨界區(qū),降低鎖的競(jìng)爭(zhēng)。分片數(shù)可以與線程數(shù)保持一致。 -
版本三
讀cache時(shí)使用零拷貝機(jī)制,對(duì)緩存數(shù)據(jù)增加原子變量的引用計(jì)數(shù),每次獲取數(shù)據(jù)時(shí)引用計(jì)數(shù)+1,釋放數(shù)據(jù)時(shí)-1,計(jì)數(shù)為0且達(dá)到過(guò)期時(shí)間時(shí)從cache中清除,防止內(nèi)存泄漏。