當服務端返回給客戶端的資料量比較大,而且大部份資料不經常修改。那麼可以採取客戶端快取和版本號機制。
例如:遊戲中,讀取道具配置(指令碼熱更方式除外,有些配置或資料是不能熱更的)。配置不存在客戶端,而是通過呼叫介面,返回給客戶端的方式。剛開始時,可能配置表中只有五十個道具,隨著時間的變化,道具資料越來越多。返回的資料也會越來越多。假如最後增加到五百個,那麼資料量會非常非常大。一次性返回五百個道具,可能資料長都超過了網路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...