• Go 语言访问 Redis 笔记


    Mac 下载 Redis

    Mac安装Redis,原来就是这么简单

    Mac Redix 数据库打开

    • brew services start redis

    服务端

    • redis-server

    客户端

    • redis-cli

    导包

    package main
    
    import (
    	"fmt"
    	"github.com/gomodule/redigo/redis"
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    连接数据库

    func main() {
    	c, err := redis.Dial("tcp", "localhost:6379")
    	if err != nil {
    		fmt.Println("conn redis failed,err:%v", err)
    		return
    	}
    	defer c.Close()
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    操作字符串

    // 获取字符串
    func getString(c redis.Conn) {
    	res, err := redis.String(c.Do("Get", "username"))
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(res)
    }
    
    // 设置字符串
    func setString(c redis.Conn) {
    	_, err := c.Do("Set", "username", "jack")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    }
    
    // 批量设置字符串
    func setStrings(c redis.Conn) {
    	_, err := c.Do("MSet", "username", "jack", "phone", "188888888")
    	if err != nil {
    		fmt.Println("MSet error:", err)
    		return
    	}
    }
    
    // 批量获取字符串
    func getStrings(c redis.Conn) {
    	res2, err := redis.Strings(c.Do("MGet", "username", "phone"))
    	if err != nil {
    		fmt.Println("MGet error:", err)
    		return
    	}
    	fmt.Println(res2)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    操作 Hash

    // redis Hash 操作 设置
    func setHash(c redis.Conn) {
    	_, err := c.Do("HSet", "names", "jim", "barry")
    	if err != nil {
    		fmt.Println("hset error: ", err)
    		return
    	}
    }
    
    // redis Hash 操作 获取
    func getHash(c redis.Conn) {
    	res3, err := redis.String(c.Do("HGet", "names", "jim"))
    	if err != nil {
    		fmt.Println("hget error: ", err)
    		return
    	}
    	fmt.Println(res3)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    设置过期时间

    // redis 设置过期时间
    func setExpire(c redis.Conn) {
    	_, err := c.Do("expire", "names", "10")
    	if err != nil {
    		fmt.Println("expire err: ", err)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    队列操作

    // redis 队列
    func queueOpr(c redis.Conn) {
    	//入队列
    	_, err := c.Do("lpush", "Queue", "jim", "barry", 9)
    	if err != nil {
    		fmt.Println("lpush error:", err)
    		return
    	}
    	//出队列
    	for true {
    		r, err := redis.String(c.Do("lpop", "Queue"))
    		if err != nil {
    			fmt.Println("lpop error: ", err)
    			return
    		}
    		fmt.Println(r)
    	}
    	//获取队列长度
    	res4, err := redis.Int(c.Do("llen", "Queue"))
    	if err != nil {
    		fmt.Println("llen error: ", err)
    		return
    	}
    	fmt.Println(res4)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    连接池

    // 使用 Pool 初始化连接池
    var pool *redis.Pool
    
    func init() {
    	pool = &redis.Pool{
    		MaxActive:   1024,
    		MaxIdle:     16,
    		IdleTimeout: 300,
    		Dial: func() (redis.Conn, error) {
    			return redis.Dial("tcp", "localhost:6379")
    		},
    	}
    }
    
    
    func main() {
    	c := pool.Get()
    	defer c.Close()
    	_, err := c.Do("Set", "username", "jack")
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	r, err := redis.String(c.Do("Get", "username"))
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(r)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    并发操作

    //redis并发实例
    func main() {
    	conn, err := redis.Dial("tcp", "localhost:6379")
    	if err != nil {
    		fmt.Println("connect redis error:", err)
    		return
    	}
    	defer conn.Close()
    	conn.Send("HSET", "students", "name", "jim", "age", "19")
    	conn.Send("HSET", "students", "score", "100")
    	conn.Send("HSET", "students", "age")
    	conn.Flush()
    	res1, err := conn.Receive()
    	fmt.Printf("Receive res1:%v \n", res1)
    
    	res2, err := conn.Receive()
    	fmt.Printf("Receive res2:%v \n", res2)
    
    	res3, err := conn.Receive()
    	fmt.Printf("Receive res3:%v \n", res3)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    管道化操作

    //redis管道化操作
    func main() {
    	c, err := redis.Dial("tcp", "localhost:6379")
    	if err != nil {
    		fmt.Println("conn redis failed,err:", err)
    		return
    	}
    	defer c.Close()
    
    	c.Send("SET", "username1", "jim")
    	c.Send("SET", "username2", "jack")
    	c.Flush()
    	v, err := c.Receive()
    	fmt.Printf("v:%v,err:%v\n", v, err)
    	v, err = c.Receive()
    	fmt.Printf("v:%v,err:%v\n", v, err)
    
    	v, err = c.Receive()
    	fmt.Printf("v:%v,err:%v\n", v, err)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    事务操作

    // redis事务操作
    func main() {
    	conn, err := redis.Dial("tcp", "localhost:6379")
    	if err != nil {
    		fmt.Println("connect redis error:", err)
    		return
    	}
    	defer conn.Close()
    	conn.Send("MULTI")
    	conn.Send("INCR", "Foo")
    	conn.Send("INCR", "bar")
    	r, err := conn.Do("EXEC")
    	fmt.Println(r)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 有几个 redis 库,但一般用 “github.com/go-redis/redis/v8” --wilinzz
  • 相关阅读:
    Vue插槽
    Bootstrap对溢出内容的两种处理:滚动条和隐藏两种方式
    Vue、React和小程序中的组件通信:父传子和子传父
    看明白Java多线程:CountDownLatch和CyclicBarrier
    win环境安装SuperMap iserver和配置许可
    vue实现类目筛选功能
    Python 实现 PDF 文件转换为图片 / PaddleOCR
    NoSQL 与传统数据库的集成
    Python学习第2天:入门必备(基础篇)
    硬件调试流程(工作总结)
  • 原文地址:https://blog.csdn.net/qq_61735602/article/details/134030786