Go 语言是一种强大的编程语言,它可以用来构建高性能的 Web 应用程序。Go 语言提供了一个强大的标准库,可以帮助开发者快速构建 Web 应用程序。此外,Go 还支持使用 Redis 来存储数据。Redis 是一个开源的内存数据库,它可以帮助开发者快速存储和获取数据。
使用 Go 连接 Redis 非常容易,首先需要安装 Go 的 Redis 客户端库:
go get github.com/go-redis/redis然后就可以使用这个库来连接 Redis 服务器了。在连接之前,需要先获取服务器的地址、端口、密码等信息:
client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB })然后就可以使用 client 变量来进行 Redis 的相关操作了。例如,我们可以使用 Set 方法来存储一个 key-value 键值对:
err := client.Set("key", "value", 0).Err()也可以使用 Get 方法来获取 key 的 value 值:
val, err := client.Get("key").Result()
此外,Go 还有很多高级的 Redis 操作方法,例如 HSet、HGet、HMSet 等方法都是 Go 中常用的 Redis 操作方法。Go 还有很多高级特性,例如 Pub/Sub、Pipelining 等特性都是 Go 中常用的特性。因此,Go 能够很好地利用 Redis 的优势来快速存储和获取数据。
我们最常用的是Do
方法,执行同步指令,通过向Redis Server
发送对应的Redis API
命令,来使用Redis Server
的服务。Do
方法最大的特点是内部自行从连接池中获取连接对象,使用完毕后自动丢回连接池中,开发者无需手动调用Close
方法,方便使用。
package main
import (
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
)
v, _ := g.Redis().Do(ctx, "SET", "k", "v")
fmt.Println(v.String())
}
package main
import (
"fmt"
"github.com/gogf/gf/v2/container/gvar"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
err error
result *gvar.Var
key = "user"
ctx = gctx.New()
)
_, err = g.Redis().Do(ctx, "HSET", key, "id", 10000)
if err != nil {
panic(err)
}
_, err = g.Redis().Do(ctx,"HSET", key, "name", "john")
if err != nil {
panic(err)
}
result, err = g.Redis().Do(ctx,"HGETALL", key)
if err != nil {
panic(err)
}
fmt.Println(result.Map())
// May Output:
// map[id:10000 name:john]
}
我们可以通过map
参数执行HMSET
操作。
package main
import (
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/util/gutil"
)
func main() {
var (
ctx = gctx.New()
key = "user_100"
data = g.Map{
"name": "gf",
"sex": 0,
"score": 100,
}
)
_, err := g.Redis().Do(ctx, "HMSET", append(g.Slice{key}, gutil.MapToSlice(data)...)...)
if err != nil {
g.Log().Fatal(ctx, err)
}
v, err := g.Redis().Do(ctx, "HMGET", key, "name")
if err != nil {
g.Log().Fatal(ctx, err)
}
fmt.Println(v.Slice())
// May Output:
// [gf]
}
我们可以通过struct
参数执行HMSET
操作。
package main
import (
"fmt"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
"github.com/gogf/gf/v2/util/gutil"
)
func main() {
type User struct {
Name string `json:"name"`
Sex int `json:"sex"`
Score int `json:"score"`
}
var (
ctx = gctx.New()
key = "user_100"
data = &User{
Name: "gf",
Sex: 0,
Score: 100,
}
)
_, err := g.Redis().Do(ctx,"HMSET", append(g.Slice{key}, gutil.StructToSlice(data)...)...)
if err != nil {
g.Log().Fatal(ctx, err)
}
v, err := g.Redis().Do(ctx,"HMGET", key, "name")
if err != nil {
g.Log().Fatal(ctx, err)
}
fmt.Println(v.Slice())
// May Output:
// [gf]
}
当给定的参数为map
, slice
, struct
时,gredis
内部支持自动对其使用json
序列化,并且读取数据时可使用gvar.Var
的转换功能实现反序列化。
package main
import (
"fmt"
"github.com/gogf/gf/v2/container/gvar"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
var (
ctx = gctx.New()
err error
result *gvar.Var
key = "user"
data = g.Map{
"id": 10000,
"name": "john",
}
)
_, err = g.Redis().Do(ctx, "SET", key, data)
if err != nil {
panic(err)
}
result, err = g.Redis().Do(ctx,"GET", key)
if err != nil {
panic(err)
}
fmt.Println(result.Map())
}
package main
import (
"fmt"
"github.com/gogf/gf/v2/container/gvar"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gctx"
)
func main() {
type User struct {
Id int
Name string
}
var (
ctx = gctx.New()
err error
result *gvar.Var
key = "user"
user = g.Map{
"id": 10000,
"name": "john",
}
)
_, err = g.Redis().Do(ctx, "SET", key, user)
if err != nil {
panic(err)
}
result, err = g.Redis().Do(ctx, "GET", key)
if err != nil {
panic(err)
}
var user2 *User
if err = result.Struct(&user2); err != nil {
panic(err)
}
fmt.Println(user2.Id, user2.Name)
}
基本介绍资源管理是指可以将任意文件/目录打包为Golang源码文件,并且编译到可执行文件中,随着可执行文件发布。资源文件在程序...
以下常用方法列表,文档更新可能滞后于代码新特性,更多的方法及示例请参考代码文档:https://pkg.go.dev/github.com/gogf/gf/v2...
Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」。比如,在一个博客应用中,你可能会创建如下几个视图:博客首...
ASP.NET Calendar SelectWeekText 属性 Calendar 控件定义和用法 SelectWeekText 属性用于规定在日历中为选取整个周而显示的文本...
配置一个 ASP.NET 应用程序的行为是由以下两个配置文件中的不同设置决定的:machine.config web.configmachine.config 文件包含...
WebSecurity 属性 - CurrentUserNameWebSecurity 对象定义 CurrentUserName 属性是当前用户在 WebSecurity 数据库中用户资料表...