redcon, Redis兼容的服务器框架
2024-08-30 10:12:39
- 源代码名称:redcon
- 源代码网址:http://www.github.com/tidwall/redcon
- redcon源代码文档
redcon源代码下载
- Git URL:
复制代码
git://www.github.com/tidwall/redcon.git
- Git Clone代码到本地:
复制代码
git clone http://www.github.com/tidwall/redcon
- Subversion代码到本地:
复制代码
$ svn co --depth empty http://www.github.com/tidwall/redcon
Checked out revision 1.
$ cd repo
$ svn up trunk
快速Redis兼容服务器框架
Redcon是一个定制的Redis服务器框架,使用速度快,易于使用。 它为服务器提供高效的服务器前端和Tile38插件项目的原因。
特性
- 创建一个快速兼容的定制Redis兼容服务器
- 简单接口。一个函数
ListenAndServe
和两个Conn
&Command
- 支持流水线和telnet命令
- 使用Redis客户端,例如 redigo,Redis py,node_redis插件和jedis
- TLS支持
安装
复制代码
go get -u github.com/tidwall/redcon
示例
下面是一个完整的Redis克隆示例,它接受:
- 设置项值
- 获取密钥
- DEL键
- PING
- 退出
你可以从终端运行这里示例:
复制代码
go run example/clone.go
复制代码
package mainimport (
"log""strings""sync""github.com/tidwall/redcon")varaddr = ":6380"funcmain() {
varmu sync.RWMutexvaritems = make(map[string][]byte)
go log.Printf("started server at %s", addr)
err:= redcon.ListenAndServe(addr,
func(conn redcon.Conn, cmd redcon.Command) {
switch strings.ToLower(string(cmd.Args[0])) {
default:
conn.WriteError("ERR unknown command '" + string(cmd.Args[0]) + "'")
case"ping":
conn.WriteString("PONG")
case"quit":
conn.WriteString("OK")
conn.Close()
case"set":
iflen(cmd.Args)!= 3 {
conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")
return }
mu.Lock()
items[string(cmd.Args[1])] = cmd.Args[2]
mu.Unlock()
conn.WriteString("OK")
case"get":
iflen(cmd.Args)!= 2 {
conn.WriteError("ERR wrong number of arguments for '" + string(cmd.Args[0]) + "' command")
return }
mu.RLock()
val, ok:= items[string(cmd.Args[1])]
mu.RUnlock()
if!ok {
conn.WriteNull()
} else {
conn.WriteBulk(val)
}
case"del":
iflen(cmd.Args)!= 2 {
conn.WriteError("ERR wrong number of arguments for '"+string(cmd.Args[0])+"' command")return}
mu.Lock()_,ok:= items[string(cmd.Args[1])]delete(items,string(cmd.Args[1]))
mu.Unlock()if!ok {
conn.WriteInt(0)}else{
conn.WriteInt(1)}}},func(conn redcon.Conn)bool{// use this function to accept or deny the connection.// log.Printf("accept: %s", conn.RemoteAddr())returntrue },func(conn redcon.Conn, err error){// this is called when the connection has been closed// log.Printf("closed: %s, err: %v", conn.RemoteAddr(), err) },)if err!=nil{
log.Fatal(err)}}
TLS示例
Redcon通过 ListenAndServeTLS
函数提供完整的TLS支持。
同样的示例也提供了通过TLS服务 Redcon。
复制代码
go run example/tls/clone.go
基准测试
Redis: 单个线程,无磁盘持久性。
复制代码
$ redis-server --port 6379 --appendonly no
复制代码
redis-benchmark -p 6379 -t set,get -n 10000000 -q -P 512 -c 512
SET: 941265.12 requests per second
GET: 1189909.50 requests per second
Redcon: 单线程,无磁盘持久性。
复制代码
$ GOMAXPROCS=1 go run example/clone.go
复制代码
redis-benchmark -p 6380 -t set,get -n 10000000 -q -P 512 -c 512
SET: 2018570.88 requests per second
GET: 2403846.25 requests per second
Redcon: 多线程,无磁盘持久性。
复制代码
$ GOMAXPROCS=0 go run example/clone.go
复制代码
$ redis-benchmark -p 6380 -t set,get -n 10000000 -q -P 512 -c 512
SET: 1944390.38 requests per second
GET: 3993610.25 requests per second
在a 上运行"Intel Intel Intel Intel Intel
联系人
许可证
Redcon源代码在 MIT 许可协议下可用。
最新文章
- System进程(pid=4)占用80端口的解决方案
- Redis系列(二)-Hredis客户端设计及开源
- Android Fragment 使用技巧
- 前端见微知著工具篇:Bower组件管控
- 开心网的账号登录及api操作
- [CLR via C#]12. 泛型
- [POLITICS] S Korea lawmakers vote to impeach leader
- iOS中二维码的生成与使用(入门篇)
- 查询Sqlserver数据库死锁的一个存储过程(转)
- 学习C++语言的50条忠告
- asp.net实现断点续传
- oracle中 merge into 的用法
- python初识 - day4
- 前端面试题:JS中的let和var的区别
- Quartz.NET(任务调度)与Topshelf(服务)的综合使用
- 一篇提及如何通过串口读取并提取GPS信号的论文
- 疫苗:JAVA HASHMAP的死循环
- Node.js中文乱码解决方法
- Docker+STF在ubuntu下测试环境搭建(详细搭建步骤及踩坑记录)
- 创建springboot项目步骤