redcon, Redis兼容的服务器框架
- 源代码名称: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 许可协议下可用。
redcon, Redis兼容的服务器框架的更多相关文章
- skynet游戏服务器框架分享
分享下我之前做的服务器框架; 游戏在线最高3万; 物理机I7的3台阿里云分服;性能及其强劲; 框架: 底层基于比较流行的skynet,基础采用c语言,脚本lua,部分服务golang; Skyne ...
- 跨平台网络通信与服务器框架 acl 3.2.0 发布
acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...
- 跨平台网络通信与服务器框架 acl 3.2.0 发布,acl_cpp 是基于 acl 库的 C++ 库
acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...
- 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧
转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...
- 实战录 | Redis的主从服务器搭建
<实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全平台工程师田全磊,将带来Red ...
- RedRabbit——基于BrokerPattern服务器框架
RedRabbit 经典网游服务器架构 该图省略了专门用途的dbserver.guildserver等用于专门功能的server,该架构的优点有: l LoginGate相当于DNS,可以动态的保证G ...
- workerman是一个高性能的PHP socket服务器框架
workerman-chatorkerman是一款纯PHP开发的开源高性能的PHP socket服务器框架.被广泛的用于手机app.手游服务端.网络游戏服务器.聊天室服务器.硬件通讯服务器.智能家居. ...
- wampserver2.5安装 redis缓存,igbinary, phalcon框架
wampserver2.5安装 redis缓存,igbinary, phalcon框架 根据phalconphp说明文件,先将dll文件拖入到:安装盘:\wamp\bin\php\php5.5.12\ ...
- 基于BOOST 实现并发服务器框架
一:设计思路 本服务器框架使用 UDP 传输协议,程序柱线程等待客户端数据,并将数组存取队列缓冲区.另外可开启多个工作线程,工作线程可以依据具体项目实现不同的功能 ,例如可以将队列缓冲区中的数据逐个取 ...
随机推荐
- CF480E Parking Lot(two-pointers + 单调队列优化)
题面 动态加障碍物,同时查询最大子正方形. n,m≤2000n,m\leq2000n,m≤2000 题解 加障碍不好做,直接离线后反着做,每次就是清除一个障碍物. 显然倒着做答案是递增的,而且答案的值 ...
- 05_Tutorial 5: Relationships & Hyperlinked APIs 关系和超链接
1.关系和超链接 0.文档 https://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis/ h ...
- Codeforces Round #600 (Div. 2) D题【并查集+思维】
题意:给你n个点,m条边,然后让你使得这个这个图成为一个协和图,需要加几条边.协和图就是,如果两个点之间有一条边,那么左端点与这之间任意一个点之间都要有条边. 思路:通过并查集不断维护连通量的最大编号 ...
- 一、RabbitMQ 基础理解
RabbitMQ,是一个使用 erlang 编写的 AMQP(高级消息队列协议)的服务实现,简单来说,就是一个功能强大的消息队列服务 概念理解: Producer: 消息发送者 RabbitMQ Vh ...
- learning scala stripMargin
(1)Scala中创建多行字符串使用Scala的Multiline String. 在Scala中,利用三个双引号包围多行字符串就可以实现. 代码实例如: val foo = "" ...
- Angular2日期格式化
一:组件日期格式化: ts中调用: import {DatePipe} from "@angular/common"; @Component({ providers: [D ...
- 对C#中事件的简单理解
对于C#中的事件,我举了个简单的例子来理解事件及其处理. 这个例子中母亲是事件的发布者,事件是吃饭了.儿子和父亲是事件的订阅者,各自的Eat方法是处理事件的方法. 下面是详细的加注的例子: using ...
- Vue插槽详解
简介 插槽:简单理解就是组件内部留一个或多个的插槽位置,可供组件传对应的模板代码进去.插槽的出现,让组件变的更加灵活. 一.匿名插槽 // 组件(父) <my-component> < ...
- 【原】Python基础-类
class CPerson: name = "default" __name2 = "inaccessable name" #类作用域内的变量可以被所有实例访问 ...
- 通过pro文件使Qt的build目录更清爽
1.指定moc存放的路径,Qt moc编译器生成的moc文件 unix:MOC_DIR = ../tmp win32:MOC_DIR = ../tmp 2.指定目标文件存放的路径,生成的dll或者ex ...