優化 快取分頁和版本號

2021-08-15 06:18:39 字數 2800 閱讀 3740

當服務端返回給客戶端的資料量比較大,而且大部份資料不經常修改。那麼可以採取客戶端快取和版本號機制。

例如:遊戲中,讀取道具配置(指令碼熱更方式除外,有些配置或資料是不能熱更的)。配置不存在客戶端,而是通過呼叫介面,返回給客戶端的方式。剛開始時,可能配置表中只有五十個道具,隨著時間的變化,道具資料越來越多。返回的資料也會越來越多。假如最後增加到五百個,那麼資料量會非常非常大。一次性返回五百個道具,可能資料長都超過了網路buffer限制,那麼也傳送不過去。此時,可以採用快取分頁和版本號機制。

解決方法:每次最多返一百條(分頁),每次請求帶道具版本號過來(版本號),資料(快取

)在客戶端。

版本號,是每條記錄加乙個版本號version ,這個版本號的目的是,當資料修改時,

version加1(

手動配置修改

),或者修改時間

(程式修改建議用修改時間,每次更新時就不用考慮以前的

version

是多少)。

如:資料格式為:

itemid:

目的:如果客戶端給出的版本號和服務端現有的版本號不同,說明修改過,則返回道具的所有資訊,否則,只返回版本號和狀態。(這裡對於不常修改的資料,能減少不少流量)

分頁,即預計資料量非常大時,可以對資料做分頁請求,如:預計資料量非常大,可能幾百條,上千條,那麼可以分頁請求,每次請求一百條,服務端會告訴客戶端最大的分頁數。如:總條數810條,每次

100條,會返回分頁數

9。客戶端從

1開始請求到

9頁為止。

終於到重點的時候了,結合例項說說,快取,分頁,版本號怎麼用。

假如,乙個配置,資料量一開始不大,後面會增加到幾百上千條,可能會修改或刪除配置。

配置表如下:

item_id

道具唯一id

item_name

道具名item_icon

圖示......

很多,省略

version

版本號這個是額外加的版本號,每次修改時,會修改版本號

介面定義:

請求引數

item_versions

乙個map,

格式定義為:

返回結果

code

0成功,

其他失敗

msg錯誤碼item_infos

道具資訊

item_infos中單個

item_info

的定義

正常沒版本號的情況下,返回

item_id

道具唯一id

item_name

道具名item_icon

圖示......

很多,省略

加了版本號的優化

item_id

道具唯一id

update_type

0不變1新增

2修改3刪除

version

版本號(如果不變或刪除是不會有下面的內容

)item_name

道具名item_icon

圖示......

很多,省略

好啦,說說怎麼用。

第一次呼叫,客戶端傳過來的item_verions為空,則會一次性載入所有的配置。(只慢第一次)

每次呼叫後,客戶端都會把資料快取在客戶端本地,只更update_type為1和

2,刪除3

以後呼叫,客戶端都會把快取的配置的item_id和

version

傳過來。服務端跟據客戶端傳過來的

version

和服務端現有的配置判斷,

1. 找不到item_id,表刪除

,update_type = 3           

(無item_info)

2. 找到了,版本號相等,表未修改,

update_type=0   

(無item_info)

3. 找到了,不相等,表修改過, upadte_type = 1      (有

item_info)

4. 配置中有,但玩家傳過來的

item_versions

沒有,表新增

, update_type=2 (

有item_info)

優點:

1. 除第一次外,以後每次請求時,都只會返回修改過和新加的item_info的全部資訊,對修改不頻繁的配置,會非常節省流量,同時資料量小,速度也會快。

2. 客戶端把資料快取在本地,每次啟動應用,會先載入本地配置到記憶體,本地快取速度》網路請求,即使請求服務端慢或網路中斷,也不會影響功能的使用,體驗效果比較好。

缺點:

1. 配置中要加version欄位,每次修改時,要修改配置中的

version

2. 請求介面中要傳,item_versions陣列

3. 返回介面中要新增update_type, 邏輯會複雜一些

注:這裡的例子說的配置,但可用於任何類似的場景,如:玩家好友等涉及資料量大,但有一定限度,又不給常更改的資訊中。

分頁,**都給常用的優化。只要涉及到資料量不固定,非常大的資料量時,都要分頁。比如部落格,可能幾千條,幾萬條記錄,數量是不確定的。

分頁方法有很多,簡述下分頁兩種方法。

1. 算出總頁數給客戶端,讓客戶端自已決定請求哪個分頁的資料。

當然,分頁一般都是結合快取來共同合作的。邊請求資料,邊快取到客戶端本地。而且這些記錄通常都是不會改變的記錄。

second60

20180131

如何檢視Linux版本號 核心版本號和發行版本號

檢視核心版本號的方法是 開啟乙個終端,輸入命令uname r 比如ubuntu9.10的核心是linux 2.6.31 centos 5.4的核心是linux2.6.18 檢視發行版本號的方法是 用命令找到 etc目錄下的issue檔案或release檔案。ls etc issue 或 ls etc...

如何檢視Linux版本號 核心版本號和發行版本號

首先,要分清核心版本號和發行版本號的區別。因為所有linux都是使用kernel.org上來的核心來作為發行版的基礎的,所以核心版本號的高低大致能體現該linux版本的新舊。而發行版本的版本號完全是各發行商自己定義的,不能用來和其它發行版本的版本號進行比較,比如suse的10.0不能和red hat...

如何檢視Linux版本號 核心版本號和發行版本號

檢視核心版本號的方法是 開啟乙個終端,輸入命令uname r 比如ubuntu9.10的核心是linux 2.6.31 centos 5.4的核心是linux2.6.18 檢視發行版本號的方法是 用命令找到 etc目錄下的issue檔案或release檔案。ls etc issue 或 ls etc...