對於protobuf,比較容易出錯的地方是repeated型別。
有這麼幾個特點:
1. 新增元素時,對於message的repreated型別那個,新增的方式是add_mutual,這樣在google::空間相當於new出了一塊新的空間,返回值是新空間的位址,利用指標修改相應的資料。
2. 刪除元素時,比較特別,就在於刪除時要保證google::空間的連續,所以刪除時候,
a.通行的刪除規則,是將要刪除的元素和最後乙個元素交換,然後刪除最後乙個元素。
b. 如果要保持元素的順序。利用鍊錶刪除的做法,將要刪除元素後邊的元素都哦整體往前移動,這時候的處理不能用memcpy,因為無法保證記憶體的連續,只能使用迴圈逐個元素的移動。
3. 查詢元素時,只能使用遍歷。因為repeated元素的儲存方式,類似於std::vector,可以理解為一塊連續的空間,裡邊儲存的是每個元素的位址。剛開始使用的時候會懷疑這種o(n)複雜度的查詢方式,會不會是效能的瓶頸,但是要知道這是在記憶體中的操作,遊戲伺服器的瓶頸最常見的就是io。但是需要進一步的測試資料來驗證。
其他方面倒是沒有使用起來太奇怪的,無非是熟練度,以及是否能將業務與這種做法結合起來。
redis在專案中的使用
1.各種計數,商品維度計數和使用者維度計數 2 6 2.儲存社交關係 譬如將使用者的好友 粉絲 關注,可以存在乙個sorted set中,score可以是timestamp,這樣求兩個人的共同好友的操作,可能就只需要用求交集命令即可。redis zadd user 100000 follow 613...
icon在專案中的使用
將icons資料夾放在src目錄下方 svg資料夾裡面都是一些svg檔案 index.js裡面則是配備的前端工程化js檔案 import vue from vue import svgicon from c svgicon vue.component svg icon svgicon const r...
redis在專案中的使用
快取的使用就是為了提高效率,避免重複的io操作浪費效率。查詢時使用,如selectbyid value 快取區名稱,key 在快取區內對應的鍵,表示查詢快取區 user 中key為引數id的快取,如果沒有則查詢資料庫,並把資料放入快取中 注意這裡快取的資料是指方法執行完成返回的結果 以後直接從緩訪問...