【golang】golang redis 的使用

【golang】golang redis 的使用,第1张

概述前言     Redis 是一个开源的、使用C语言编写的、基于内存也可持久化的 Key-Value 数据库。     Redis 优势      性能高 – Redis 读速度 110000 次/s,写速度 81000次/s 。     支持的数据类型多 – Redis支持 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型。     原子 – 所有 ***

前言

Redis 是一个开源的、使用C语言编写的、基于内存也可持久化的 Key-Value 数据库。

Redis 优势

性能高 – Redis 读速度 110000 次/s,写速度 81000次/s 。 支持的数据类型多 – Redis支持 Strings,Lists,Hashes,Sets 及 Ordered Sets 数据类型。 原子 – 所有 *** 作都是原子性的,还支持对几个 *** 作全并后的原子性执行。 丰富的特性 – 还支持 publish/subscribe,通知,key 过期等等特性。

其他 key-value 存储有什么不同?
Redis有着更为复杂的数据结构并且提供对他们的原子性 *** 作,这是一个不同于其他数据库的进化路径。Redis的数据类型都是基于基本数据结构的同时对程序员透明,无需进行额外的抽象。


引入包

"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.Pooldf := 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(@R_403_5991@ 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 @R_403_5991@.String() + key as Redis key       return c.Cmd("set",@R_403_5991@.String()+key,string(encodedValue)).Err}

查询 key

func Get(@R_403_5991@ RedisDatabase,unmarshal func([]byte) (interface{},error)) (value interface{},err error) {       c,err := GetClIEnt()       if err != nil {              return  }       defer PutClIEnt(c)       // Use @R_403_5991@.String() + key as Redis key       encodedValue,err := c.Cmd("get",@R_403_5991@.String()+key).Bytes()       if err != nil {              return  }       return unmarshal(encodedValue)}

删除 key

func Remove(@R_403_5991@ RedisDatabase,key string) (err error) {       c,err := GetClIEnt()       if err != nil {              return err       }       defer PutClIEnt(c)       // Use @R_403_5991@.String() + key as Redis key       return c.Cmd("del",@R_403_5991@.String()+key).Err}
总结

以上是内存溢出为你收集整理的【golang】golang redis 的使用全部内容,希望文章能够帮你解决【golang】golang redis 的使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1275617.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-09
下一篇2022-06-09

发表评论

登录后才能评论

评论列表(0条)

    保存