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 许可协议下可用。

最新文章

  1. System进程(pid=4)占用80端口的解决方案
  2. Redis系列(二)-Hredis客户端设计及开源
  3. Android Fragment 使用技巧
  4. 前端见微知著工具篇:Bower组件管控
  5. 开心网的账号登录及api操作
  6. [CLR via C#]12. 泛型
  7. [POLITICS] S Korea lawmakers vote to impeach leader
  8. iOS中二维码的生成与使用(入门篇)
  9. 查询Sqlserver数据库死锁的一个存储过程(转)
  10. 学习C++语言的50条忠告
  11. asp.net实现断点续传
  12. oracle中 merge into 的用法
  13. python初识 - day4
  14. 前端面试题:JS中的let和var的区别
  15. Quartz.NET(任务调度)与Topshelf(服务)的综合使用
  16. 一篇提及如何通过串口读取并提取GPS信号的论文
  17. 疫苗:JAVA HASHMAP的死循环
  18. Node.js中文乱码解决方法
  19. Docker+STF在ubuntu下测试环境搭建(详细搭建步骤及踩坑记录)
  20. 创建springboot项目步骤

热门文章

  1. list, vector, map, set 区别与用法比较
  2. NAS,IP SAN以及iSCSCI SAN存储的一些认识和理解
  3. 【説明する】hash
  4. 爬虫(十一):scrapy中的选择器
  5. 如何在微信小程序中国引入fontawesome字体图标
  6. Educational Codeforces Round 49 (Rated for Div. 2)
  7. Go 语言入门(一)基础语法
  8. Mininet系列实验(二):Mininet可视化应用
  9. BAT文件运行时不显示命令窗口的方法
  10. 使用Flask构建机器学习模型API