golang實現簡單的redis服務

    • golang 手搓redis服務器
      • 倉庫地址:
      • 實現思路:

golang 手搓redis服務器

倉庫地址:

倉庫: https://github.com/dengjiayue/my-redis.git

實現思路:

● 協議: tcp通信
● 數據包: 長度(4byte)+方法(1byte)+數據json
● 數據處理: 單線程map讀寫
○ 依次處理待處理隊列的請求(chan)數據,處理并返回
■ 隊列大小: Max指定
■ 構建請求處理池: 不需要反復創建chan

流程

性能壓測:

package srcimport ("fmt""testing""time"
)// 壓測my redis
func BenchmarkMyRedisWrite(b *testing.B) {c := NewClient("localhost:8080")go c.HandleResp()defer c.Close()//開始計時b.StartTimer()for i := 0; i < b.N; i++ {c.Set("name", "zhangsan")}// BenchmarkMyRedis-8   	   28090	     40598 ns/op	     642 B/op	      14 allocs/op
}// 壓測my redis
func BenchmarkMyRedisRead(b *testing.B) {c := NewClient("localhost:8080")go c.HandleResp()defer c.Close()//開始計時b.StartTimer()for i := 0; i < b.N; i++ {c.Get("name")}// BenchmarkMyRedisRead-8             27771             44423 ns/op             588
}// 并發壓測(寫)
func BenchmarkMyRedisConcurrencyWrite(b *testing.B) {c := NewClient("localhost:8080")go c.HandleResp()defer c.Close()//開始計時b.StartTimer()b.RunParallel(func(pb *testing.PB) {for pb.Next() {c.Set("name", "zhangsan")}})// BenchmarkMyRedisConcurrencyWrite-8   	   90667	     12439 ns/op	     612 B/op	      14 allocs/op
}// 并發壓測(讀)
func BenchmarkMyRedisConcurrencyRead(b *testing.B) {c := NewClient("localhost:8080")go c.HandleResp()defer c.Close()//開始計時b.StartTimer()b.RunParallel(func(pb *testing.PB) {for pb.Next() {c.Get("name")}})// BenchmarkMyRedisConcurrencyRead-8   	   89955	     12198 ns/op	     512 B/op	      15 allocs/op
}
  • 單tcp連接可以達到9w左右的讀寫的QPS

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62245.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

智慧銀行反欺詐大數據管控平臺方案(八)

智慧銀行反欺詐大數據管控平臺的核心理念&#xff0c;在于通過整合先進的大數據技術、算法模型和人工智能技術&#xff0c;構建一個全面、智能、動態的反欺詐管理框架&#xff0c;以實現對金融交易的全方位監控、欺詐行為的精準識別和高效處理。這一理念強調數據驅動決策&#…

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼

3D 生成重建019-LERF用文本在Nerf中開啟上帝之眼 文章目錄 0 論文工作1 論文方法2 實驗結果 0 論文工作 人類利用自然語言描述物理世界&#xff0c;根據各種特性&#xff08;視覺外觀、語義、抽象關聯&#xff09;尋找具體的3D位置。在這項工作中&#xff0c;作者提出了語言嵌…

如何選擇合適的期刊投稿?從課題組經驗到在線工具的使用全解析

~~~本文是作者個人的經驗分享&#xff0c;建立在導師讓自己選刊的情況下~~~ 投稿選刊是科研過程中至關重要的一步&#xff0c;選刊過程可能讓許多初投稿的研究者感到迷茫和困惑&#xff1a;期刊那么多&#xff0c;如何找到最合適的&#xff1f; 本文將從多個角度介紹如何選擇投…

024、Docker與SSH在分布式系統中的實踐指南

1. Docker SSH配置最佳實踐 Docker容器通常不需要SSH服務來運行&#xff0c;因為它們設計為輕量級、無狀態的&#xff0c;并且通常通過Docker命令行界面與宿主機進行交互。但是&#xff0c;在某些情況下&#xff0c;您可能需要通過SSH訪問Docker容器進行調試、維護或其他操作。…

【kafka】消息隊列的認識,Kafka與RabbitMQ的簡單對比

什么是消息隊列&#xff1f; 消息隊列&#xff08;Message Queue&#xff0c;簡稱 MQ&#xff09;是一個在不同應用程序、系統或服務之間傳遞數據的機制。 它允許系統間異步地交換信息&#xff0c;而無需直接交互&#xff0c;確保消息的可靠傳輸。 想象一下&#xff0c;你正在…

.NET MAUI與.NET for Android/IOS的關系

2024年11月13日微軟發布了.Net9.0,我打算體驗一下。安裝好.Net9.0 SDK后發現Visual Studio識別不到9.0&#xff0c;但是通過命令行dotnet --info查看是正常的&#xff0c;后面看到了VS有版本可以升級&#xff0c;把VS升級到17.12.0就可以了。更新完打開以后看到如下界面 這里…

SqlDataAdapter

SqlDataAdapter 是 .NET Framework 和 .NET Core 中提供的一個數據適配器類&#xff0c;屬于 System.Data.SqlClient 命名空間&#xff08;或在 .NET 6 中屬于 Microsoft.Data.SqlClient 命名空間&#xff09;。它的作用是充當數據源&#xff08;如 SQL Server 數據庫&#xff…

【vivado】時序報告--best時序和worst時序

