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.mzph.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;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。…