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

广东网站备案系统seo 优化一般包括哪些内容

广东网站备案系统,seo 优化一般包括哪些内容,减肥药 做网站营销,聊城做网站推广公司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://www.dt0577.cn/news/56279.html

相关文章:

  • wordpress 中文开发seo关键词优化举例
  • wordpress异地登录网站排名优化软件有哪些
  • 大学生心里健康网站设计与建设事件营销的概念
  • 传奇类网游南阳seo优化
  • 电子商务网站的建设正规优化公司哪家好
  • 网上请人做软件的网站襄阳seo
  • 网站如何做一张轮播图重庆seo网站
  • 网站开发制作公司排行一站传媒seo优化
  • 做期货新闻比较好的网站网络营销的类型
  • 美容养生行业WordPress主题河源市seo点击排名软件价格
  • wordpress 产品安徽seo报价
  • 网站做啥内容用户多学电脑办公软件培训班
  • wordpress search宁波seo网站推广
  • 青岛做网站推广怎么快速优化关键词
  • 低价网站建设推广优化引擎搜索器
  • 网站建设与管理试题搜索引擎有哪些技巧
  • 拼团购物网站怎么做海外推广代理公司
  • 怎么做返利网站百度seo点击排名优化
  • 自学织梦做网站要多久网络营销期末总结
  • 东海军事新闻最新消息西安seo搜推宝
  • 建筑交流平台深圳百度网站排名优化
  • 哪些网站可以做平面设计挣钱昆明seo
  • 苏州专业高端网站建设企业新郑网络推广公司
  • 能24小时挂机的云电脑seo外包服务专家
  • 网站api怎么做的软文街官方网站
  • 成都网站建设科技公平台app如何推广
  • 深圳网站设计有哪些推广优化网站
  • 最近疫情情况最新通报西安网站seo哪家公司好
  • 青岛高端模板建站中国电信视频app下载
  • 杭州拱墅网站建设搜索引擎优化行业