golang:go-redis 基本操作

golang:go-redis 基本操作

stromXu 449 2022-05-20

1、下载go-redis库

go get github.com/go-redis/redis

2、 初始化redis

import (
	"fmt"

	"github.com/go-redis/redis"
)

// 声明一个全局的redisDb变量
var redisDb *redis.Client

func initRedisClient() (err error) {
	redisDb = redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "",
		DB:       0,
	})
	_, err = redisDb.Ping().Result()
	if err != nil {
		return err
	}
	return nil
}

2.1 、 链接redis

func main() {
	err := initRedisClient()
	if err != nil {
		//redis连接错误
		panic(err)
	}
	fmt.Println("Redis连接成功")
 }

3.0、基础操作
3.1 、get/set

func main() {
	err := initRedisClient()
	if err != nil {
		//redis连接错误
		panic(err)
	}
	fmt.Println("Redis连接成功")
  
  
  var key string = "test-key"
	var keyValue string = "test"
	err = redisDb.Set(key, keyValue, 0).Err()
	if err != nil {
		panic(err)
	}

	var value string
	value, err = redisDb.Get("test-key").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("key:", value)
  
 }

3.2 、getSet / setNx

func main() {
	err := initRedisClient()
	if err != nil {
		//redis连接错误
		panic(err)
	}
	fmt.Println("Redis连接成功")
  
  
  var key string = "test-key"
	var keyValue string = "test"
	var oldValue string
	oldValue, err = redisDb.GetSet(key, "test").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(oldValue)

	//如果key不存在,则设置这个key的值,并设置key的失效时间。如果key存在,则设置不生效
	err = redisDb.SetNX(key, "test", 0).Err()
	if err != nil {
		panic(err)
	}
  
 }

3.3 、MSet / MGet :批量设置

func main() {
	err := initRedisClient()
	if err != nil {
		//redis连接错误
		panic(err)
	}
	fmt.Println("Redis连接成功")
  
  //批量设置多个key-value值
	err = redisDb.MSet("key1", "value1", "key2", "value2").Err()
	if err != nil {
		panic(err)
	}

	// MGet函数可以传入任意个key,一次性返回多个值。
	// 这里Result返回两个值,第一个值是一个数组,第二个值是错误信息
	values, err := redisDb.MGet("key1", "key2", "key3").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(values)
  
 }

3.4 、Incr/ Decr:自增/自减

func main() {
	err := initRedisClient()
	if err != nil {
		//redis连接错误
		panic(err)
	}
	fmt.Println("Redis连接成功")
  
  //Incr()设置一个age测试自增、自减
	err = redisDb.Set("number", "0", 0).Err()
	if err != nil {
		panic(err)
	}
	redisDb.Incr("number") // 自增

	redisDb.IncrBy("number", 10) // 自增 +10
	val, err = redisDb.Get("number").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(val)

	redisDb.Decr("number")      // 自减
	redisDb.DecrBy("number", 3) //-3 此时age的值是22

	val, err = redisDb.Get("number").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(val)
 
 }

3.5 、GetRange/ Append / StrLen:字符串截取 /追加/长度

func main() {
	err := initRedisClient()
	if err != nil {
		//redis连接错误
		panic(err)
	}
	fmt.Println("Redis连接成功")
    
  //GetRange() : key,start-从那个位置开始截取,endt-从那个位置结束
	val, err := redisDb.GetRange("test-key", 0, 4).Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(val)
  
  //会在key-value后面增加 '你好'
	length, err := redisDb.Append("test-key", "你好").Result()
	if err != nil {
		panic(err)
	}
	fmt.Print("当前缓存key的长度", length)

  var result string
	result, err = redisDb.Get("test-key").Result()
	fmt.Print(result)
  
  //获取长度
	num, err := redisDb.StrLen("test-key").Result()
	if err != nil {
		panic(err)
	}
	fmt.Printf("当前缓存key的长度为: %v\n", num)

	//------------------ Del():删除 /Expire:设置过期时间---------------------------------------
	var expire bool
	expire, err = redisDb.Expire("test-key", 100).Result()
	fmt.Print(expire)

	var length2 int64
	length2, err = redisDb.Del("test-key").Result()
	fmt.Print(length2)
 
 }

3.6 、Expire/ Del:过期时间/删除

func main() {
	err := initRedisClient()
	if err != nil {
		//redis连接错误
		panic(err)
	}
	fmt.Println("Redis连接成功")
 
	//------------------ Del():删除 /Expire:设置过期时间---------------------------------------
	var expire bool
	expire, err = redisDb.Expire("test-key", 100).Result()
	fmt.Print(expire)

	var length2 int64
	length2, err = redisDb.Del("test-key").Result()
	fmt.Print(length2)
 
 }

# go