安装redis客户端

  1. go get -u github.com/go-redis/redis

常见的全局命令

全局命令是对任意类型的键都有效果的

代码中展示的只是部分命令的使用

  1. package main
  2. import (
  3. "fmt"
  4. "github.com/go-redis/redis"
  5. "time"
  6. )
  7. const (
  8. Address = "127.0.0.1:6379"
  9. Password = "Abcdef@123456"
  10. DB = 3
  11. )
  12. var client *redis.Client
  13. func init() {
  14. client = redis.NewClient(&redis.Options{
  15. Addr: Address,
  16. Password: Password,
  17. DB: DB, // 选择的库
  18. PoolSize: 20, // 设置连接数,默认10个连接
  19. })
  20. }
  21. func main() {
  22. // 获取所有健
  23. keys := client.Keys("*").Val()
  24. fmt.Println(keys)
  25. //
  26. size := client.DbSize().Val()
  27. fmt.Println(size)
  28. exist := client.Exists("age", "name").Val()
  29. fmt.Println(exist)
  30. // 删除键,删除成功返回删除的数,删除失败返回0
  31. del := client.Del("unknownKey").Val()
  32. fmt.Println(del)
  33. // 查看键的有效时间
  34. ttl := client.TTL("age").Val()
  35. fmt.Println(ttl)
  36. // 给键设置有效时间,设置成功返回true,失败返回false
  37. expire := client.Expire("age",time.Second*86400).Val()
  38. fmt.Println(expire)
  39. // 查看键的类型(string,hash,list,set,zset...)
  40. Rtype := client.Type("store:finish:bill:list").Val()
  41. fmt.Println(Rtype)
  42. // 给键重命令,成功返回true,失败false
  43. Rname := client.RenameNX("age","newAge").Val()
  44. fmt.Println(Rname)
  45. // 从redis中随机返回一个键
  46. key := client.RandomKey().Val()
  47. fmt.Println(key)
  48. // 设置
  49. redisSet()
  50. }
  51. func redisSet() {
  52. // 设置键值对, 10秒后消失
  53. set1 := client.Set("age", 18, time.Second*10).Val()
  54. fmt.Println(set1) // OK
  55. // key不存在 则设置成功
  56. set2 := client.SetNX("age", 18, time.Hour * 1).Val()
  57. fmt.Println(set2) // false
  58. // key存在则设置成功
  59. set3 := client.SetXX("age", 19, time.Hour*1).Val()
  60. fmt.Println(set3) // true
  61. // 批量设置
  62. set4 := client.MSet("age1", 17, "name", "Tom").Val()
  63. fmt.Println(set4) //OK
  64. // 获取一个键的值 不存在返回空,存在返回值
  65. res1 := client.Get("age111").Val()
  66. fmt.Println("res:", res1)
  67. // 批量获取,获取成功返回slice类型的结果数据
  68. get2 := client.MGet("age", "age1", "age2").Val()
  69. fmt.Println(get2) // [30 40 50]
  70. // 对指定的键进行自增操作
  71. incr1 := client.Incr("age").Val()
  72. fmt.Println(incr1) // 31
  73. // 对指定键进行自减操作
  74. decr1 := client.Decr("age1").Val()
  75. fmt.Println(decr1) //39
  76. // 自增指定的值
  77. incr2 := client.IncrBy("age", 10).Val()
  78. fmt.Println(incr2) // 41
  79. // 自减指定的值
  80. decr2 := client.DecrBy("age1", 10).Val()
  81. fmt.Println(decr2) // 29
  82. // 在key后面追加指定的值,返回字符串的长度
  83. append1 := client.Append("age2", "abcd").Val()
  84. fmt.Println(append1) // 6
  85. // 获取一个键的值得长度
  86. strlen1 := client.StrLen("age2").Val()
  87. fmt.Println(strlen1) //6
  88. // 设置一个键的值,并返回原有的值
  89. getset1 := client.GetSet("age2", "hello golang").Val()
  90. fmt.Println(getset1) // 50abcd
  91. // 设置键的值,在指定的位置
  92. _ = client.SetRange("age2", 0, "H")
  93. fmt.Println(client.Get("age2").Val()) // Hello golang
  94. // 截取一个键的值的部分,返回截取的部分
  95. newStr := client.GetRange("age2", 6, 11).Val()
  96. fmt.Println(newStr) //golang
  97. }

