举报投诉联系我们 手机版 热门标签 鳄鱼CMS
您的位置:鳄鱼CMS > golang redis lua GoFrame NoSQL Redis-结果处理

golang redis lua GoFrame NoSQL Redis-结果处理

2023-05-03 15:31 GoFrame教程

golang redis lua GoFrame NoSQL Redis-结果处理

golang redis lua

Golang 是一种新兴的编程语言,它拥有高效、可扩展、安全的特性,使得它成为了当今最流行的编程语言之一。Redis 是一个开源的内存数据库,它可以用来存储键值对,并且可以在多个服务器上进行分布式部署。Lua 是一种轻量级的脚本语言,它可以用来快速开发应用程序。

Golang 与 Redis 的结合使得开发者能够利用 Golang 的高效性来构建 Redis 应用,而不必担心性能问题。此外,Golang 还提供了对 Redis 的原生支持,使得开发者能够直接使用 Redis 功能而无需写大量代码。

Lua 也是 Golang 与 Redis 结合的重要部分。Lua 可以作为一个中间层来连接 Golang 代码和 Redis 数据库,使得开发者能够在 Golang 中直接调用 Redis 功能。此外,Lua 还具有自己独特的特性,例如加密、函数封装、字符串处理、数学运算、文件读写、HTTP 连接、JSON 处理等功能。

package main
import (
	"fmt"

	"github.com/go-redis/redis"
)
func main() {
	client := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379", // use default Addr
		Password: "",               // no password set
		DB:       0,                // use default DB
	})

	val, err := client.Get("key").Result() // get key value from redis server

    if err != nil { // handle error if any 

        fmt.Println(err)

    } else {

        fmt.Println("key", val)

    }  

    err = client.Set("key", "value", 0).Err() // set key value in redis server

    if err != nil { // handle error if any 

        fmt.Println(err)

    } else {

        fmt.Println("key added successfully")

    }  
}

GoFrame NoSQL Redis-结果处理

可以看到通过客户端方法​Do/Receive​获取可供方便转换的​gvar.Var​通用变量结果。通过​gvar.Var​的强大转换功能可以转换为任意的数据类型,如基本数据类型​Int​,​String​,​Strings​,或者结构体​Struct​等等。

Do示例

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	var (
		ctx = gctx.New()
	)

	conn, _ := g.Redis().Conn(ctx)
	defer conn.Close(ctx)
	conn.Do(ctx, "SET", "k", "v")
	v, _ := conn.Do(ctx, "GET", "k")
	fmt.Println(v.String())
}

执行后,输出结果为:

v

Receive示例

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/os/gctx"
)

func main() {
	var (
		ctx = gctx.New()
	)

	conn, _ := g.Redis().Conn(ctx)
	defer conn.Close(ctx)
	_, err := conn.Do(ctx, "SUBSCRIBE", "channel")
	if err != nil {
		panic(err)
	}
	for {
		reply, err := conn.Receive(ctx)
		if err != nil {
			panic(err)
		}
		fmt.Println(reply.Strings())
	}
}

执行后,程序将阻塞等待获取数据。

另外打开一个终端通过​redis-cli​命令进入​Redis Server​,发布一条消息:

$ redis-cli
127.0.0.1:6379> publish channel test
(integer) 1
127.0.0.1:6379>

随后程序终端立即打印出从​Redis Server​获取的数据:

[message channel test]

HashSet示例

HashSet​是我们比较常用的​Redis​数据结构,我们可以非常方便地将​Redis​中的​HashSet​获取并转换为​Golang 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() {
	var (
		ctx = gctx.New()
		err    error
		result *gvar.Var
		key    = "user"
	)

	_, 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())
}


阅读全文
以上是鳄鱼CMS为你收集整理的golang redis lua GoFrame NoSQL Redis-结果处理全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 鳄鱼CMS eyucms.com 版权所有 联系我们