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)
}
相关推荐
断剑zou天涯5 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
Naiva6 小时前
【小技巧】Microchip 把 MPLAB X IDE工程编码改成 UTF-8
笔记
金融小师妹7 小时前
基于NLP语义解析的联储政策信号:强化学习框架下的12月降息概率回升动态建模
大数据·人工智能·深度学习·1024程序员节
w***48827 小时前
Linux安装redis
linux·运维·redis
山顶夕景8 小时前
【RL】Does RLVR enable LLMs to self-improve?
深度学习·llm·强化学习·rlvr
cg50179 小时前
基于 Bert 基本模型进行 Fine-tuned
人工智能·深度学习·bert
im_AMBER10 小时前
Leetcode 59 二分搜索
数据结构·笔记·学习·算法·leetcode
天殇凉10 小时前
AC自动机学习笔记
java·笔记·学习
想搞艺术的程序员11 小时前
深入 NSQ 延迟消息实现原理:设计巧思与性能优化
性能优化·golang·nsq
AA陈超11 小时前
从0开始学习 **Lyra Starter Game** 项目
c++·笔记·学习·游戏·ue5·lyra