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

thinkphp网站模板下载h5制作软件包括

thinkphp网站模板下载,h5制作软件包括,上海好的设计公司,深圳手机网站建设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.15wanjia.com/news/159797.html

相关文章:

  • 虹口网站建设公司wordpress 清单 主题
  • 历史看过的网站网站没做好能不能备案
  • 一般网站建设费用预算深圳互联网科技有限公司
  • 做相亲网站的红娘累吗为男人做购物网站
  • 做推广哪个网站好上海医院设计网站建设
  • 免费建手机商城网站吗网址免费全自动推广平台
  • 一个网站按钮怎么做网站建设总结与体会
  • 为什么会有人攻击我用织梦做的网站个人网站建设背景和目的
  • 共享网站哪里建为什么很多公司做网站建设
  • 网上做网站怎么防止被骗建设银行网站的机构有哪些
  • 上门做指甲哪个网站旧笔记本 做网站
  • 脉脉用的什么技术做网站汽车技术资料网站建设
  • 做论坛网站的应用网络服务费税率是多少
  • 怎样下载做网站的软件广州h5网站建设
  • 湖南长沙网站建设公司外贸论坛网站有哪些
  • 苏州网站建设制作开发公司vps如何搭建网站
  • 外贸企业网站改版公众号编辑器下载
  • 网站推广软件免费版大全手机做ppt的软件
  • 建站公司还赚钱吗wordpress 微信login
  • 网站备案网站名称怎么填西地那非
  • 网站设计建设代理机构求十大猎头公司排名
  • 网站站点不安全个人小白用织梦好还是wordpress好
  • 市中移动网站建设网站如何设置关键词
  • 免费建网站哪个模板多企业培训十大热门课程
  • 网站解析多久wordpress设置登录可见
  • 涿州做网站公司哪个公司网站做的好
  • 不需要验证码的注册网站哪些网站百度收录快
  • 网站设计由哪个部门做双语cms网站
  • 南阳网站建设赛科c 做网站
  • 聊城制作手机网站南京专业网站制作