Redis訪問序列化與反序列化效能問題詳解

2022-09-25 02:12:06 字數 1606 閱讀 6109

我們在使用redis的時候經常會將物件序列化儲存到redis中,在取出的時候進行反序列化,如果物件過大在進行序列化和反序列化的時候www.cppcns.com會有一定效能問題。今天檢視了csredis原始碼發現在set和get的時候是支援byte型別,那麼問題來了如果我們將物件轉換成byte型別進行儲存是否會比序列化和反序列化操作快了?

list list = 程式設計客棧new list();

for (int i = 0; i < 1000; i++)

; list.add(user);

} stopwatch stopwatch = new stopwatch();

stopwatch.start(); // 開始監視**執行時間

//使用序列化

rds.hset("test2", "test2", list);

var list1 = rds.hget>("test2", "test2");

//使用byte方式

"test", "test1", obj程式設計客棧ecttobytes(list));

//var list2 = bytestoobject(rds.hget("test", "test1"));

stopwatch.stop(); // 停止監視

timespan timespan = stopwatch.elapsed; // 獲取當前例項測量得出的總時間

double hours = timespan.totalhours; // 總小時

double minutes = timespan.totalminutes; // 總分鐘

double seconds = timespan.totalseconds; // 總秒數

double milliseconds = timespan.totalmilliseconds;

console.writeline(+hours + " " + minutes + " " + seconds + " " + milliseconds);

cons程式設計客棧ole.readkey();

物件轉換成byte,和byte轉成物件公用方法。

///

/// 將乙個object物件序列化,返回乙個byte

///

/// 能序列化的物件

///

public static byte objecttobytes(object obj)

return buff;

} ///

/// 將乙個序列化後的byte陣列還原

///

///

///

public static object bytestoobject(byte bytes)

}注意點:兩種方式要分開執行!!!

序列化操作響應時間:

byte操作響應時間:

我們可以明顯看到byte速度要快於序列化操作,並且redis獲取值沒有問題

我們借助redis客戶端工具來看看redis裡面儲存的內容:

首先是序列化的內容

然後是byte的內容

這只是乙個簡單的測試,後續我還會結合專案實際情況進行測試。如果有寫的不對地方歡迎各位指出問題。

序列化和反序列化 C 序列化與反序列化。

序列化介紹 把物件用一種新的格式來表示。系列化只序列化資料。序列化不建議使用自動屬性 為什麼要序列化 將乙個複雜的物件轉換流,方便儲存與資訊交換。class program class person public int age 二進位制序列化 就是將物件變成流的過程,把物件變成byte class...

序列化與反序列化

把複雜的資料型別壓縮到乙個字串中 serialize 把變數和它們的值編碼成文字形式 unserialize 恢復原先變數 eg stooges array moe larry curly new serialize stooges print r new echo print r unserial...

序列化與反序列化

序列化是將物件處理為位元組流以儲存物件或傳輸到記憶體 資料庫或檔案。其主要目的是儲存物件的狀態,以便可以在需要時重新建立物件。相反的過程稱為反序列化。通過序列化,開發人員可以儲存物件的狀態,並在需要時重新建立該物件,從而提供物件的儲存以及資料交換。通過序列化,開發人員還可以執行類似如下的操作 通過 ...