總結 17 優化伺服器效能

2021-10-02 02:02:30 字數 2736 閱讀 1794

對caffeine的配置我們只要配置乙個快取的最大值和過期時間即可,這是我們在專案中需要用到的。

# caffeine

caffeine.posts.max-size=

15caffeine.posts.expire-seconds=

180

這是一篇對caffeine進行簡單但是詳細介紹的部落格

在我們的專案中我們主要使用loadingcache,是乙個同步快取會阻塞的介面。

宣告兩個分別表示帖子列表的快取和帖子總數的快取列表的loadingcache例項。

// 帖子列表的快取

private loadingcache

> postlistcache;

// 帖子總數的快取

private loadingcache

postrowscache;

我們先不例項化這兩個物件,先來看看怎麼在原來的方法中使用,當是查詢熱門帖子列表的時候,直接使用postlistcache.get()方法即可,該方法會得到該cache中的內容,如果過期或者沒有內容的話會呼叫其load()方法得到資料返回並同步快取。

public list

finddiscussposts

(int userid,

int offset,

int limit,

int ordermode)

logger.

debug

("load post list from db.");

selectdiscussposts

(userid,offset,limit,ordermode)

;}

接下來,我們就來初始化帖子列表的快取,我們可以在@postconstruct註解標註的init()方法中初始化。我們使用caffeine提供的newbuilder()方法來設定快取的最大容量和過期方式和時間,然後在build()中匿名例項化乙個cacheloader物件即可。在該方法中我們首先檢查key是否合法,合法的話就得到offset和limit,然後這裡我們使用二級快取的方式,caffeine->redis->db這樣的方式。

因此,當本地快取不存在的時候,我們先去redis里查,如果redis裡沒有就去資料庫里查到需要的資料,然後存入redis並設定過期時間,然後返回該資料即可,caffeine會將該資料作為快取進行同步。如果redis中有,首先檢視是否過期,如果過期了也是從資料庫裡查詢然後同步到redis和caffeine中,如果沒有過期就將redis中的資料作為結果返回。

redis對於過期資料的處理一般是惰性刪除,即過期之後不立刻刪除,等到下次讀/寫的時候才會將資料刪除,因此其實可以不用寫過期之後的處理,同沒有該key是一樣的,但是為了邏輯的完善還是寫上去了。

// 初始化帖子列表快取

postlistcache = caffeine.

newbuilder()

.maximumsize

(maxsize)

.expireafterwrite

(expireseconds, timeunit.seconds)

.build

(new

cacheloader

>()

string[

] params = key.

split

(":");

if(params == null || params.length !=2)

int offset = integer.

valueof

(params[0]

);int limit = integer.

valueof

(params[1]

);// 二級快取:redis -> mysql

string rediskey = rediskeyutil.

gethotpostlistkey

(offset,limit)

;// 如果redis中不存在就去資料庫里查,查到了就更新到redis中,然後返回作為本地快取的同步if(

!redistemplate.

haskey

(rediskey)

) redistemplate.

expire

(rediskey,

15,timeunit.seconds)

;return result;

}else

redistemplate.

expire

(rediskey,7*

60,timeunit.seconds)

;return result;

}else

return list;}}

}});

這樣就實現了對熱門帖子的二級快取,然後我們需要對快取的效能進行簡單的測試,這裡我們使用jmeter進行測試,我們使用120個執行緒組以隨機時間對不使用快取的熱門頁進行訪問,檢視其吞吐量,然後以同樣的條件訪問帶快取的熱門帖子進行對比吞吐量。

我們可以看到有快取的吞吐量有200+,而沒有快取的吞吐量只有14不到,吞吐量的差距是十分巨大的。

mysql效能優化 伺服器優化(筆記四)

伺服器的硬體效能直接決定著mysql資料庫的效能,硬體的效能瓶頸,直接決定mysql資料庫的執行速度和效率。需要從以下幾個方面考慮 1 配置較大的記憶體。足夠大的記憶體,是提高mysql資料庫效能的方法之一。記憶體的 io比硬碟快的多,可以增加系統的緩衝區容量,使資料在記憶體停留的時間更長,以減少磁...

優化伺服器設定 高效能MySQL

mysql有大量可以修改的引數 但不應該隨便去修改。通常只需要把基本的項配置正確 大部分情況下只有很少一些引數是真正重要的 應該將更多的時間花在schema的優化 索引,以及查詢設計上。在正確地配置了mysql的基本配置項之後,再花力氣去修改其它配置項的收益通常就比較小了。1.建立mysql配置檔案...

c 伺服器開發之效能優化

為什麼要寫這篇文章?聊技術的時候,談到記憶體問題 cpu問題 效率問題的時候,無疑是考量乙個工程師的實戰水平,作為c 開發工程師,沒有自己解決以上問題的專業手段,或許就是缺陷。我之所以寫這個文章,主要是為了記錄 分享我的辦法。我之前寫過記憶體洩漏的一篇文章 其實也是一種手段,如果為你所用,聊技術的時...