go实现redigo的简单操作

 更新时间:2018年07月23日 09:54:18   作者:熔遁丶螺旋手里剑  
golang操作redis主要有两个库,go-redis和redigo,今天我们就一起来介绍一下redigo的实现方法,需要的朋友可以参考下

golang操作redis主要有两个库,go-redis和redigo。两者操作都比较简单,区别上redigo更像一个client执行各种操作都是通过Do函数去做的,redis-go对函数的封装更好,相比之下redigo操作redis显得有些繁琐。但是官方更推荐redigo,所以项目中我使用了redigo。

1.连接redis

package redisclient
import (
  "fmt"
  redigo "github.com/garyburd/redigo/redis"
)
var pool *redigo.Pool
func init() {
  redis_host := "127.0.0.1"
  redis_port := 6379
  pool_size := 20
  pool = redigo.NewPool(func() (redigo.Conn, error) {
    c, err := redigo.Dial("tcp", fmt.Sprintf("%s:%d", redis_host, redis_port))
    if err != nil {
      return nil, err
    }
    return c, nil
  }, pool_size)
}
func Get() redigo.Conn {
  return pool.Get()
}

之后我们调用redisclient包中的.Get()就可以生成一个redis连接池对象来操作redis

2.操作redis

package main
import (
  "redisclient"
  "logger"
  "github.com/garyburd/redigo/redis"
)
func main() {
  c := redisclient.Get()
  //记得销毁本次链连接
  defer c.Close()
  //写入数据
  _, err := c.Do("SET", "go_key", "redigo")
  if err != nil {
    logger.Runtime().Info(map[string]interface{}{"error": err}, "error while setting")
  }
  //判断key是否存在
  is_key_exit, err := redis.Bool(c.Do("EXISTS", "go_key"))
  if err != nil {
    logger.Runtime().Info(map[string]interface{}{"error": err}, "error while existing")
  }
  //获取value并转成字符串
  account_balance, err := redis.String(c.Do("GET", "go_key"))
  if err != nil {
    logger.Runtime().Info(map[string]interface{}{"error": err}, "error while getting")
  }
  //删除key
  _, err = c.Do("DEL", "go_key")
  if err != nil {
    logger.Runtime().Info(map[string]interface{}{"error": err}, "error while deleting")
  }
  //设置key过期时间
  _, err = c.Do("SET", "mykey", "superWang", "EX", "5")
  if err != nil {
    fmt.Println("redis set failed:", err)
  }
  //创建key时设置5s过期
  _, err := c.Do("SET", "go_key:ex", "redigo", "EX", 5)
  if err != nil {
    logger.Runtime().Info(map[string]interface{}{"error": err}, "error while setting")
  }
  //对已有key设置5s过期时间
  n, err := rs.Do("EXPIRE", "go_key", 5)
  if err != nil {
    logger.Runtime().Info(map[string]interface{}{"error": err}, "error while setting")
  } else if n != int64(1) {
    fmt.Println("failed")
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Go语言开发k8s之Service操作解析

    Go语言开发k8s之Service操作解析

    这篇文章主要为大家介绍了Go语言开发k8s之Service操作解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • golang中实现给gif、png、jpeg图片添加文字水印

    golang中实现给gif、png、jpeg图片添加文字水印

    这篇文章主要介绍了golang中实现给gif、png、jpeg图片添加文字水印,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • golang连接kafka的示例代码

    golang连接kafka的示例代码

    本文主要介绍了golang连接kafka的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 一文带你了解Go语言中锁特性和实现

    一文带你了解Go语言中锁特性和实现

    Go语言中的sync包主要提供的对并发操作的支持,标志性的工具有cond(条件变量) once (原子性) 还有 锁,本文会主要向大家介绍Go语言中锁的特性和实现,感兴趣的可以了解下
    2024-03-03
  • 深入探讨Go语言中的预防性接口为什么是不必要的

    深入探讨Go语言中的预防性接口为什么是不必要的

    在Go语言中,有一种从其他语言带来的常见模式:预防性接口,虽然这种模式在 Java 等语言中很有价值,但在Go中往往会成为反模式,本文我们就来深入探讨一下原因
    2025-01-01
  • go-zero 组件布隆过滤器使用示例详解

    go-zero 组件布隆过滤器使用示例详解

    这篇文章主要为大家介绍了go-zero组件介绍之布隆过滤器使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 解决Goland 同一个package中函数互相调用的问题

    解决Goland 同一个package中函数互相调用的问题

    这篇文章主要介绍了解决Goland 同一个package中函数互相调用的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • Go语言JSON编解码神器之marshal的运用

    Go语言JSON编解码神器之marshal的运用

    这篇文章主要为大家详细介绍了Go语言中JSON编解码神器——marshal的运用,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-09-09
  • go-micro使用Consul做服务发现的方法和原理解析

    go-micro使用Consul做服务发现的方法和原理解析

    这篇文章主要介绍了go-micro使用Consul做服务发现的方法和原理,这里提供一个通过docker快速安装Consul的方式,当然前提是你得安装了docker,需要的朋友可以参考下
    2022-04-04
  • golang int 转float 强转和高精度转操作

    golang int 转float 强转和高精度转操作

    这篇文章主要介绍了golang int 转float 强转和高精度转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12

最新评论