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)
}
相关推荐
冷雨夜中漫步3 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
yLDeveloper5 小时前
从模型评估、梯度难题到科学初始化:一步步解析深度学习的训练问题
深度学习
Coder_Boy_6 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
Gain_chance6 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
2401_836235866 小时前
中安未来SDK15:以AI之眼,解锁企业档案的数字化基因
人工智能·科技·深度学习·ocr·生活
njsgcs6 小时前
llm使用 AgentScope-Tuner 通过 RL 训练 FrozenLake 智能体
人工智能·深度学习
2的n次方_7 小时前
CANN ascend-transformer-boost 架构解析:融合注意力算子管线、长序列分块策略与图引擎协同机制
深度学习·架构·transformer
人工智能培训7 小时前
具身智能视觉、触觉、力觉、听觉等信息如何实时对齐与融合?
人工智能·深度学习·大模型·transformer·企业数字化转型·具身智能
Gain_chance7 小时前
36-学习笔记尚硅谷数仓搭建-DWS层数据装载脚本
大数据·数据仓库·笔记·学习
肖永威7 小时前
macOS环境安装/卸载python实践笔记
笔记·python·macos