泊爷带你学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; ...
随机推荐
- MySQL 列出存储过程
MySQL 列出存储过程 接下来介绍如何列出MySQL数据库中的所有存储过程,并显示存储过程源代码的一些非常有用的语句. MySQL为提供了一些有用的语句,可以更有效地管理存储过程.这些语句包括列出 ...
- Eclipse中设置作者日期等Java注释模板
Eclipse作为JavaIDE(Integrated Development Environment,集成开发环境),可以通过设置自动添加Javadoc注释信息,如@author 作者名.@vers ...
- ionic2使用cordova打包的环境搭建
1.安装node.js(不用说了) 2.安装JDK(java的开发基础类库) 3.安装SDK(安卓开发集成包) 4.gradle( JAVA界的Weboack ,支撑app的编译,打包的流程) 5.安 ...
- React文档(二十二)context
React中,通过React组件可以很容易地追踪数据流.当你关注一个组件,你可以发现哪一个props被传递了,这样使得你的应用很容被推断. 在一些情况下,你想要传递数据通过组件树而不需要去手动在每一层 ...
- EXCE 表格导入导出遇到问题(easypoi)
使用Easypoi进行excel表格的导入导出遇到的问题: 1.导出时候打开文件一直遇乱码,主要的原因就是我在实体类没有进行给每个字段进行注解,就会导致每个字段找不到对应的汉字表头,所以一定不要忘了导 ...
- Linux内存管理(一)
Linux内存管理之一:基本概念篇 物理地址.线性地址(虚拟地址)和逻辑地址:阐述段式管理和页式管理基本概念:Linux操作系统内存管理和虚拟内存概念:为内核开发做一个基础铺垫. 内存是linux内核 ...
- 安装pyspider遇到的坑
pyspider是国人写的一款开源爬虫框架,个人觉得这个框架用起来很方便,至于如何方便可以继续看下去. 作者博客:http://blog.binux.me/ 安装pyspider安装pyspider: ...
- vue-router路由讲解
此文章用来系统讲解vue-router路由 安装 只介绍npm安装 npm install vue-router --save 项目所需依赖 在main.js或者app.vue中导入 import V ...
- Saku实力挖坑记!!(十八)
Saiku实力挖坑记!!!!!!! 我可真真真的是个挖坑小能手呀!不知道你们有没有遇到过这个异常: Enclosure class mondrian.olap.MondrianDef not foun ...
- 终端的rz命令,覆盖原文件。
不覆盖:rz 覆盖 同名文件:rz -y