安装

  1. import "github.com/go-redis/redis/v7"
  2. go mod tidy

注意:

基本操作

创建 redis 客户端

  1. // Create the Redis client
  2. func InitRedisClient() (*redis.Client, error) {
  3. client := redis.NewClient(&redis.Options{
  4. Addr: "127.0.0.1:6379", // Redis addr:port
  5. Password: "root", // Password
  6. DB: 0, // The serial number starts at 0, the default is 0, can not be set
  7. MaxRetries: 3, // The maximum number of retries when the command fails. Default is 0, i.e. no retry
  8. PoolSize: 10, // Maximum number of connections in the connection pool. Default is number of CPUs * 10
  9. MinIdleConns: 5, // Minimum number of free connections
  10. })
  11. if err := client.Ping().Err(); err != nil {
  12. return nil, errors.Wrap(err, "ping redis error")
  13. }
  14. return client, nil
  15. }

通过 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

测试用例

  1. // HashDemo:
  2. func TestHashDemo(t *testing.T) {
  3. fmt.Println("------------------ Welcome to HashDemo ----------------------")
  4. redisClient, err := InitRedisClientTest()
  5. if err != nil {
  6. fmt.Println("StringDemo redisClient is nil")
  7. return
  8. }
  9. //Init a map[string]interface{}
  10. userInfo := make(map[string]interface{})
  11. userInfo["name"] = "charles"
  12. userInfo["age"] = 27
  13. userId := "user:10001"
  14. hash, err := redisClient.HMSet(userId, userInfo).Result()
  15. if err != nil {
  16. fmt.Println(err)
  17. }
  18. fmt.Println(hash)
  19. mapOut := redisClient.HGetAll(userId).Val()
  20. for inx, item := range mapOut {
  21. fmt.Printf("%v:%v\n", inx, item)
  22. }
  23. }
  24. === RUN TestHashDemo
  25. ------------------ Welcome to HashDemo ----------------------
  26. true
  27. name:charles
  28. age:27
  29. --- PASS: TestHashDemo (0.00s)
  30. PASS
  31. Process finished with exit code 0

[redis_test.go]

链接