原创 Nodejs: MemoryUsage()返回的rss,heapTotal,heapUsed,external的含義和區別

process.memoryUsage()返回當前進程的內存使用情況,但不包括子進程。子進程的內存使用情況需要在子進程中單獨調用process.memoryUsage()。 該函數返回4個參數,含義及差別如下: rss: (Residen

原创 Nginx日誌滾動腳本

 Nginx日誌滾動可分爲3步:  將access.log重命名成形如access_202006161113.log 通過kill命令向nginx的進程發送 -USR1信號,通知nginx重新創建access.log文件 刪除修改時間比指

原创 Go語言:谷歌go-redis模塊面向redis cluster集羣的客戶端的主要功能點及性能

版權所有,轉載請註明原文鏈接。 谷歌的[email protected]對redis cluster集羣提供了支持,這也是相對於redigo的一個重要優勢,後者目前還沒有提供集羣支持。[email protected]的主要功能點如下: 1.

原创 Go學習:獲取HTTP請求的協議/域名/瀏覽器版本/路徑URI

當請求由瀏覽器直接發起請求到服務器中間沒有經過代理轉發的話,則可以採用如下代碼獲取協議,域名等參數。如果經過了轉發則只能由代理服務如HA或者nginx把域名和協議寫在請求頭裏轉發到後端服務,然後通過讀取請求頭參數r.Header.Get(

原创 Go語言可輸出按分隔符分割格式(如CSV)日誌並按時間切分的日誌模塊bizlogger

bizlogger是一款可輸出CSV日誌並按時間切分的日誌模塊,分割符可定製。goroutine安全。日誌字符串拼接採用先計算總長度再一次性分配內存的方法來提升效率。按時間切分功能利用的是logrotator來實現的。 用法: pack

原创 Nodejs IPv6解析轉換成BigInteger整形數字

這裏只討論IPv6轉成整形,整形到IPv6請見《Nodejs: 整形數字轉IPv6》 IPv6的解析與轉換目前最方便的做法是使用第三方包ip-address將IPv6轉換成jsbn.BigInteger。經測試,在nodejs 4.6,8

原创 Nodejs: Buffer報錯argument must be an Array of Buffer or Uint8Array instances

最近項目有個需求需要在和第三方API接口進行交互時,在JSON字符串最前面加上16個字節的簽名字節,爲了簡化問題忽略JSON以及16個字節的具體取值。 錯誤代碼: buff = Buffer.from('abcd012', 'utf8'

原创 Go語言:引用私有包報錯“named files must all be in one directory”

"named files must all be in one directory" 這個報錯實際上是項目私有包(package)的文件組織與引用的問題。示例如下: $GOPATH/src/hd-backend/

原创 Go語言:md5計算方法的效率研究

 研究了一下Go的md5計算方法,目前來看,效率最高運行最快的寫法是調用md5.Sum()函數返回16字節checksum,然後把每個字節的高4位和低4位分別映射成16進制字符存到兩個字節裏,得到32字節,再轉成字符串。FastMD5較其

原创 Nodejs版本升級導致UTF8中文字符串的md5取值前後不一致的問題

Nodejs的版本從4.x升級到8.x的過程中遇到一個問題:含有中文的UTF8字符串的md5取值在升級前後不一致。研究了一下,發現Nodejs從6.x開始對crypto做了一個改進,直接支持UTF8二進制,不用單獨再處理中文了,“buf.

原创 Go語言:按照指定的一組權重隨機選擇一個數組元素(加權隨機索引)

加權隨機索引比較常用,例如HTTP代理服務器需要按照不同的權重把請求轉發給不同的後端服務器,又比如在web頁面的同一個位置需要按照一定的比例顯示不同的廣告圖片。 函數實現如下: package main import ( "fmt"

原创 Go語言:數字類型變量的內存字節數,取值範圍以及最大最小值的獲取方法

知道各種整形浮點型數字的取值範圍對於節約內存選擇合適的數字類型很有必要。另一方面,有時候需要如JAVA 的Integer.MAX_VALUE那樣獲取某種數字類型的最大(最小)取值,Golang把這些取值封裝在math包作爲常量供開發者調用

原创 Nodejs: 整形數字轉IPv6

這裏只討論整形數字到IPv6的轉換,由IPv6轉整形數字請見《Nodejs IPv6解析轉換成BigInteger整形數字》 IPv6的整形值已經超出nodejs的整形存儲範圍,所以這裏用第三方包“jsbn”來存儲。其轉換函數如下,這裏沒

原创 Go語言:整形數字字符串轉換爲IPv6地址字符串

IPv6對應的整形數字爲16個字節,只能用big.Int來存儲。而類似於“53174336847441874194254142093255507967”這種長度的數字可以由字符串來表示,如下代碼用於將數字字符串轉換爲對應的IPv6地址字符

原创 Go語言:判斷IP是否合法是IPv4還是IPv6

net.IP的ParseIP函數判斷IPv4/IPv6的依據就是是否出現".”或者":",因爲返回的net.IP都是16字節,而且IPv4前面加了::ffff所以根據返回的IP是不太好判斷輸入的原始字符串是IPv4還是IPv6。所以得自己