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插件项目的原因。

特性

安装

复制代码

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

联系人

@tidwall。

许可证

Redcon源代码在 MIT 许可协议下可用。

redcon, Redis兼容的服务器框架的更多相关文章

  1. skynet游戏服务器框架分享

    分享下我之前做的服务器框架;  游戏在线最高3万;  物理机I7的3台阿里云分服;性能及其强劲; 框架: 底层基于比较流行的skynet,基础采用c语言,脚本lua,部分服务golang; Skyne ...

  2. 跨平台网络通信与服务器框架 acl 3.2.0 发布

    acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...

  3. 跨平台网络通信与服务器框架 acl 3.2.0 发布,acl_cpp 是基于 acl 库的 C++ 库

    acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...

  4. 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mysql的技巧

    转载至: http://www.cnblogs.com/Imaigne/p/4153397.html 您的项目引用了最新实体框架:但是,找不到数据链接所需的与版本兼容的实体框架数据库 EF6使用Mys ...

  5. 实战录 | Redis的主从服务器搭建

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全平台工程师田全磊,将带来Red ...

  6. RedRabbit——基于BrokerPattern服务器框架

    RedRabbit 经典网游服务器架构 该图省略了专门用途的dbserver.guildserver等用于专门功能的server,该架构的优点有: l LoginGate相当于DNS,可以动态的保证G ...

  7. workerman是一个高性能的PHP socket服务器框架

    workerman-chatorkerman是一款纯PHP开发的开源高性能的PHP socket服务器框架.被广泛的用于手机app.手游服务端.网络游戏服务器.聊天室服务器.硬件通讯服务器.智能家居. ...

  8. wampserver2.5安装 redis缓存,igbinary, phalcon框架

    wampserver2.5安装 redis缓存,igbinary, phalcon框架 根据phalconphp说明文件,先将dll文件拖入到:安装盘:\wamp\bin\php\php5.5.12\ ...

  9. 基于BOOST 实现并发服务器框架

    一:设计思路 本服务器框架使用 UDP 传输协议,程序柱线程等待客户端数据,并将数组存取队列缓冲区.另外可开启多个工作线程,工作线程可以依据具体项目实现不同的功能 ,例如可以将队列缓冲区中的数据逐个取 ...

随机推荐

  1. mac XXX 已损坏,打不开。 您应该将它移到废纸篓。

    mac 上的软件我改了某些配置,打开提示这个. 是因为安全认证问题. 在系统偏好设置里面,安全与隐私设置为允许任何来源就可以. 如果新版系统没有这个选项,那么在命令行输入:sudo spctl --m ...

  2. The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners

    链接: https://codeforces.com/gym/102394/problem/F 题意: Harbin, whose name was originally a Manchu word ...

  3. 使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件

    我们在开发程序的时候会引用很多DLL文件,在程序完成编写后,如果不把这些引用的DLL打包,不能在其他电脑运行,那么很多同学可能在想了,能不能把我们编写好的程序打包成一个EXE文件,最好双击就能运行,当 ...

  4. [USACO]骑马修栅栏 Riding the Fences

    题目链接 题目简述:欧拉回路,字典序最小.没什么好说的. 解题思路:插入边的时候,使用multiset来保证遍历出出答案的字典序最小. 算法模板:for(枚举边) 删边(无向图删两次) 遍历到那个点 ...

  5. Linux操作系统常用命令合集——第四篇-文件系统权限操作(5个命令)

    1.umask [命令作用] 文件或目录创建时的遮罩码 [命令语法] umask     [选项]    [参数] [常用选项] -p  --输出的权限掩码可直接作为指令来执行 -s  --以符号方式 ...

  6. linux系列(一):ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写,默认下ls用来打印出当前目录的清单,如果ls指定其他目录,那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...

  7. qml 绘制高精地图之怀疑人生的加载速度

    绘制高精地图时需要gps的经纬度坐标,之前的实现方式是QGeocoordinate类的经纬度变量通过json的方式在qml中使用. 以画线为例,使用方式是这样哒. for(var i in vehic ...

  8. testdisk修复磁盘文件

    使用testdisk,分析之后,使用:P ,list文件,然后使用如下方法恢复文件 Use Right to change directory, h to hide Alternate Data St ...

  9. 【原创】go语言学习(七)数组

    目录 数组定义 二维数组 数组拷贝.传参 数组定义 1. 数组是同一类型的元素集合. var a [3]int //定义一个数组 //Go中数组下标从0开始,因此⻓长度为n的数组下标范围:[0,n-1 ...

  10. Hadoop Aggregate Resource Allocation解释

    1.在hadoop里面运行程序的时候,查看某个任务的具体信息如下: [hadoop@master monitor]$ yarn application -list 如上图,这里面的Aggregate ...