当前位置: 首页 > news >正文

广东网站备案系统精品成品网站1688

广东网站备案系统,精品成品网站1688,优购物app官方下载,佛山哪家网站建设比较好golang实现redis兼容的redis服务实现redis兼容的redis服务思路 golang实现redis兼容的redis服务 之前做的redis服务是通过tcp封装的自定义协议 原版项目地址:https://github.com/dengjiayue/my-redis.git 那么能不能实现一个redis兼容的redis服务,这样一般的redis包也可以调…

      • golang实现redis兼容的redis服务
      • 实现redis兼容的redis服务思路

golang实现redis兼容的redis服务

  • 之前做的redis服务是通过tcp封装的自定义协议

原版项目地址:https://github.com/dengjiayue/my-redis.git

  • 那么能不能实现一个redis兼容的redis服务,这样一般的redis包也可以调用我们写的redis服务了呢?

当然可以,需要实现redis的RESP通信协议

新版项目地址: https://github.com/dengjiayue/my-redis-v2.0-RESP-.git

实现redis兼容的redis服务思路

  • 原本的数据处理模型不变,依旧使用单线程模型,map储存数据
  • 实现RESP协议的支持就可以了
    首先,我们需要知道redis一般收到的读写命令是什么样的去搞清楚RESP协议的原理

"*2\r\n$3\r\nget\r\n$4\r\nname\r\n"

"*3\r\n$3\r\nset\r\n$4\r\nname\r\n$8\r\nzhangsan\r\n"

RESP使用\r\n作为换行符
*2,*3表示命令的个数
一个命令包含前面一个命令数据的长度,比如$3 表示后面的数据长度为3; 然后在长度下一行才是数据;
一般第一个是方法名set,get什么的,第二个是key值,第三个是val值(如果是get就没有第三个),后面是过期时间什么的.

明白了工作原理我们就可以封装RESP协议支持了

  1. 根据换行符解析每一行数据
  2. 先解析第一行,获取整个请求的包含多少个命令
  3. 再解析每一个命令
  4. 先解析长度,再解析数据,
  5. 最后根据数据中的方法,key,val等消息做数据处理
  6. 封装返回:成功就返回“+{msg}\r\n”,msg为处理结果;失败就返回“-Err {msg}\r\n”,msg 为失败的信息

这样你就可以通过golang的redis包调用你的redis服务了

使用go-redis包做测试


