Go 语言访问 Redis 笔记

文章目录

Mac 下载 Redis

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

Mac Redix 数据库打开

  • brew services start redis

服务端

  • redis-server

客户端

  • redis-cli

导包

go 复制代码
package main

import (
	"fmt"
	"github.com/gomodule/redigo/redis"
)

连接数据库

go 复制代码
func main() {
	c, err := redis.Dial("tcp", "localhost:6379")
	if err != nil {
		fmt.Println("conn redis failed,err:%v", err)
		return
	}
	defer c.Close()
}

操作字符串

go 复制代码
// 获取字符串
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)
}

操作 Hash

go 复制代码
// 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)
}

设置过期时间

go 复制代码
// redis 设置过期时间
func setExpire(c redis.Conn) {
	_, err := c.Do("expire", "names", "10")
	if err != nil {
		fmt.Println("expire err: ", err)
	}
}

队列操作

go 复制代码
// 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)
}

连接池

go 复制代码
// 使用 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)
}

并发操作

go 复制代码
//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)
}

管道化操作

go 复制代码
//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)
}

事务操作

go 复制代码
// 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)
}
相关推荐
哥布林学者14 分钟前
吴恩达深度学习课程五:自然语言处理 第一周:循环神经网络 (四)RNN 中的梯度现象
深度学习·ai
yuhaiqun198916 分钟前
学服务器训练AI模型:5步路径助力高效入门
运维·服务器·人工智能·笔记·机器学习·ai
雍凉明月夜38 分钟前
深度学习网络笔记Ⅳ(Transformer + VIT)
笔记·深度学习·transformer
做cv的小昊1 小时前
【TJU】信息检索与分析课程笔记和练习(7)数据库检索—Ei
数据库·笔记·学习·全文检索
Chris_12192 小时前
Halcon学习笔记-Day6:工业视觉高级技术应用与实战项目
笔记·学习·halcon
源代码•宸2 小时前
GoLang八股(Go语言基础)
开发语言·后端·golang·map·defer·recover·panic
de之梦-御风2 小时前
【深度学习】模型从训练完成到产线运行的完整使用方式
人工智能·深度学习
_codemonster2 小时前
深度学习实战(基于pytroch)系列完整目录
人工智能·深度学习
Chris_12193 小时前
Halcon学习笔记-Day6进阶:工业级视觉系统核心技术详解
人工智能·python·深度学习·halcon
AI视觉网奇3 小时前
audio2face mh_arkit_mapping_pose_A2F 不兼容
笔记·ue5