本文目錄一覽:
golang中crypto/hmac包
hmac包實現了U.S.Federal Infomation Processing Standards Publication 198規定的HMAC(加密哈希信息認證碼)。
HMAC是使用key標記信息的加密hash。接收者使用相同的key逆運算來認證hash。
出於安全目的,接收者應使用Equal函數比較認證碼:
這個包一共提供了兩個對外公開的函數:
func Equal(mac1, mac2 []byte) bool
比較兩個MAC是否相同,而不會泄露對比時間信息。(以規避時間側信道攻擊;指通過計算比較時花費的時間的長短來獲取密碼的信息,用於密碼破解)
func New(h func() hash.Hash, key []byte) hash.Hash
New函數返回一個採用hash.Hash作為底層hash接口、key作為密鑰的HMAC算法的hash接口。
【golang】海量數據去重-布隆過濾器
在做域名爆破中,遇到了把一個300G的子域名json文件進行去重,一開始是考慮使用字典進行去重,但是數據量大了,會造成內存泄露。看網上資料介紹了一種方案,就是使用布隆過濾器。
布隆過濾器是一種數據結構,概率型數據結構,特定是高效插入和查詢,可以用來告訴你「某一值一定不存在或者kennel存在」。
相比於傳統的map、set等數據結構,佔用空間更少,但其返回結果是概率型的,不確定。
布隆過濾器內部維護一個bitArray(位數組),開始所有數據為0,當一個元素過來時,能過多個哈希函數(hash1、hash2、hash3)計算不同的hash值,並通過hash值找到bitArray的下標,將裏面的值改為由0變為1。布隆過濾器有一個誤判率,誤判率越低,數組越長,所在空間越大,誤判率越高,數組越小,所佔空間越小。
這裡貼上一個技術大牛的博客地址,裏面對布隆過濾器用法以及在redis裏面處理緩存穿透問題的詳細介紹。
如何檢測內存泄露 golang
c, _ := listerner.Accept()
go c.run()
func (c *conn) run() {
go c.onWrite()
c.onRead()
}
func (c *conn) onRead() {
stat.AddConnCount(1)
//on something
stat.AddConnCount(-1)
//clear
//notify onWrite to quit
}
go 中 限制 goroutine 數量以及使用協程池
Golang 開發需要協程池嗎
goroutine 創建需要佔用一定量的內存,開一個goroutine 只需要少量的內存空間,幾KB,這也是golang能實現百萬長鏈的原因.
但在實際中,goroutine 需要正確的關閉,而不是無限創建後,造成goroutine 泄露,進而引發系統崩潰
網友實現的方案:
使用:
有些第三方庫實現了協程池,同樣也可以達到限制協程數量的目的,比如:
原創文章,作者:JXVA,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/133353.html