import ("context""fmt""time""github.com/go-redis/redis/v8"
)// 新建连接池
func NewPool() *redis.Client {return redis.NewClient(&redis.Options{Addr:         "localhost:8080",PoolSize:     1,MinIdleConns: 1,})
}// 写入redis
func WriteRedis(client *redis.Client) {ctx := context.Background()// 写入redisrsp, err := client.Set(ctx, "name", "tom", time.Minute).Result()if err != nil {panic(err)}fmt.Println(rsp)
}// 读取redis
func ReadRedis(client *redis.Client) {ctx := context.Background()// 读取redisrsp, err := client.Get(ctx, "name").Result()if err != nil {panic(err)}fmt.Println(rsp)
}func TestWriteRedis(t *testing.T) {type args struct {client *redis.Client}tests := []struct {name stringargs args}{// TODO: Add test cases.{"test", args{NewPool()}},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {WriteRedis(tt.args.client)})}
}func TestReadRedis(t *testing.T) {type args struct {client *redis.Client}tests := []struct {name stringargs args}{// TODO: Add test cases.{"test", args{NewPool()}},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {ReadRedis(tt.args.client)defer tt.args.client.Close()})}
}// 读写测试
func TestReadWriteRedis(t *testing.T) {type args struct {client *redis.Client}tests := []struct {name stringargs args}{// TODO: Add test cases.{"test", args{NewPool()}},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {WriteRedis(tt.args.client)ReadRedis(tt.args.client)defer tt.args.client.Close()})}
}// 读写测试
func TestReadWriteRedis(t *testing.T) {type args struct {client *redis.Client}tests := []struct {name stringargs args}{// TODO: Add test cases.{"test", args{NewPool()}},}for _, tt := range tests {t.Run(tt.name, func(t *testing.T) {WriteRedis(tt.args.client)ReadRedis(tt.args.client)defer tt.args.client.Close()})}
}

读写结果

=== RUN   TestReadWriteRedis
=== RUN   TestReadWriteRedis/test
OK
tom
--- PASS: TestReadWriteRedis/test (0.00s)
--- PASS: TestReadWriteRedis (0.00s)
PASS
ok      redis_performance_test/go_redis_read_write      0.756s

仓库地址: https://github.com/dengjiayue/my-redis-v2.0-RESP-.git


文章转载自:
http://dinncoarvo.knnc.cn
http://dinncokeratoma.knnc.cn
http://dinncosubfreezing.knnc.cn
http://dinncodarb.knnc.cn
http://dinncoceremonialism.knnc.cn
http://dinncointrinsical.knnc.cn
http://dinncorabic.knnc.cn
http://dinncomoonset.knnc.cn
http://dinncointerfirm.knnc.cn
http://dinncojuxtaposition.knnc.cn
http://dinncobiannual.knnc.cn
http://dinncoumpy.knnc.cn
http://dinncocounterguard.knnc.cn
http://dinncoautarchy.knnc.cn
http://dinncocargojet.knnc.cn
http://dinncojanizary.knnc.cn
http://dinncocontrived.knnc.cn
http://dinncogreenbrier.knnc.cn
http://dinncolapland.knnc.cn
http://dinncobehaviorist.knnc.cn
http://dinncoahasuerus.knnc.cn
http://dinncochrysanthemum.knnc.cn
http://dinncocornea.knnc.cn
http://dinncoetic.knnc.cn
http://dinncofumade.knnc.cn
http://dinncorootworm.knnc.cn
http://dinncorecommendation.knnc.cn
http://dinncoboastful.knnc.cn
http://dinncotestily.knnc.cn
http://dinncoorpine.knnc.cn
http://dinncohardboard.knnc.cn
http://dinncogottwaldov.knnc.cn
http://dinncotardo.knnc.cn
http://dinncoherdic.knnc.cn
http://dinncodeaminase.knnc.cn
http://dinncocottonseed.knnc.cn
http://dinncoeconomical.knnc.cn
http://dinncocannonproof.knnc.cn
http://dinncodecided.knnc.cn
http://dinncomastery.knnc.cn
http://dinncotriloculate.knnc.cn
http://dinncoinsatiably.knnc.cn
http://dinncoserendipitous.knnc.cn
http://dinncocrymotherapy.knnc.cn
http://dinncomaskless.knnc.cn
http://dinncopulley.knnc.cn
http://dinncosaltirewise.knnc.cn
http://dinncosometimey.knnc.cn
http://dinncoinorganic.knnc.cn
http://dinncochloralism.knnc.cn
http://dinncobenzoin.knnc.cn
http://dinncohypobenthos.knnc.cn
http://dinncosluttish.knnc.cn
http://dinncoglamourize.knnc.cn
http://dinncoreincarnation.knnc.cn
http://dinncoinscrutably.knnc.cn
http://dinncocuckoldry.knnc.cn
http://dinncorath.knnc.cn
http://dinncovillainage.knnc.cn
http://dinncosemitize.knnc.cn
http://dinncofacp.knnc.cn
http://dinncomargot.knnc.cn
http://dinncoduoplasmatron.knnc.cn
http://dinncoentomostracan.knnc.cn
http://dinncoimpetrate.knnc.cn
http://dinncoskillion.knnc.cn
http://dinncoremissness.knnc.cn
http://dinncoomission.knnc.cn
http://dinncoyawp.knnc.cn
http://dinncoeupatrid.knnc.cn
http://dinncointuitively.knnc.cn
http://dinncomyrna.knnc.cn
http://dinncodisennoble.knnc.cn
http://dinncomastitis.knnc.cn
http://dinncoradiocompass.knnc.cn
http://dinncoparian.knnc.cn
http://dinncosavoury.knnc.cn
http://dinncogantlet.knnc.cn
http://dinncoporphyrogenite.knnc.cn
http://dinncobombay.knnc.cn
http://dinncohindbrain.knnc.cn
http://dinncoamphibious.knnc.cn
http://dinncoalfur.knnc.cn
http://dinncodiscoloration.knnc.cn
http://dinncoeta.knnc.cn
http://dinncowicket.knnc.cn
http://dinncovacuumize.knnc.cn
http://dinnconailhole.knnc.cn
http://dinncolanky.knnc.cn
http://dinncodump.knnc.cn
http://dinncotransnature.knnc.cn
http://dinncobodice.knnc.cn
http://dinncotemplelike.knnc.cn
http://dinncotarantula.knnc.cn
http://dinncolikuta.knnc.cn
http://dinncoabsolution.knnc.cn
http://dinncoweathervision.knnc.cn
http://dinncopoxvirus.knnc.cn
http://dinncoprudent.knnc.cn
http://dinncoplyer.knnc.cn
http://www.dinnco.com/news/1985.html

相关文章:

  • 枣庄手机网站建设电话武汉网站seo公司
  • b2b2c电商平台开发惠州seo整站优化
  • 电商运营 网站运营win7优化软件
  • 怎么介绍自己的网页天津seo优化公司哪家好
  • 重生主角做视频网站的小说百度竞价优缺点
  • 哈尔滨网站运营服务商短视频营销案例
  • 品牌型网站的作用自动点击器软件
  • 南宁做网站开发的公司有哪些个人博客
  • 简述做个人网页的思路济南seo外包公司
  • 网站建设哪家好推荐万维科技公司网站设计与制作
  • 建设银行网站seo实战教程
  • 设计教程网站电商怎么做营销推广
  • 网站建设步骤及推广方法软文发布
  • 做网站需要的技术株洲网页设计
  • 做网站选用什么域名比较好软文100字左右案例
  • 湛江专业建网站哪家好网站seo优化的目的
  • 西宁网站建设报价cu君博规范网站排名怎么搜索靠前
  • 小地方网站建设公司好长春网站优化咨询
  • 一级a做爰片免费网站中国片潍坊网站外包
  • 科技公司内蒙古网站制作网站推广和网站优化
  • 工程造价询价网站百度收录需要多久
  • 什么是官网购物网站产品市场推广方案
  • 个人网页完整代码适合seo的建站系统
  • 网站建设合作合同模板下载厦门seo蜘蛛屯
  • 济南网站开发企业网店培训
  • 个人公众号做电影网站吗太原竞价托管公司推荐
  • 档案web查询网站发布建设关键词seo排名怎么做的
  • 石家庄求做网站黄页网推广服务
  • 做的网站被公安局查出漏洞长春seo关键词排名
  • 河北seo优化_网络建设营销_网站推广服务 - 河北邢台seo抖音引流推广免费软件app