利用vivado進行開發時&#xff0c;生成best時序報告和worst時序報告。 best時序報告 slow選擇min_max&#xff0c;fast選擇none。 worst時序報告 fast選擇min_max&#xff0c;slow選擇none。

FastAPI 響應狀態碼:管理和自定義 HTTP Status Code

FastAPI 響應狀態碼&#xff1a;管理和自定義 HTTP Status Code 本文介紹了如何在 FastAPI 中聲明、使用和修改 HTTP 狀態碼&#xff0c;涵蓋了常見的 HTTP 狀態碼分類&#xff0c;如信息響應&#xff08;1xx&#xff09;、成功狀態&#xff08;2xx&#xff09;、客戶端錯誤&a…

力扣題庫-擲骰子模擬詳細解析

題目如下&#xff1a; 有一個骰子模擬器會每次投擲的時候生成一個 1 到 6 的隨機數。 不過我們在使用它時有個約束&#xff0c;就是使得投擲骰子時&#xff0c;連續 擲出數字 i 的次數不能超過 rollMax[i]&#xff08;i 從 1 開始編號&#xff09;。 現在&#xff0c;給你一…

深入淺出:PHP中的數據類型全解析

文章目錄 引言理解數據類型標量類型整數 (integer)浮點數 (float)布爾值 (boolean)字符串 (string) 復合類型數組 (array)對象 (object)資源 (resource)NULL 特殊類型Callable強制類型轉換 實戰案例總結與展望參考資料 引言 在編程的世界里&#xff0c;數據類型是構建任何應用…

當linux可執行文件缺少或者不兼容so庫時候,如何查看版本以及缺少那些庫

解決方法&#xff1a; ldd 命令來驗證程序是否加載了正確的庫&#xff1a; 如檢查linear_elasticity可執行文件缺少的庫&#xff0c;用下面命令&#xff1a; ldd linear_elasticity 可以發現下面not found就是缺少的庫&#xff0c;還有對應的庫的位置已經版本 $ ldd lin…

第P1周:Pytorch實現mnist手寫數字識別

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 目標 1. 實現pytorch環境配置 2. 實現mnist手寫數字識別 3. 自己寫幾個數字識別試試具體實現 &#xff08;一&#xff09;環境 語言環境&#xff1a;Python…

Seq2Seq模型的發展歷史;深層RNN結構為什么出現梯度消失/爆炸問題,Transformer為什么不會;Seq2Seq模型存在問題

目錄 Seq2Seq模型的發展歷史 改進不足的地方 深層RNN結構為什么出現梯度消失/爆炸問題,Transformer為什么不會 深層RNN結構為什么出現梯度消失/爆炸問題: Transformer為什么不會出現梯度消失/爆炸問題: Seq2Seq模型存在問題 T5模型介紹 Seq2Seq模型的發展歷史 序列到…

網絡安全技術詳解:虛擬專用網絡(VPN) 安全信息與事件管理(SIEM)

虛擬專用網絡&#xff08;VPN&#xff09;詳細介紹 虛擬專用網絡&#xff08;VPN&#xff09;通過在公共網絡上創建加密連接來保護數據傳輸的安全性和隱私性。 工作原理 VPN的工作原理涉及建立安全隧道和數據加密&#xff1a; 隧道協議&#xff1a;使用協議如PPTP、L2TP/IP…

Hive 窗口函數與分析函數深度解析:開啟大數據分析的新維度

Hive 窗口函數與分析函數深度解析&#xff1a;開啟大數據分析的新維度 在當今大數據蓬勃發展的時代&#xff0c;Hive 作為一款強大的數據倉庫工具&#xff0c;其窗口函數和分析函數猶如一把把精巧的手術刀&#xff0c;助力數據分析師們精準地剖析海量數據&#xff0c;挖掘出深…

SCAU期末筆記 - 數據庫系統概念

我校使用Database System Concepts&#xff0c;9-12章不考所以跳過&#xff0c;因為課都逃了所以復習很倉促&#xff0c;只準備過一下每一章最后的概念辨析&#xff0c;我也不知道有沒有用 第1章 引言 數據庫管理系統&#xff08;DBMS&#xff09; 由一個互相關聯的數據的集合…

Android 12系統源碼_窗口管理(九)深淺主題切換流程源碼分析

前言 上一篇我們簡單介紹了應用的窗口屬性WindowConfiguration這個類&#xff0c;該類存儲了當前窗口的顯示區域、屏幕的旋轉方向、窗口模式等參數&#xff0c;當設備屏幕發生旋轉的時候就是通過該類將具體的旋轉數據傳遞給應用的、而應用在加載資源文件的時候也會結合該類的A…

河南省的教育部科技查新工作站有哪些?

鄭州大學圖書館&#xff08;Z12&#xff09;&#xff1a;2007年1月被批準設立“教育部綜合類科技查新工作站”&#xff0c;同年12月被河南省科技廳認定為河南省省級科技查新機構。主要面向河南省的高校、科研機構、企業提供科技查新、查收查引等服務。 河南大學圖書館&#xf…

Leetcode經典題6--買賣股票的最佳時機

買賣股票的最佳時機 題目描述&#xff1a; 給定一個數組 prices &#xff0c;它的第 i 個元素 prices[i] 表示一支給定股票第 i 天的價格。 你只能選擇 某一天 買入這只股票&#xff0c;并選擇在 未來的某一個不同的日子 賣出該股票。設計一個算法來計算你所能獲取的最大利潤。…