
golang 连接redis
发布日期:2021-05-14 21:18:22
浏览次数:16
分类:精选文章
本文共 4810 字,大约阅读时间需要 16 分钟。
读写Redis(Redis读写缓存)在自动化测试中无疑是一个不可或缺的步骤。以下将以实际项目为例,总结常用的Redis操作方法及其实现步骤。
一、连接Redis
在Redis读写缓存之前,首先需要建立连接。在我的项目中,我们使用Go语言配合redigo库来实现Redis连接池的管理。以下是代码示例:
package requestimport ( "fmt" "encoding/json" "github.com/garyburd/redigo/redis")var pool *redis.Pooltype 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结构并转换为mapfunc 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即可,无需使用其他管理工具。
发表评论
最新留言
很好
[***.229.124.182]2025年04月23日 09时14分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
django-表单之模型表单渲染(六)
2019-03-06
c++之程序流程控制
2019-03-06
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
2019-03-06
有道云笔记 同步到我的博客园
2019-03-06
李笑来必读书籍整理
2019-03-06
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07