安装
import "github.com/go-redis/redis/v7"
go mod tidy
基本操作
创建 redis 客户端
// Create the Redis client
func InitRedisClient() (*redis.Client, error) {
client := redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379", // Redis addr:port
Password: "root", // Password
DB: 0, // The serial number starts at 0, the default is 0, can not be set
MaxRetries: 3, // The maximum number of retries when the command fails. Default is 0, i.e. no retry
PoolSize: 10, // Maximum number of connections in the connection pool. Default is number of CPUs * 10
MinIdleConns: 5, // Minimum number of free connections
})
if err := client.Ping().Err(); err != nil {
return nil, errors.Wrap(err, "ping redis error")
}
return client, nil
}
通过 cient.Ping() 来检查是否成功连接到了 redis 服务器.
String 操作
**
Set(key, value) | 给数据库中名称为key的string赋予值value |
---|---|
GetSet(key, value) | 给名称为key的string赋予上一次的value |
MGet(key1, key2,…, key N) | 返回库中多个string的value |
SetNX(key, value) | 添加string,名称为key,值为value |
SetXX(key, time, value) | 向库中添加string,设定过期时间time |
MSet(key N, value N) | 批量设置多个string的值 |
MSetNX(key N, value N) | 如果所有名称为key i的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) | 名称为key的string的值附加value |
List 操作
**
RPush(key, value) | 在名称为key的list尾添加一个值为value的元素 |
---|---|
LPush(key, value) | 在名称为key的list头添加一个值为value的 元素 |
LLen(key) | 返回名称为key的list的长度 |
LRange(key, start, end) | 返回名称为key的list中start至end之间的元素 |
LTrim(key, start, end) | 截取名称为key的list |
LIndex(key, index) | 返回名称为key的list中index位置的元素 |
LSet(key, index, value) | 给名称为key的list中index位置的元素赋值 |
LRem(key, count, value) | 删除count个key的list中值为value的元素 |
LPop(key) | 返回并删除名称为key的list中的首元素 |
RPop(key) | 返回并删除名称为key的list中的尾元素 |
BLPop(key1, key2,… key N, timeout) | lpop命令的block版本 |
BRPop(key1, key2,… key N, timeout) | rpop的block版本 |
RPopLPush(srckey, dstkey) | 返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部 |
Hash 操作
**
HSet(key, field, value) | 向名称为key的hash中添加元素field |
---|---|
HGet(key, field) | 返回名称为key的hash中field对应的value |
HMget(key, (fields)) | 返回名称为key的hash中field i对应的value |
HMset(key, (fields)) | 向名称为key的hash中添加元素field |
HIncrby(key, field, integer) | 将名称为key的hash中field的value增加integer |
HExists(key, field) | 名称为key的hash中是否存在键为field的域 |
HDel(key, field) | 删除名称为key的hash中键为field的域 |
HLen(key) | 返回名称为key的hash中元素个数 |
HKeys(key) | 返回名称为key的hash中所有键 |
HVals(key) | 返回名称为key的hash中所有键对应的value |
HGetall(key) | 返回名称为key的hash中所有的键(field)及其对应的value |
测试用例
// HashDemo:
func TestHashDemo(t *testing.T) {
fmt.Println("------------------ Welcome to HashDemo ----------------------")
redisClient, err := InitRedisClientTest()
if err != nil {
fmt.Println("StringDemo redisClient is nil")
return
}
//Init a map[string]interface{}
userInfo := make(map[string]interface{})
userInfo["name"] = "charles"
userInfo["age"] = 27
userId := "user:10001"
hash, err := redisClient.HMSet(userId, userInfo).Result()
if err != nil {
fmt.Println(err)
}
fmt.Println(hash)
mapOut := redisClient.HGetAll(userId).Val()
for inx, item := range mapOut {
fmt.Printf("%v:%v\n", inx, item)
}
}
=== RUN TestHashDemo
------------------ Welcome to HashDemo ----------------------
true
name:charles
age:27
--- PASS: TestHashDemo (0.00s)
PASS
Process finished with exit code 0