1 Star 0 Fork 25

zhiyubujian / gfstudy

forked from goflyfox / gfstudy 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
09.goframeRedis操作.md 3.99 KB
一键复制 编辑 原始数据 按行查看 历史
zcool321@sina.com 提交于 2020-03-23 00:07 . update redis example

GoFrame Redis操作

Redis客户端由gredis模块实现,底层采用了链接池设计。

一、Redis介绍

Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。性能出色:Redis读取的速度是110000次/s,写的速度是81000次/s。

支持类型

String: 字符串、Hash: 散列、List: 列表、Set: 集合、Sorted Set: 有序集合

PUB/SUB:发布订阅;

在5.0支持了全新数据类型:Streams

使用场景

缓存,登录验证码,消息队列,过滤器,分布式锁,限流等

二、Redis配置文件

绝大部分情况下推荐使用g.Redis单例方式来操作redis。因此同样推荐使用配置文件来管理Redis配置,在config.toml中的配置示例如下:

# Redis数据库配置
[redis]
    default = "127.0.0.1:6379,0"
    cache   = "127.0.0.1:6379,1,123456?idleTimeout=600"

其中,Redis的配置格式为:host:port[,db,pass?maxIdle=x&maxActive=x&idleTimeout=x&maxConnLifetime=x]

各配置项说明如下:

配置项名称 是否必须 默认值 说明
host - 地址
port - 端口
db 0 数据库
pass - 授权密码
maxIdle 0 允许限制的连接数(0表示不闲置)
maxActive 0 最大连接数量限制(0表示不限制)
idleTimeout 60 连接最大空闲时间(单位秒,不允许设置为0)
maxConnLifetime 60 连接最长存活时间(单位秒,不允许设置为0)

其中的defaultcache分别表示配置分组名称,我们在程序中可以通过该名称获取对应配置的redis对象。不传递分组名称时,默认使用redis.default配置分组项)来获取对应配置的redis客户端单例对象。

三、结果处理

可以看到通过客户端方法Do/Receive获取的数据都是二进制形式[]byte的,需要开发者手动进行数据转换。

当然,gredis模块也提供了DoVar/ReceiveVar方法,用以获取可供方便转换的gvar.Var通用变量结果。

通过gvar.Var的强大转换功能可以转换为任意的数据类型,如基本数据类型Int,String,Strings,或者结构体Struct等等。

四、示例

目录结构

D:.
│  go.mod
│  go.sum
│  main.go

└─config
        config.toml

main.go

package main

import (
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/util/gconv"
)

func main() {
	// redis字符串操作
	g.Redis().Do("SET", "k", "v")
	v, _ := g.Redis().Do("GET", "k")
	g.Log().Info(gconv.String(v))

	// 获取cache链接
	v2, _ := g.Redis("cache").Do("GET", "k")
	g.Log().Info(gconv.String(v2))

	// DoVar转换
	v3, _ := g.Redis().DoVar("GET", "k")
	g.Log().Info(v3.String())

	// setex
	g.Redis().Do("SETEX", "keyEx", 2000, "v4")
	v4, _ := g.Redis().DoVar("GET", "keyEx")
	g.Log().Info(v4.String())

	// list
	g.Redis().Do("RPUSH", "keyList", "v5")
	v5, _ := g.Redis().DoVar("LPOP", "keyList")
	g.Log().Info(v5.String())

	// hash
	g.Redis().Do("HSET", "keyHash", "v1", "v6")
	v6, _ := g.Redis().DoVar("HGET", "keyHash", "v1")
	g.Log().Info(v6.String())

	// set
	g.Redis().Do("SADD", "keySet", "v7")
	v7, _ := g.Redis().DoVar("SPOP", "keySet")
	g.Log().Info(v7.String())

	// sort set
	g.Redis().Do("ZADD", "keySortSet", 1, "v8")
	v8, _ := g.Redis().DoVar("ZREM", "keySortSet", "v8")
	g.Log().Info(v8.Int())

}

config.toml

# Redis数据库配置
[redis]
    default = "127.0.0.1:6379,0"
    cache   = "127.0.0.1:6379,1,123456?idleTimeout=600"
1
https://gitee.com/fenglingyouyou/gfstudy.git
git@gitee.com:fenglingyouyou/gfstudy.git
fenglingyouyou
gfstudy
gfstudy
master

搜索帮助