1.Redis
2.Golang Redis Pool点击打开链接
Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有显著区别 (不支持的命令列表), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务。
const ( redis_host string = "127.0.0.1:6379" database string = "redisServer" password string = "123456" maxOpenConns int = 10 maxIdleConns int = 10 ) var Cache *RedisConnPool type RedisConnPool struct { redisPool *redis.Pool } func init() { Cache = &RedisConnPool{} Cache.redisPool = myNewPool() if Cache.redisPool == nil { panic("init redis failed!") } } func myNewPool() *redis.Pool { return &redis.Pool{ MaxActive: maxOpenConns, // max number of connections MaxIdle: maxIdleConns, IdleTimeout: 10 * time.Second, Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", redis_host) if err != nil { return nil, err } if _, err := c.Do("AUTH", password); err != nil { c.Close() return nil, err } if _, err := c.Do("select", database); err != nil { c.Close() return nil, err } return c, err }, TestOnBorrow: func(c redis.Conn, t time.Time) error { _, err := c.Do("PING") return err }, } } func (p *RedisConnPool) Close() error { err := p.redisPool.Close() return err } // 当前某一个数据库,执行命令 func (p *RedisConnPool) Do(command string, args ...interface{}) (interface{}, error) { conn := p.redisPool.Get() defer conn.Close() return conn.Do(command, args...) } //// String(字符串) func (p *RedisConnPool) SetString(key string, value interface{}) (interface{}, error) { conn := p.redisPool.Get() defer conn.Close() return conn.Do("SET", key, value) } func (p *RedisConnPool) GetBytes(key string) ([]byte, error) { conn := p.redisPool.Get() defer conn.Close() return redis.Bytes(conn.Do("GET", key)) } func (p *RedisConnPool) GetInt(key string) (int, error) { conn := p.redisPool.Get() defer conn.Close() return redis.Int(conn.Do("GET", key)) } func (p *RedisConnPool) GetInt64(key string) (int64, error) { conn := p.redisPool.Get() defer conn.Close() return redis.Int64(conn.Do("GET", key), ) } func (p *RedisConnPool) DelKey(key string) (interface{}, error) { conn := p.redisPool.Get() defer conn.Close() return conn.Do("DEL", key) } func (p *RedisConnPool) ExpireKey(key string, seconds int64) (interface{}, error) { conn := p.redisPool.Get() defer conn.Close() return conn.Do("EXPIRE", key, seconds) } func (p *RedisConnPool) Keys(pattern string) ([]string, error) { conn := p.redisPool.Get() defer conn.Close() return redis.Strings(conn.Do("KEYS", pattern)) } func (p *RedisConnPool) KeysByteSlices(pattern string) ([][]byte, error) { conn := p.redisPool.Get() defer conn.Close() return redis.ByteSlices(conn.Do("KEYS", pattern)) } func (p *RedisConnPool) SetHashMap(key string, fieldValue map[string]interface{}) (interface{}, error) { conn := p.redisPool.Get() defer conn.Close() return conn.Do("HMSET", redis.Args{}.Add(key).AddFlat(fieldValue)...) } func (p *RedisConnPool) GetHashMapString(key string) (map[string]string, error) { conn := p.redisPool.Get() defer conn.Close() return redis.StringMap(conn.Do("HGETALL", key)) } func (p *RedisConnPool) GetHashMapInt(key string) (map[string]int, error) { conn := p.redisPool.Get() defer conn.Close() return redis.IntMap(conn.Do("HGETALL", key)) } func (p *RedisConnPool) GetHashMapInt64(key string) (map[string]int64, error) { conn := p.redisPool.Get() defer conn.Close() return redis.Int64Map(conn.Do("HGETALL", key)) }文章来源: Golang Redis Cache