【golang】golang redis 的使用
发布时间:2020-12-16 18:07:38 所属栏目:大数据 来源:网络整理
导读:前言 Redis 是一个开源的、使用C语言编写的、基于内存也可持久化的 Key-Value 数据库。 Redis 优势 性能高 – Redis 读速度 110000 次/s,写速度 81000次/s 。 支持的数据类型多 – Redis支持 Strings,Lists,Hashes,Sets 及 Ordered Sets 数据类型。 原子 –
前言 Redis 是一个开源的、使用C语言编写的、基于内存也可持久化的 Key-Value 数据库。 Redis 优势
其他 key-value 存储有什么不同? 引入包
"github.com/mediocregopher/radix.v2/pool" "github.com/mediocregopher/radix.v2/redis"
序列化反序列化
import ( "bytes" "github.com/ugorji/go/codec" )
func MsgPackMarshal(v interface{}) ([]byte,error) { var buf = new(bytes.Buffer) enc := codec.NewEncoder(buf,new(codec.MsgpackHandle)) err := enc.Encode(v) return buf.Bytes(),err } func MsgPackUnMarshal(data []byte,v interface{}) error { var buf = bytes.NewBuffer(data) dec := codec.NewDecoder(buf,new(codec.MsgpackHandle)) return dec.Decode(v) }
建立连接池 var redisConnectionPool *pool.Pool df := func(network,addr string) (*redis.Client,error) { client,err := redis.Dial(network,addr) if err != nil { return nil,err } if config.RedisPassword != "" { if err = client.Cmd("AUTH",config.RedisPassword).Err; err != nil { client.Close() return nil,err } } return client,nil } redisConnectionPool,err = pool.NewCustom("tcp",config.RedisAddress,config.RedisConnectionNumber,df) if err != nil { panic("Failed to connect to Redis server: " + err.Error()) } } 关闭连接池 func Close() { redisConnectionPool.Empty() } 使用客户端 func GetClient() (*redis.Client,error) { return redisConnectionPool.Get() } func PutClient(c *redis.Client) { redisConnectionPool.Put(c) } 添加 key
func Set(table RedisDatabase,key string,value interface{}) (err error) { c,err := GetClient() if err != nil { return err } defer PutClient(c) encodedValue,err := MsgPackMarshal(value) if err != nil { return err } // Use table.String() + key as Redis key return c.Cmd("set",table.String()+key,string(encodedValue)).Err } 查询 key
func Get(table RedisDatabase,unmarshal func([]byte) (interface{},error)) (value interface{},err error) { c,err := GetClient() if err != nil { return } defer PutClient(c) // Use table.String() + key as Redis key encodedValue,err := c.Cmd("get",table.String()+key).Bytes() if err != nil { return } return unmarshal(encodedValue) } 删除 key
func Remove(table RedisDatabase,key string) (err error) { c,err := GetClient() if err != nil { return err } defer PutClient(c) // Use table.String() + key as Redis key return c.Cmd("del",table.String()+key).Err } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |