golang 连接redis
发布日期:2021-05-14 21:18:22 浏览次数:16 分类:精选文章

本文共 4810 字,大约阅读时间需要 16 分钟。

读写Redis(Redis读写缓存)在自动化测试中无疑是一个不可或缺的步骤。以下将以实际项目为例,总结常用的Redis操作方法及其实现步骤。

一、连接Redis

在Redis读写缓存之前,首先需要建立连接。在我的项目中,我们使用Go语言配合redigo库来实现Redis连接池的管理。以下是代码示例:

package request
import (
"fmt"
"encoding/json"
"github.com/garyburd/redigo/redis"
)
var pool *redis.Pool
type mem struct {
Member string
}
func init() {
pool = &redis.Pool{
MaxIdle: 8, // 最大空闲连接数
MaxActive: 0, // 最大活跃连接数(这里设置为0表示单次连接)
IdleTimeout: 100, // 空闲时间超过100秒则断开连接
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp", "10.00.00.00:6379")
},
}
}
func getconnect() redis.Conn {
conn := pool.Get()
return conn
}
func closeconn(conn redis.Conn) {
conn.Close()
}
type Device struct {
Mac string `redis:"mac"`
Sn string `redis:"sn"`
Model string `redis:"model"`
}
// Sethash函数用于批量存储临时设备参数到Redis中的Hash结构
func Sethash(name string, temp map[string]string) bool {
conn := getconnect()
for k, v := range temp {
_, err1 := conn.Do("HMSet", name, k, v)
if err1 != nil {
fmt.Println("HMSet err=", err1)
return false
}
}
closeconn(conn)
return true
}
// Gethashtomap函数用于从Redis中获取Hash结构并转换为map
func Gethashtomap(key string) map[string]string {
conn := getconnect()
myhash, err := redis.StringMap(conn.Do("HGETALL", key))
if err != nil {
fmt.Println(err)
}
closeconn(conn)
return myhash
}
// Gethashtostruce函数用于从Redis中获取Hash结构并转换为Device结构体
func Gethashtostruce(key string) Device {
conn := getconnect()
var device Device
myhash, err := redis.Values(conn.Do("HGETALL", key))
if err != nil {
fmt.Println(err)
}
if err := redis.ScanStruct(myhash, &device); err != nil {
fmt.Println(err)
}
closeconn(conn)
return device
}
// Addtozset函数用于批量将设备ID添加到ZSet中
func Addtozset(name string, mylist []string) []string {
conn := getconnect()
var myzset []string
for k, v := range mylist {
_, err1 := conn.Do("ZADD", name, k, v)
if err1 != nil {
fmt.Println(err1)
}
}
myzset, err := redis.ByteSlices(conn.Do("zrange", name, 0, 10))
if err != nil {
fmt.Println(err)
}
zset := []string{}
for _, v := range myzset {
zset = append(zset, string(v))
}
closeconn(conn)
return zset
}
// Getcode函数用于从Redis中获取验证码
func Getcode(mobile string) string {
conn := getconnect()
var member mem
code, err := redis.String(conn.Do("GET", mobile))
if err != nil {
fmt.Println("redis get failed:", err)
} else {
fmt.Printf("Get mykey: %v \n", code)
}
temp := []byte(code)
err1 := json.Unmarshal(temp, &member)
if err1 != nil {
fmt.Println("unmarshal error:", err1)
}
closeconn(conn)
return code
}

二、常用操作方法

1. String(字符串操作)

  • Set(key, value): 将数据库中名称为key的String赋予指定的value。
  • Get(key): 返回数据库中名称为key的String的value值。
  • GetSet(key, value): 将名称为key的String赋予上一次设置的value值。
  • MGet(key1, key2, ..., keyN): 返回多个字符串键对应的值。
  • SetNX(key, value): 向数据库中添加一个新的String键值对。
  • SetXX(key, time, value): 向数据库中添加一个String键,并同时设置其过期时间。
  • MSet(key1, key2, ..., keyN, value1, value2, ..., valueN): 批量设置多个String键的值。
  • MSetNX(key1, key2, ..., keyN, value1, value2, ..., valueN): 检查并添加多个String键。
  • Incr(key): 对名称为key的String值执行加1操作。
  • Incrby(key, integer): 对名称为key的String值执行加integer运算。
  • Decr(key): 对名称为key的String值执行减1操作。
  • Decrby(key, integer): 对名称为key的String值执行减integer运算。
  • Append(key, value): 将value附加至名称为key的String的末尾。
  • Substr(key, start, end): 提取名称为key的String中从start到end位置的子串。

2. List(列表操作)

  • RPush(key, value): 到名称为key的List的末尾添加一个新的值。
  • LPush(key, value): 到名称为key的List的头部添加一个新的值。
  • LLen(key): 返回名称为key的List的长度。
  • LRange(key, start, end): 返回名称为key的List中从start到end位置的元素。
  • LTrim(key, start, end): 截取名称为key的List中的元素。
  • LIndex(key, index): 返回名称为key的List中指定索引位置的元素。
  • LSet(key, index, value): 将名称为key的List中指定索引位置的元素设为value。
  • LRem(key, count, value): 删除名称为key的List中为value的count次元素。
  • LPop(key): 返回并删除名称为key的List中的首元素。
  • RPop(key): 返回并删除名称为key的List中的尾元素。
  • BLPop(key1, key2, ..., keyN, timeout):ブロック型的LPop命令。
  • BRPop(key1, key2, ..., keyN, timeout):ブロック型的RPop命令。
  • RPopLPush(srckey, dstkey): 从srckey选取尾元素并添加到dstkey的头部。

3. Hash(哈希操作)

  • HSet(key, field, value): 向名称为key的Hash中添加字段field对应的值。
  • HGet(key, field): 返回名称为key的Hash中指定字段field的值。
  • HMGet(key, (fields)): 返回名称为key的Hash中多个字段的值。
  • HMSet(key, (fields)): 向名称为key的Hash中添加多个字段。
  • HIncrby(key, field, integer): 在名称为key的Hash中field字段的值增加integer。
  • HEdx(key, field): 返回_HGet(key, field)和_HDel(key, field)的结果并移除字段。
  • HExists(key, field): 检查名称为key的Hash中是否包含field字段。
  • HDel(key, field): 从名称为key的Hash中删除指定字段。
  • HLen(key): 返回名称为key的Hash中存储的键(字段)总数。
  • HKets(key): 返回名称为key的Hash中的所有键(字段)。
  • HVals(key): 返回名称为key的Hash中所有键对应的值。
  • HGetall(key): 返回名称为key的Hash中所有键及其对应值。

三、连接池管理

在我们的实现中,Redis连接池的管理非常简单,只需在Options结构体中定义PoolSize即可,无需使用其他管理工具。

上一篇:golang操作数据库,三方库gorm更好用
下一篇:Python prettytable美化你的输出

发表评论

最新留言

很好
[***.229.124.182]2025年04月23日 09时14分21秒