安装
import "github.com/go-redis/redis/v7"go mod tidy
基本操作
创建 redis 客户端
// Create the Redis clientfunc InitRedisClient() (*redis.Client, error) {client := redis.NewClient(&redis.Options{Addr: "127.0.0.1:6379", // Redis addr:portPassword: "root", // PasswordDB: 0, // The serial number starts at 0, the default is 0, can not be setMaxRetries: 3, // The maximum number of retries when the command fails. Default is 0, i.e. no retryPoolSize: 10, // Maximum number of connections in the connection pool. Default is number of CPUs * 10MinIdleConns: 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"] = 27userId := "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 ----------------------truename:charlesage:27--- PASS: TestHashDemo (0.00s)PASSProcess finished with exit code 0
