golang实现redis
cheems~
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
Golang实现redis系列-(4)实现跳表容器
实现跳表容器跳表sortedset代码border.goskiplist.gosortedset.go 跳表 golang数据结构篇之跳表 关于跳表先吃透inset代码即可 sortedset redis中的sortedset的类型就是跳表,其中的element有member和score,在跳表的基础上对其封装命令对应的api即可 代码 border.go package sortedset import ( "errors" "strconv" ) const ( negativeInf int原创 2021-12-19 17:23:25 · 438 阅读 · 0 评论 -
Golang实现redis系列-(3)封装RESP协议
封装RESP协议 RESP代码perser.go(核心)reply.goperser_test.gocustom.go RESP 具体RESP协议不再展开,网上很多,这里给出核心代码与流程简图 /* 简单字符串:以"+" 开始【+OK\r\n】 (Simple String) 错误: 以"-" 开始【-ERR Invalid Syntax\r\n】 (Error) 整数: 以":" 开始【:1\r\n】 (Int) 字符串: 以 $ 开始【$3\r\nSET\r\n】(Bulk St原创 2021-12-17 00:16:36 · 1034 阅读 · 0 评论 -
Golang实现redis系列-(2)基础的TCP
基础的TCP思路代码 思路 redis服务器是tcp连接,这里我们先写一个基础的TCP服务器,而redis的hanler具体实现今后再写,这里仅实现了监听信号关闭服务,以及优雅的关闭(清理已经有的连接) 至于为什么只写了一个handler.Close(),是因为设计打算把所有的conn放在一个map里面,handler.Close()遍历map关闭所有连接 测试单元只是简单的写写,本篇博文重点是基础的TCP以及优雅的关闭 代码 package TCP import ( "Gotosp/pkg/log"原创 2021-12-03 20:42:03 · 3125 阅读 · 0 评论 -
Golang实现redis系列-(1)日志组件的封装
golang定制化日志日志滚动前言功能代码 日志滚动 前言 虽然zap+Lumberjack可以实现日志切割与归档,但是在项目中用不到太多(越简单越好),此时去学习两个库还不如自己封装一层go内置的log包,以后有了新需求再加或者再重构 功能 需求: 要求每日日志存在xxxx/xx/xx的文件夹中 日志文件名为filename_n.log 日志文件的大小有要求 代码 package log import ( "fmt" "io" "log" "os" "strconv" "sync" "原创 2021-12-02 23:20:21 · 763 阅读 · 0 评论