泊爷带你学go -- redis连接池的操作
package main
import (
"common"
"fmt"
"proto"
"strconv"
"time"
"github.com/garyburd/redigo/redis"
"github.com/gogo/protobuf/proto"
)
type RedisHelper struct {
redisClient *redis.Pool
}
var redisHelper *RedisHelper
func RedisHelper_GetMe() *RedisHelper {
if redisHelper == nil {
redisHelper = &RedisHelper{}
}
return redisHelper
}
func (this *RedisHelper) init() {
maxIdle :=
maxActive :=
// 建立连接池
this.redisClient = &redis.Pool{
MaxIdle: maxIdle,
MaxActive: maxActive,
IdleTimeout: * time.Second,
Wait: true,
Dial: func() (redis.Conn, error) {
con, err := redis.Dial("tcp", "127.0.0.1:6379",
redis.DialPassword(""),
redis.DialDatabase(int()),
redis.DialConnectTimeout(*time.Second),
redis.DialReadTimeout(*time.Second),
redis.DialWriteTimeout(*time.Second))
if err != nil {
return nil, err
}
return con, nil
},
}
}
func (this *RedisHelper) GetServerIdByType(accountId int64, st uint32) uint32 {
// 从池里获取连接
rc := this.redisClient.Get()
// 用完后将连接放回连接池
defer rc.Close()
// 错误判断
if rc.Err() != nil {
return
}
//
v, err := redis.String(rc.Do("GET", strconv.FormatInt(accountId, )))
if err != nil {
return
}
p := &testone.CProtoRedisServer{}
err = proto.UnmarshalText(v, p)
fmt.Println(v)
if err != nil {
return
}
if st == common.GateServer {
return p.GetGateId()
}
if st == common.FightServer {
return p.GetFightId()
}
if st == common.GameServer {
return p.GetGameId()
}
return
}
func (this *RedisHelper) SaveOrUpdateServer(accountId int64, p *testone.CProtoRedisServer) bool {
// 从池里获取连接
rc := this.redisClient.Get()
// 用完后将连接放回连接池
defer rc.Close()
// 错误判断
if rc.Err() != nil {
return false
}
valstr := p.String()
actstr := strconv.FormatInt(accountId, )
_, err := rc.Do("SET", actstr, valstr)
if err != nil {
return false
}
return true
}
泊爷带你学go -- redis连接池的操作的更多相关文章
- 泊爷带你学go -- 经典的继承与接口 简直吊炸天 !
package main import ( "fmt" ) type TeamBase struct { m_TeamId uint64 m_Rid uint32 m_RoomRu ...
- 泊爷带你学go -- 反射的经典玩法
package main import ( "fmt" "reflect" ) type order struct { ordId int customerId ...
- 泊爷带你学go -- 加锁的问题
package main import ( "fmt" "sync" ) var l sync.Mutex var a string func f() { a ...
- Go语言之从0到1实现一个简单的Redis连接池
Go语言之从0到1实现一个简单的Redis连接池 前言 最近学习了一些Go语言开发相关内容,但是苦于手头没有可以练手的项目,学的时候理解不清楚,学过容易忘. 结合之前组内分享时学到的Redis相关知识 ...
- Redis 连接池的问题
目录 Redis 连接池的问题 1 1. 前言 1 2.解决方法 1 前言 问题描述:Redis跑了一段时间之后,出现了以下异常. Redis Timeout ex ...
- 红眼技术博客 » redis连接池红眼技术博客 » redis连接池
红眼技术博客 » redis连接池 redis连接池
- redis连接池操作
/** * @类描述 redis 工具 * @功能名 POJO * @author zxf * @date 2014年11月25日 */public final class RedisUtil { p ...
- java操作redis redis连接池
redis作为缓存型数据库,越来越受到大家的欢迎,这里简单介绍一下java如何操作redis. 1.java连接redis java通过需要jedis的jar包获取Jedis连接. jedis-2.8 ...
- 三:Redis连接池、JedisPool详解、Redisi分布式
单机模式: package com.ljq.utils; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; ...
随机推荐
- 基于百度通用翻译API的一个翻译小工具
前几天写了一个简单的翻译小工具,是基于有道翻译的,不过那个翻译接口有访问限制,超过一定次数后会提示访问过于频繁,偶然发现百度翻译API如果月翻译字符少于200万是不收取费用的,所以就注册了一个百度开发 ...
- Win10安装LoadRunner11
一.下载 地址:http://www.51testing.com/?uid-4827-action-viewspace-itemid-225451 二.安装 本来想写,结果和别人的一样就不写了:htt ...
- EasyUI的textbox的disable ,readonly 用法
EasyUI的textbox,如果用了disable, 那么提交时,后台mvc controller是取不到值的, 如果用了Readonly, textbox的样式又没有变化, 让人一眼就感知到哪些是 ...
- 【密码技术】Part 4 SSL/TLS
01 SSL/TLS基本概念 02 TLS协议流程图
- Tsinghua 2018 DSA PA2简要题解
反正没时间写,先把简要题解(嘴巴A题)都给他写了记录一下. upd:任务倒是完成了,我也自闭了. CST2018 2-1 Meteorites: 乘法版的石子合并,堆 + 高精度. 写起来有点烦貌似. ...
- ClientDataSet应用
最近维护一个项目,里面用到ClientDataSet,由于之前接触ClientDataSet比较少,所以这个星期补了一下关于ClientDataSet的知识,并在此记录下我所了解到的并应用到实际项目中 ...
- Angular2+实现右键菜单的重定义--contextmenu
在做需求时用到video这个html5的新增标签,然后公司要求把video的右键屏蔽了去,我在网上找了很久没找到完整的方法来实现这个功能,只能自己摸索着来. 不说废话,先上干货 0.0 video.c ...
- UVa LA 4636 Cubist Artwork 难度: 0
题目 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_pr ...
- Flask框架基础--第一篇
1.flask框架和其他几种框架的优缺点对比 Django : 优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架 缺点 - 大到浪费资源,请求的时候需要的资源较高 Flask : ...
- swiper使用中一些点的总结
最近做了PC端改版,要求移动端有更好的体验,一些产品滚屏的展示,就用了swiper插件,以方便用户在移动端访问可以滑动翻屏展示. 本次项目中使用的是swiper2.0版本. 首先要引入swiper的j ...