Go语言中文网 为您找到相关结果 847

go语言使用redis —— redigo

redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo。选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了。 redis、go、redigo的安装就不需要提了,不能强行增加篇幅。 redigo使用起来很人性化,api设计的符合直觉,我对redis了解较少,使用过程中基本没有遇到障碍。 redigo的使用入门可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis 接下来就是毫无技术含量的贴代码了: 连接redis我一般是这样写的: 1 c, err := redis.Dial("tcp", "127.0.0.1:6379") 2 if err != nil { 3 ...阅读全文

博文 2015-07-24 03:00:00 wolfred7464

GoLang redis 连接池

最近被日志是折腾得死去活来,写文件无疑效率是最高的,但是分布式又成问题,虽然稍微折腾一下配合NFS,还是可以搞一搞的,但是始终语言设计没有那么方便。 最终决定用redis,换了redis以为就好了,因为内存运行嘛,谁知道tcp连接开销大得一塌糊涂,服务器负载一下子高了许多,使用netstat -an 查看发现一堆的 TIME_WAIT,连ssh到服务器都巨慢无比,所谓天下武功唯快不破,这么慢80岁老太太跳一支广场舞都能给灭了吧。 既然 tcp连接开销这么大,当然首要任务就是解决连接问题,明显一个请求一次连接是很不靠谱的,还不如直接往硬盘写日志呢,当然写日志第一段也说了,不支持分布式,业务分配没那么好。 那么,能不能先定只用一个连接呢,这显然是不行的,一个连接多个php-fpm互掐也会造成瓶颈...阅读全文

博文 2015-05-07 14:00:01 echo不惑

基于Go实现的分布式MQ

基于Go实现的分布式MQ 2015-09-14 赵超 讲师:赵超(Beta版厨子3.0) 个人简介: 6年的Java开发经验、先后就职于淘宝Java中间件团队、腾讯无线媒体产品部。现就职于陌陌担任基础业务组主管。专注于分布式消息总线、LBS技术领域、golang在大规模生产换环境应用的探索。 今天交流的内容也是我上半年主要做的一个开源的MQ的项目,希望对大家有帮助 一、RPC与MQ之间对比 我们通常接触到的RPC同步调用的种类非常多比如fb 的thrift/阿里的dobbo 腾讯的taf、淘宝的hsf这类同步调用框架 从图里面可以看到作为一个业务完成后端要发生非常多的RPC通信 随着业务的复杂度提高,各服务间的依赖度也逐步加大,那么服务间的响应时间也就各有参差了 在一个请求链路上如果存在一个...阅读全文

博文 2015-10-24 05:00:01 zdy0_2004

GO语言的开源库

Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.org gowalker gosearch Sourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail to adg@golang.org from your Google Account. Dead projects If you find a project in this list that is ...阅读全文

博文 2015-02-17 03:00:01 chu888chu888

Go语言(golang)开源项目大全

内容目录 Astronomy 构建工具 缓存 云计算 命令行选项解析器 命令行工具 压缩 配置文件解析器 控制台用户界面 加密 数据处理 数据结构 数据库和存储 开发工具 分布式/网格计算 文档 编辑器 Encodings and Character Sets Games GIS Go Implementations Graphics and Audio GUIs and Widget Toolkits Hardware Language and Linguistics 日志 机器学习 Mathematics Misc Music 网络 Operating System Interfaces Other Random Toys, Experiments and Example Code P2...阅读全文

博文 2015-07-11 03:00:01 davygeek

A list of Go projects

Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.orggo-searchgowalkerSourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail to adg@golang.org from your Google Account. Dead projects If you find a project in this list that is de...阅读全文

博文 2014-10-13 13:00:06 julong2011

go第三方库的安装例子

go第三方库的安装 设置环境变量GOPATH=c:\go\code 在c:\go\code下创建源代码目录src 进入c:\go\code\src 装第三方库命令 git clone git://github.com/alphazero/Go-Redis.git redis 可以在任意目录执行安装redis go install redis 安装后再c:\go\code目录下生成一个pkg目录并且在目录下生成redis.a 可以在在c:\go\code\src下生成目录文件xn 结构如下 文件内容如下 xn.go package xn import ( "fmt" ) func Helloworld(){ fmt.Println("xn包内的Helloeorld函数") } func xx(...阅读全文

博文 2014-11-29 22:00:10 anlun

基于go语言的消息推送系统架构分析

本系统是猎豹移动基于go语言开发的一套消息推送系统,源码地址:https://github.com/Terry-Mao/goim 一、架构图 二、功能简介 1.comet 长连接服务器,支持长轮训、tcp、websocket连接,有超时机制 2.logic 逻辑处理服务器,消息推送入口,通过userId在router服务器中查找对应的comet服务器,将serverId和消息一起保存到kafka队列,logic是无状态服务器,可以随意增删,因为comet需要连接logic,所以在comet服务器中需要连接logic的通过LVS的虚IP,LVS加了real server后不会断开,所以需要在comet服务触发SIGHUP,重新load配置文件。 3.router 路由服务器,保存userId和...阅读全文

博文 2015-10-24 19:00:05 qinyongbo

go语言的new和make

golang的new和make主要区别如下: 1、make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据 2、new分配返回的是指针,即类型*T;make返回引用,即T; 3、new分配的空间被清零,make分配后,会进行初始化。effective go举了一个例子,见:http://golang.org/doc/effective_go.html#allocation_make 对于struct的分配和初始化,除了可以使用new外,还可以这样做: T {},例如 func TestAlloc(t *testing.T) { type T struct { n string i int f float64 fd *os.File b []byte ...阅读全文

博文 2014-11-17 14:44:16 铁哥

Redigo--用池管理redis连接

在golang的项目中,若要频繁的用redis(或者其他类似的NoSQL)来存取数据,最好用redigo自带的池来管理连接。 不然的话,每当要操作redis时,建立连接,用完后再关闭,会导致大量的连接处于TIME_WAIT状态(redis连接本质上就是tcp)。 注:TIME_WAIT,也叫TCP半连接状态,会继续占用本地端口。 以下为redis连接池的golang实现: import ( "github.com/garyburd/redigo/redis" "github.com/astaxie/beego" "time" ) var ( // 定义常量 RedisClient *redis.Pool REDIS_HOST string REDIS_DB int ) func init()...阅读全文

博文 2015-06-17 20:15:55 stevefang

优秀的 Go 存储开源项目和库

可以看到,今年谷歌家的 Go 编程语言流行度有着惊人的上升趋势,其发展也是越来越好,因此本文整理了一些优秀的 Go 存储相关开源项目和库,一起分享,一起学习。 存储服务器(Storage Server) Go 实现的存储服务器 minio - Minio 是一个与 Amazon S3 APIs 兼容的开源对象存储服务器,分布式存储方案 rclone - “用于云存储的 Rsync” - Google Drive, Amazon Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Cloudfile… camlistore - Camlistore 是你的个人存储系统:一种存储、同步、共享、建模和备份内容的方式 torus - ...阅读全文

博文 2017-02-14 11:00:08 编辑部的故事

Go-Redis

redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo。选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了。 redis、go、redigo的安装就不需要提了,不能强行增加篇幅。 redigo使用起来很人性化,api设计的符合直觉,我对redis了解较少,使用过程中基本没有遇到障碍。 redigo的使用入门可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis 接下来就是毫无技术含量的贴代码了: 连接redis我一般是这样写的: 1 c, err := redis.Dial("tcp", "127.0.0.1:6379") 2 if err != nil { 3 ...阅读全文

博文 2016-05-13 02:00:02 simbadan

Go语言开发分布式聊天室

声明 我是一个刚学go语言的菜鸟,还没有资格谈论什么技术分享,只是为了展示fooking的实际应用,同时把我用go写的聊天室代码贴出来供大家消遣,如果有入不了各位法眼的代码,望轻喷。该聊天室基于fooking,而业务代码是采用Go + Fastcgi。 完整的源代码在 https://github.com/scgywx/fooking/blob/master/example/chat/gateway.go,全代码200多行,去掉router部分代码,实际逻辑代码只有170来行,逻辑简单,功能强大。 详解 聊天服务器的入口main函数里有3个IP和端口配置,分别是Chat服务器、Router服务器和Redis服务器。 func main() { listener, _ := net.Liste...阅读全文

博文 2015-08-28 15:00:04 IM鑫爷

Redigo--Go连接Redis

本文主要介绍go Web开发中操作redis。 Redigo是go连接Redis的扩展包,用此包时需先执行: go get github.com/garyburd/redigo/redis 安装完后,在文件中导入redigo即可。 连接redis的样例如下: [html] view plaincopy import ( "fmt" // 导入redigo扩展包 "github.com/garyburd/redigo/redis" ) // 从配置文件获取redis配置并连接 host := beego.AppConfig.String("redis_host") db, _ := beego.AppConfig.Int("redis_db") // tcp连接redis rs, err :=...阅读全文

博文 2015-10-25 21:00:06 wkyb608

go语言公共库goredis

golang redis client, bufferd connection, connection pool, support all redis commands, 欢迎大家批评指正,更欢迎大家加入进来。 #### Create a new conn? c, e := Dial("127.0.0.1:6379", pwd, CTimeout, RTimeout, WTimeout, alive, *pool) if e != nil { println(e.Error()) return } 如果redis不需要AUTH认证, password ="" #### A Redis Command. c.GET("mykey") c.SA...阅读全文

开源项目 2014-11-04 11:15:41 翟羽行

Go 语言项目

出处:https://code.google.com/p/go-wiki/wiki/Projects Indexes and search engines These sites provide indexes and search engines for Go packages: godoc.orggowalkergosearchSourcegraph Contributing To edit this page you must be a contributor to the go-wiki project. To get contributor access, send mail to adg@golang.org from your Google Account. Dead proj...阅读全文

博文 2014-10-10 16:00:01 leonzhouwei

Redis 集群解决方案Codis

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务. Codis 实现了业务透明的动态/安全扩缩容,高度可运维,proxy-based 的方案,支持无状态的多 proxy 水平扩展。已经在贵荚内部取代了大多数业务的 twemproxy。 架构图: ![架构图](https://raw.githubusercontent....阅读全文

go语言七——连接redis

使用Redigo这个库 package main import ( "fmt" "redis" "time" "strconv" ) var ( server string = "192.168.1.105:6379" password string = "passwd" ) var pool *redis.Pool func test(i int) { c := pool.Get() defer c.Close() t:=strconv.Itoa(i) c.Do("SETEX","foo"+t,20,i) reply, err := redis.Int(c.Do("GET","foo"+t)) if err == nil { fmt.Print(reply) } else { fmt.Pr...阅读全文

博文 2014-10-04 19:26:26 ciaos

基于GO语言大型企业级电商秒杀系统实战教程

基于GO语言大型企业级电商秒杀系统实战教程 网盘地址:https://pan.baidu.com/s/1jbo6UotGW7Kf84ji0PB7Sg 密码: nau4 备用地址(腾讯微云):https://share.weiyun.com/5NjLpPp 密码:e9thmp 内容简介 什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于网站中一些稀缺或者特价的产品,电商网站一般会在约定的时间对其进行限量销售,因为这些产品的特殊性,会吸引大量用户前来抢购,并且会在约定时间同时在秒杀页面进行抢购。 设计思路 将请求拦截在系统上游,降低下流压力;秒杀系统特点就是并发量极大,但实际秒杀成功的请求数量确很少,所以如果不在前端拦截可能造成...阅读全文

在go中使用json作为主要的配置格式

最近在用go重构,在先前的代码中,我们使用的ini文件进行配置,但是因为很多历史遗留问题,导致配置混乱,维护困难,自然也需要考虑重构了。 通用配置格式 通用的配置格式有很多,常用的就有ini,json,yaml,xml等,当然为了通用我们不考虑自定义的配置格式。那如何选择呢? 首先,xml我们就不用考虑了,到现在为止我都没觉得用这玩意配置起来有多方便,反而很臃肿,可能java系的童鞋会比较青睐。 再来考虑ini,ini文件对于简单应用的配置可以说是非常方便的,如果配置没有太多的层次结构,使用ini就能完全满足我们的需要,即使有,我们也能够通过加入特定前缀来解决。譬如,我们可能有如下redis配置: [ModuleA] persistent_redis_addr = 127.0.0.1:637...阅读全文

博文 2014-10-04 19:25:55 siddontang

统计redis中某类key的数量,代替keys指令

redis使用过程中会存在查询某类key的数量问题,较简单的办法为通过redis-cli结合keys进行操作,由于keys的工作机制导致线上一般禁用该指令,以下shell脚本通过scan实现统计功能。#!/bin/bashA=$0B=${A##*/}C=${B%.*}running_file_name=$Crunning_flag="run.$running_file_name"REDIS_CLIENT='redis-cli -h 0.0.0.0 -p 6379 -x'function process { echo $0 index=-1 count=0 step=100000 while ((index!=0)) do if [ $index -le 0 ];then index=0 fi...阅读全文

博文 2018-08-17 10:52:54 hansegod

重磅福利:Go语言中文网 携手阿里云赠送超值免费套餐

阿里云30+产品、6个月使用权,有码就能开通。包含7款热门产品:云服务器ECS、数据库(redis、Mongodb)、存储OSS等。 参与本次活动需要满足如下条件: 1. 新用户:指从未体验过阿里云云产品的用户,包括未购买过包年包月产品、未开通过按量付费产品的用户; 2. 通过阿里云个人实名认证; 3. 个人芝麻信用分 ≥ 620; 如果你满足条件,通过本站 [兑换邀请码](/gift)(邀请码有效期至2017年9月1日),就可以免费使用半年!!...阅读全文

Golang-使用goconfig 读取配置文件

使用goconfig 读取ini 配置文件 安装 go get github.com/Unknwon/goconfig 使用方法 加载配置文件 cfg, err := goconfig.LoadConfigFile("conf.ini") if err != nil{ panic("错误") } [mysql] username=root password=123456 url=(127.0.0.1:3306)/baidu [redis] address=127.0.0.1:6379 读取 读取单个值 value, err := cfg.GetValue("mysql", "username") valut, err := cfg.Int("must", int) 读取整个区 sec err...阅读全文

博文 2018-08-07 12:34:49 yunpiao

回复:《golang VS php 性能对比》

连接:http://www.oschina.net/question/29420_138135 看到有一篇博文介绍Golang与PHP性能对比,在此回复一下。这测试结果明显是误导人的。 1,PHP未开启OpCache,那么每次都要读磁盘文件。并且编译PHP为OpCode。性能自然会差,开启OpCache试试吧。 2、php+redis一定要扩展版本的redis客户端,原因是redis扩展是长连接的,可以避免短连接带来的网络开销。 3、php-fpm或者Apache,就算只开20个进程。redis这种纯内存操作绝对可以2ms内返回结果(2ms已经算是很差的情况了,一般0.5ms就能得到响应)。那么每个进程至少可以提供500QPS的处理能力(2ms1次,PHP进程是串行执行的,1秒可以500次)...阅读全文

博文 2014-10-23 08:00:01 matyhtf

Go语言第一深坑 - interface 与 nil 的比较

# interface简介 Go语言以简单易上手而著称,它的语法非常简单,熟悉C++,Java的开发者只需要很短的时间就可以掌握Go语言的基本用法。 interface是Go语言里所提供的非常重要的特性。一个interface里可以定义一个或者多个函数,例如系统自带的io.ReadWriter的定义如下所示: ```go type ReadWriter interface { Read(b []byte) (n int, err error) Write(b []byte) (n int, err error) } ``` 任何类型只要它提供了Read和Write的绑定函数实现,Go就认为这个类型实现了这个interface(duck-type),而不像Java需要开发者使用implemen...阅读全文

博文 2017-08-14 04:03:06 xiaonanln

使用Redis做任务队列(Golang)

在上篇用纯go在本机模拟了下分布式队列的东西。这里补上Redis队列部份。 用Redis做队列有下面三个问题需解决: 1. 队列构建 使用Redis的RPUSH/LPOP来解决 2. 参数传递/解析 客户端将JOSN参数存入Redis,Server端取出后解析还原。 3. 连接池 redigo支持Redis连接池 下面代码就是具体解决实现: //Redis做后台任务队列 //author: Xiong Chuan Liang //date: 2015-3-25 package main import ( "bytes" "encoding/json" "errors" "fmt" "time" "github.com/garyburd/redigo/redis" ) func main() ...阅读全文

博文 2015-06-17 20:17:45 xcltapestry

用GO语言实现一个简单的搜索引擎

用GO语言实现一个简单的搜索引擎 项目地址是:https://github.com/wyh267/FalconEngine 对搜索引擎感兴趣的可以去看看这本书,比较浅并且也比较完整的介绍了一个搜索引擎的全部机能。 我的这个搜索引擎原始数据是MySql数据库的,大家可以根据需要进行二次开发,用来支持其他数据库或者本地文件,Detail文件是存储在Redis数据库中,同样这部分也可以根据自己的需要二次开发,使用本地文件或者其他数据库,倒排索引和正排索引本地存储的时候使用的json格式,比较耗磁盘,第一版暂时这样了吧,后续再做优化。 使用方法 依赖以下几个库 github.com/outmana/log4jzl log文件 github.com/ewangplay/config 配置文件解析 gi...阅读全文

博文 2015-07-28 00:00:00 ygrx

GO中调用redis时,当并发量比较大时出现的问题。

GO中调用redis时,实始化一个连接池,做法也是一般的用户: ```go &redis.Pool{ MaxIdle: beego.AppConfig.DefaultInt("redis::maxidle", 1), MaxActive: beego.AppConfig.DefaultInt("redis::maxactive", 10), IdleTimeout: time.Duration(beego.AppConfig.DefaultInt64("redis::idle_time_out", 180)) * time.Second, Dial: func() (redis.Conn, error) { log.Println("func dia...阅读全文

Golang redigo hmset hset 问题

最近公司项目,换到了golang 下面来开发,遇到了redis存储链表的问题,困扰了我好几天,后面静下心来,好好读了一下源码,发现官方的例子,最终还是羊毛出在羊身上 c, err := dial() if err != nil { panic(err) } defer c.Close() var p1, p2 struct { Title string `redis:"title"` Author string `redis:"author"` Body string `redis:"body"` } p1.Title = "Example" p1.Author = "Gary" p1.Body = "Hello" if _, err := c.Do("HMSET", redis.Args{...阅读全文

博文 2015-05-13 03:00:05 jackluo

现在招聘比找男朋友还难 T-T(招初级/中级golang开发)

现在招聘比找男朋友难多了!! 招 初级 /中级 golang 开发,base 广州天河( 12-25K ) PS:公司已有较成熟的 GO 语言研发团队,目前团队用到的都是最新技术:K8s,Istio,微服务等,期望有相关经验和有志于往 GO 语言发展的小伙伴加入!!! 职位职责: 1. 负责服务端技术选型和架构; 2. 负责产品功能模块的设计,开发和维护; 任职要求: 1. 1~3年以上Golang开发经验; 2. 熟悉服务端接口开发,熟悉http,protobuf,grpc; 3. 熟悉goroutine,channel,sql,http等模块; 4. 掌握mysql,pgsql,redis基本使用; 5. 掌握linux,...阅读全文

golang redis连接池的使用

````golang package main import ( "encoding/json" "errors" "fmt" "time" "github.com/garyburd/redigo/redis" ) const ( RedisURL = "redis://*****:6379" redisMaxIdle = 3 //最大空闲连接数 redisIdleTimeoutSec = 240 //最大空闲连接时间 RedisPassword = "*****" ) // NewRedisPool 返回redis连接池 func NewRedisPool(redisURL string) *redis.Pool { return &redis.Pool{ MaxIdle: redisMa...阅读全文

博文 2018-01-18 11:35:27 hfyarvin

go使用token实现简单的权限管理

这里采用的是在header里设置token进行鉴权,cookie也类似:基本思路为前端在header里设置token,后端采用redis等进行存储,使用中间件进行鉴权,登录时设置token。以下是登录生成token:设置if err:=tools.NewAccountSsdbCache(info.Id,token);err!=nil { c.JSON(403,gin.H{ "status":403, "msg":to.String(err), }) return }方法func NewAccountSsdbCache(userid int64,val string)(err error){ ssdb,err:=common.NewSsdbClient() if err!=nil { retu...阅读全文

博文 2018-04-17 19:40:42 misasky

golang操作redis连接池

func newPool(server, password string) *redis.Pool { return &redis.Pool{ MaxIdle: 3, IdleTimeout: 240 * time.Second, Dial: func () (redis.Conn, error) { c, err := redis.Dial("tcp", server) if err != nil { return nil, err } if _, err := c.Do("AUTH", password); err != nil { c.Close() return nil, err } return c, err }, TestOnBorrow: func(c redis.Conn, ...阅读全文

博文 2014-10-04 19:27:36 程序员Jack

Rancher使用入门

上个月末,Rancher Labs在其官方博客上宣布了 Rancher 1.0正式版本发布。 这是继Apache Mesos、 Google Kubernetes以及Docker 原生 Swarm 之后,又一个可用于Production环境中的容器管理和服务编排工具,而Rancher恰似这个领域的最后一张拼图(请原谅我的孤陋寡闻,如 果有其他 厂商在做这方面产品,请在评论中留言告诉我)。从Rancher Labs的官方about中我们可以看到:Rancher Labs致力于为DevOps team打造一个最好的容器管理平台,让容器的部署和管理变得更加Easy。 本文将带大家与Rancher来个亲密接触,直观的体会一下Rancher的入门级使用方法。 注意:由于Rancher还在active ...阅读全文

博文 2016-04-19 08:54:40 bigwhite

golang面试题整理

golang面试题整理 1、go的调度 2、go struct能不能比较 因为是强类型语言,所以不同类型的结构不能作比较,但是同一类型的实例值是可以比较的,实例不可以比较,因为是指针类型 3、go defer(for defer),先进后出,后进先出 func b() { for i := 0; i < 4; i++ { defer fmt.Print(i) } } 4、select可以用于什么,常用语gorotine的完美退出 golang 的 select 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作 每个case语句里必须是一个IO操作,确切的说,应该是一个面向channel的IO操作 5、context包的用途 Context通常被译作上下文,它是一个比较抽象的概念,其...阅读全文

博文 2019-01-18 23:34:43 yongfutian

golang 定时器

代码文件timer.go: package main import ( "bytes" "fmt" "github.com/unknwon/goconfig" "os/exec" "time" ) var config *goconfig.ConfigFile func init() { path := "./config.ini" conf, err := goconfig.LoadConfigFile(path) if err != nil { fmt.Println(err) } config = conf } func main() { t := time.NewTicker(1 * time.Second) for { select { case <-t.C: run() } } ...阅读全文

博文 2014-10-04 19:27:26 chen yuwen

beego 安装入门

安装入门 beego虽然是一个简单的框架,但是其中用到了很多第三方的包,所以在你安装beego的过程中Go会自动安装其他关联的包。 当然第一步你需要安装Go,如何安装Go请参考我的书第一章 安装beego go get github.com/astaxie/beego 安装bee工具,这个工具可以用来快速的建立beego的应用 go get github.com/astaxie/bee 这样就完成了beego的安装,你就可以开始开发了,可以通过bee工具来创建beego项目 beego依赖的第三方包有如下: session模块:github.com/astaxie/beego/session session模块中支持redis引擎:github.com/garyburd/redigo/red...阅读全文

博文 2014-10-04 19:27:31 astaxie

招聘Golang开发工程师一枚

1. 至少一年golang的开发经验。 2. 至少两年互联网产品开发经验。 3. 熟练使用Linux/Mac开发环境,熟悉基于Git的团队合作开发模式。 4. 熟悉postgresql、mongodb和redis。 5. 统招本科以上学历。 加分项: 1. 有自己的开源项目或者作为核心成员参与过其他开源项目的开发 2. 熟悉php,python,nodejs等其他开发语言 3. 对产品设计和交互有一定的研究 4. fullstack潜质 欢迎各位将简历投递到hr@monokeros.c...阅读全文

Go 实现的 Redis 集群客户端 redis-go-cluster

redis-go-cluster 是基于 Redigo 实现的 Golang Redis 客户端。redis-go-cluster 可以在本地缓存 slot 信息,并且当集群修改的时候会自动更新。此客户端管理每个节点连接池,使用 goroutine 来尽可能的并发执行,达到了高效,低延迟。 **redis-go-cluster 支持:** * Most commands of keys, strings, lists, sets, sorted sets, hashes. * MGET/MSET * Pipelining **不支持:** * Cluster commands * Pub/Sub * Transaction * Lua script 使用

阅读全文

开源项目 2015-12-06 16:00:00 chasex

golang -- mysql & redis

golang mysql 驱动安装 go get github.com/go-sql-driver/mysql go install github.com/go-sql-driver/mysql 以下是select的例子 package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) func main() { initMySQL("root:112358@tcp(192.168.6.234:3306)/test?charset=utf8") defer db.Close() // Prepare statement for select data stmtOut, err := db.Prepa...阅读全文

博文 2014-10-04 19:26:53 flyking

分布式后台任务队列模拟(Golang)

最近研究了下gowoker,这东西代码少而精,Golang真是很适合实现这类东西。 我去掉参数配置,JSON,Redis这些东西,用goworker的方式做了个最简单的实现。 实现如下功能: 1. worker向JobServer注册可执行的功能 2. JobServer轮询,有job就执行,没有则继续轮询 3. client向JobServer提出任务请求,并传入参数 4. JobServer依请求丢给worker执行(可并发或串行执行) 5. JobServer继续轮询 我弄的这个代码很少,其中队列用数组代替,同时省掉了很多东西, 但保留了其goroutine与channel最基础的实现。 如果想看goworker的,可以参考下我这个,应当可以更快的弄明白goworker。 演示例子及运...阅读全文

博文 2015-06-17 20:03:48 xcltapestry

一个go语言实现的短链接服务

一个go语言实现的短链接服务 首先,博客转移到 wusay.org 了,去年没交费,博客都没了。。。刚刚恢复过来,以前的文章没了,慢慢补吧。 什么是短链接服务 大家都用过新浪微博的短连接吧,就是t.cn后面一串不知道是什么的数,然后跳转到一个新页面去,具体什么是短连接请大家自行脑补,在这里,目前有很多提供短连接的地方,比如狼厂的短连接服务,还有提供很多短链接的在线服务,比如这个,能生成很多地方的短连接。 巴特,作为一个程序员,我们不止需要一个端链接服务,我需要自己实现一个短连接服务,因为一般的公共的短连接都有token要求,每天生成的链接也有限制,当你需要生成大量短连接的时候就比较麻烦了。 所以,我实现了一个短连接服务。 短连接的原理 很多人一定想的是短连接是通过一定的算法将长链接变成短连接...阅读全文

博文 2015-06-22 14:01:07 ygrx

消息队列gmq

`gmq`是基于`redis`提供的特性,使用`go`语言开发的一个简单易用的队列;支持延迟任务,异步任务,超时任务,优先级任务 ### 应用场景 - 延迟任务 - 延迟任务,例如用户下订单一直处于未支付状态,半个小时候自动关闭订单 - 异步任务 - 异步任务,一般用于耗时操作,例如群发邮件等批量操作 - 超时任务 - 规定时间内`(TTR)`没有执行完毕或程序被意外中断,则消息重新回到队列再次被消费,一般用于数据比较敏感,不容丢失的 - 优先级任务 - 当多个任务同时产生时,按照任务设定等级优先被消费,例如a,b两种类型的job,优秀消费a,然后再消费b ### gmq流程 ![流程图](https://github.com/w...阅读全文

开源项目 2019-07-10 09:46:59 wuzhc

golang定时任务详解

在程序中经常需要按照指定的周期(以毫秒计)来调用函数或计算表达式,也即实现定时任务,使用time包中Tick和Sleep可以轻松实现定时任务 使用Tick每隔100毫秒打印“Hello TigerwolfC” for range time.Tick(time.Millisecond*100){ fmt.Println("Hello TigerwolfC") } 每隔100毫秒打印 “Hello TigerwolfC”,也可以使用 time.Sleep() for{ time.Sleep(time.Millisecond* 100) fmt.Println("Hello TigerwolfC") } 每隔5秒执行f()函数 c := time.Tick(5 * time.Second) for...阅读全文

博文 2019-02-24 19:34:43 不屈真实

Codis 的设计与实现 Part 1

最近开源了 Codis,在 Github 上的反响挺不错的,3天已经收集到了 1000 多 stars, 让我比较吃惊。 也从侧面说明了确实分布式缓存是大家都会遇到的问题。于是我打算在本篇和接下来的几篇 Blog 详细说明一下 Codis 的设计和一些背后的考虑,以及对于分布式存储(尤其是缓存)系统的一些思考。 Why proxy? Codis 的架构采用了 Proxy-based 的设计,没有走官方 Cluster 的路,官方的 Cluster 实现是 P2P 的模型,依靠 Gossip 协议进行消息同步和将数据分若干个 Slot 作为管理的单位,客户端需要更改。这个模型的好处是: 真正的无中心节点 对于客户端来说请求的性能不会损失太多 但是缺点同样明显: 状态很难明确,你很难清楚的知道集...阅读全文

博文 2015-05-19 10:04:04 c4pt0r

一个golang推送服务器集群:gopush-cluster

Terry-Mao/gopush-cluster 是一个支持集群的comet服务(支持websocket,和tcp协议)。 特性 轻量级高性能纯Golang实现支持消息过期支持离线消息存储支持单个以及多个私信推送支持单个Key多个订阅者(可限制订阅者最大人数)心跳支持(应用心跳和tcp keepalive)支持安全验证(未授权用户不能订阅)多协议支持(websocket,tcp)详细的统计信息可拓扑的架构(支持增加和删除comet节点,web节点,message节点)利用Zookeeper支持故障转移 安装(版本1.0.5) 一、安装依赖 ? 1 2 $ yum -y install java-1.7.0-openjdk $ yum -y install gcc-c++ 二、搭建zookee...阅读全文

博文 2015-12-29 19:00:01 orangesdk

Beego Redis 的使用问题

Beego 使用 Redis 存储字符串,Get 返回的是 interface{} 类型,必须要做这样的转换,请问有更好的方式吗? ``` bm, error := cache.NewCache("redis", `{"conn":"127.0.0.1:6379","key":"collectionName","dbNum":"0","password":""}`) if error != nil { fmt.Println("redis error:", error) } bm.Put("test", "hello", time.Second*100) v := bm.Get("test") fmt.Println("value:", string(v.([]byte))...阅读全文

日常项目和 OA 管理系统 OPMS

OPMS管理系统是意思是PMS+OA,项目+办公管理。符合日常项目和OA管理,特别适合扁平化管理的微中小企业。 OPMS采用是Beego框架和Bootstrap前端框架构建立,适合不同平台,不同的终端,简单方便实用的原则。数据库采用Mysql,缓存采用Redis。在部署过程中,如果没有Redis,不影响使用。 本系统是免费开源的软件,部署很方便。 OPMS的由来: 公司之前用的项目管理软件是禅道PMS,功能是很强大,学习成本也大。 在实际的项目应用中,有许多功能点都用不到或者很少用,可能它的系统是面向不同行业项目管理吧。 结合实际的项目要求和人事的日常工作经验要求,于是OPMS管理系统诞生了! OPMS官网: [http://opms.milu365.cn/](http://...阅读全文

开源项目 2016-09-16 10:00:16 lock-upme