protobuf在專案中的使用

2021-08-27 18:28:08 字數 575 閱讀 5639

對於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的快取,如果沒有則查詢資料庫,並把資料放入快取中 注意這裡快取的資料是指方法執行完成返回的結果 以後直接從緩訪問...