〇、redis 配置
1、概况
本文基于 Ubuntu20.04 云服务器配置Redis,且在本地进行 Redis 测试。
2、目录概况

一、配置文件
位于 /config/app.yml
中,目的用于 Redis 初始化:
1 2 3 4 5 6
| redis: addr: "39.104.**.28:6379" password: "password" DB: 0 poolSize: 30 minIdleConn: 30
|
二、main 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| package main
import ( "ChatTest/router" "ChatTest/utils" "github.com/gin-gonic/gin" )
func main() { utils.InitConfig() utils.InitRedis() r := gin.Default() r = router.Router() r.Run(":8000") }
|
二、初始化文件
位于 /utils/system_init.go
文件中,目的用于初始化相关:
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
| package utils
import ( "fmt" "github.com/go-redis/redis/v8" "github.com/spf13/viper" )
var ( Red *redis.Client )
// 初始化初始化文件
func InitConfig() { viper.SetConfigName("app") viper.AddConfigPath("/Users/luliang/GoLand/ChatTest/config") //带绝对路径 err := viper.ReadInConfig() if err != nil { fmt.Println(err) } }
// 初始化 Redis
func InitRedis() { Red = redis.NewClient(&redis.Options{ Addr: viper.GetString("redis.addr"), Password: viper.GetString("redis.password"), DB: viper.GetInt("redis.DB"), PoolSize: viper.GetInt("redis.minIdleConn"), MinIdleConns: viper.GetInt("redis.minIdleConn"), }) fmt.Println("config Redis:", viper.Get("redis")) }
|
三、路由文件
路由文件位于 /router/app.go
中,目的是建立路由:
1 2 3 4 5 6 7 8 9 10 11 12 13
| package router
import ( "ChatTest/service" "github.com/gin-gonic/gin" )
func Router() *gin.Engine { r := gin.Default() r.GET("/send", service.SendMsg) r.GET("/recv", service.RecvMsg) return r }
|
四、实现服务
位于/service/message.go
中,是 HandlerFunc,且实现服务:
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 38 39 40 41 42 43 44 45 46
| package service
import ( "ChatTest/utils" "context" "github.com/gin-gonic/gin" )
func SendMsg(c *gin.Context) { cmd := utils.Red.Publish(context.Background(), "myRedis", "Hello, MyRedis0001!") if cmd != nil { c.JSON(200, gin.H{ "code": 0, "message": "发送成功!", }) return } c.JSON(200, gin.H{ "code": -1, "message": "发送失败!", })
}
func RecvMsg(c *gin.Context) { pubSub := utils.Red.Subscribe(context.Background(), "myRedis") defer pubSub.Close()
ch := pubSub.Channel()
for msg := range ch { c.JSON(200, gin.H{ "code": 0, "message": msg.Payload, }) return }
c.JSON(200, gin.H{ "code": -1, "message": "接受失败!", }) }
|
五、运行流程
这里面的核心就是Redis 的连接,以及在 Redis 中发布消息和订阅消息了。
1、消息的发布
1
| cmd := utils.Red.Publish(context.Background(), "myRedis", "Hello, MyRedis0001!")
|
调用Publish() 函数发布一条消息,这个 Publish() 是 go-redis中封装好的方法。
2、消息的订阅
1
| pubSub := utils.Red.Subscribe(context.Background(), "myRedis")
|
可以看到,go-redis 中使用消息的订阅和发布功能,可以使得消息发送和接受的过程异常简单!
全文完,感谢阅读!