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) |
其中的default
和cache
分別表示配置分組名稱,我們在程序中可以通過該名稱獲取對應配置的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"
代碼地址
項目視頻
- 騰訊課堂教程地址:GoFrame基礎教程-快速入門
- bilibili教程地址:GoFrame基礎教程-快速入門
- 公衆號搜索:GoWeb學習之路