hash类型操作

  1. func hash() {
  2. key := "account"
  3. field1 := "name"
  4. fields := map[string]interface{}{
  5. "addr":"Shanghai",
  6. "age": 19,
  7. "skills":"golang",
  8. "demo1":"aaa",
  9. "demo2":"bbb",
  10. }
  11. //hash 设置一个键的field
  12. _ = client.HSet(key,field1,"zhangsan")
  13. // hash 批量设置 ,第二个参数是map类型
  14. status := client.HMSet(key,fields).Val()
  15. fmt.Println(status) //ok
  16. // hash 删除键的field,返回删除field的个数
  17. _ = client.HDel(key,"demo2").Val()
  18. //hash 获取field的值
  19. name := client.HGet(key,"name").Val()
  20. fmt.Println(name) //zhangsan
  21. //hash 获取多个field值,返回slice
  22. values := client.HMGet(key,"name","age").Val()
  23. fmt.Println(values)//[zhangsan 99]
  24. //hash 获取所有的值 返回map
  25. valueAll := client.HGetAll(key).Val()
  26. fmt.Println(valueAll) //map[addr:beijing age:99 demo1:aaa name:zhangsan skills:golang]
  27. // hash 获取所有field 返回slice
  28. fs := client.HKeys(key).Val()
  29. fmt.Println(fs) //[name addr age skills demo1]
  30. // hash 获取所有filed的值 返回slice
  31. vs := client.HVals(key).Val()
  32. fmt.Println(vs) //[zhangsan beijing 99 golang aaa]
  33. // 判断一个filed是否存在 返回bool
  34. e := client.HExists(key,"skills").Val()
  35. fmt.Println(e) //true
  36. // hash field自增
  37. n := client.HIncrBy(key,"age",1).Val()
  38. fmt.Println(n) //100
  39. }

image.png

list类型操作

  1. func list() {
  2. key := "demo"
  3. client.Del(key)
  4. for i := 0; i < 5; i++ {
  5. client.LPush(key, "e-"+strconv.Itoa(i))
  6. }
  7. // 获取list 长度
  8. length := client.LLen(key).Val()
  9. fmt.Println(length) //5
  10. }

image.png

  1. func list() {
  2. key := "demo"
  3. client.Del(key)
  4. for i := 0; i < 5; i++ {
  5. client.LPush(key, "e-"+strconv.Itoa(i))
  6. }
  7. // 获取list 长度
  8. length := client.LLen(key).Val()
  9. fmt.Println(length) //5
  10. // 获取指定下标元素
  11. value1 := client.LIndex(key, 0).Val()
  12. fmt.Println(value1) //e-4
  13. // 获取所有元素
  14. vs := client.LRange(key, 0, -1).Val()
  15. fmt.Println(vs) //[e-4 e-3 e-2 e-1 e-0]
  16. // 修改指定下标的元素值
  17. status := client.LSet(key, 0, "golang").Val()
  18. fmt.Println(status) //ok
  19. // 从右边插入元素
  20. client.RPush(key, "e-right")
  21. // 从左边插入元素
  22. client.LPush(key, "e-left")
  23. // 从list最右边弹出元素
  24. v1 := client.RPop(key).Val()
  25. fmt.Println(v1) // e-right
  26. // 从list最左边弹出元素
  27. v2 := client.LPop(key).Val()
  28. fmt.Println(v2) // e-left
  29. // 删除指定元素
  30. n := client.LRem(key, 0, "e-3").Val()
  31. fmt.Println(n) //1
  32. status1 := client.LTrim(key, 0, 1).Val()
  33. fmt.Println(status1) //ok
  34. }

image.png

set类型操作