go redis之redigo的使用

作者:General_zy 时间:2024-05-22 17:46:37 

本文主要介绍了go redis之redigo的使用,分享给大家,具体如下:

安装

go-redis 三方库为我们封装了很多函数来执行 Redis 命令,而 redigo 三方库只有一个 Do 函数执行 Redis 命令,更接近使用 redis-cli 操作 Redis。
go-redis 支持连接哨兵及集群模式的Redis

go get github.com/gomodule/redigo
go get github.com/go-redis/redis/v8

链接Redis

func main() {
   c, err := redis.Dial("tcp", "localhost:6379")
   if err != nil {
       fmt.Println("conn redis failed,", err)
       return
   }
   fmt.Println("redis conn success")
   defer c.Close()
}

String类型操作

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("Set", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.Int(c.Do("Get", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? fmt.Println(r)
}
func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("MSet", "abc", 100, "efg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.Ints(c.Do("MGet", "abc", "efg"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? for _, v := range r {
? ? ? ? fmt.Println(v)
? ? }
}

设置过期时间

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("expire", "abc", 10)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }
}
----------------------------
或者这样也行
do, err := client.Do("set", "name", "1111","EX",5)

List操作

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("lpush", "book_list", "abc", "ceg", 300)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.String(c.Do("lpop", "book_list"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? fmt.Println(r)
}

Hash表

func main() {
? ? c, err := redis.Dial("tcp", "localhost:6379")
? ? if err != nil {
? ? ? ? fmt.Println("conn redis failed,", err)
? ? ? ? return
? ? }

? ? defer c.Close()
? ? _, err = c.Do("HSet", "books", "abc", 100)
? ? if err != nil {
? ? ? ? fmt.Println(err)
? ? ? ? return
? ? }

? ? r, err := redis.Int(c.Do("HGet", "books", "abc"))
? ? if err != nil {
? ? ? ? fmt.Println("get abc failed,", err)
? ? ? ? return
? ? }

? ? fmt.Println(r)
}

Redis连接池

var pool *redis.Pool ?//创建redis连接池

func init(){
? ? pool = &redis.Pool{ ? ? //实例化一个连接池
? ? ? ? MaxIdle:16, ? ?//最初的连接数量
? ? ? ? // MaxActive:1000000, ? ?//最大连接数量
? ? ? ? MaxActive:0, ? ?//连接池最大连接数量,不确定可以用0(0表示自动定义),按需分配
? ? ? ? IdleTimeout:300, ? ?//连接关闭时间 300秒 (300秒不使用自动关闭) ? ?
? ? ? ? Dial: func() (redis.Conn ,error){ ? ? //要连接的redis数据库
? ? ? ? ? ? return redis.Dial("tcp","localhost:6379")
? ? ? ? },
? ? }
}

func main(){
? ? c := pool.Get() //从连接池,取一个链接
? ? defer c.Close() //函数运行结束 ,把连接放回连接池

? ? ? ? _,err := c.Do("Set","abc",200)
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println(err)
? ? ? ? ? ? return
? ? ? ? }

? ? ? ? r,err := redis.Int(c.Do("Get","abc"))
? ? ? ? if err != nil {
? ? ? ? ? ? fmt.Println("get abc faild :",err)
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? fmt.Println(r)
? ? ? ? pool.Close() //关闭连接池
}

来源:https://blog.csdn.net/General_zy/article/details/124831998

标签:go,redis,redigo
0
投稿

猜你喜欢

  • 网页设计标准尺寸参考

    2007-12-29 20:42:00
  • Python通过Manager方式实现多个无关联进程共享数据的实现

    2021-12-27 04:03:17
  • 比较简单的异步加载JS文件的代码

    2009-07-06 13:13:00
  • python网络编程学习笔记(二):socket建立网络客户端

    2023-08-18 13:57:44
  • 解决Building wheel for wrapt (setup.py) ... error的问题

    2023-09-25 22:24:17
  • vue实现引入本地json的方法分析

    2023-07-02 16:32:14
  • JS 显示当前日期+星期(静态)

    2007-09-11 13:29:00
  • git使用.gitignore设置不生效或不起作用问题的解决方法

    2021-06-09 17:17:07
  • Python3结合Dlib实现人脸识别和剪切

    2023-01-10 01:28:48
  • js 可选链操作符的使用

    2023-08-18 16:04:57
  • 总结用Pdb库调试Python的方式及常用的命令

    2023-03-11 02:09:53
  • OpenCV如何去除图片中的阴影的实现

    2023-07-08 22:49:29
  • CSS实现DIV完美垂直居中(支持多浏览器)

    2007-08-13 09:21:00
  • 对用户进行电话访谈的一点感想

    2009-12-28 13:05:00
  • 远程登陆SQL Server 2014数据库的方法

    2024-01-28 03:39:01
  • 链接与文本标签们

    2008-04-04 18:07:00
  • python实现linux下抓包并存库功能

    2022-12-23 20:22:06
  • 基于Python制作一个图片色卡提取器

    2023-06-15 14:25:26
  • python使用xlrd实现检索excel中某列含有指定字符串记录的方法

    2021-04-23 12:41:26
  • python开发之str.format()用法实例分析

    2022-01-15 22:10:23
  • asp之家 网络编程 m.aspxhome.com