当前位置: 首页 > 工具软件 > Go-Redis > 使用案例 >

go : go-redis 基础操作

宫元徽
2023-12-01

苍茫大地一剑尽挽破,何处繁华笙歌落
具体代码在:https://gitee.com/hjx_RuGuoYunZhiDao/strom-huang-go/tree/master/go_redis

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)
 
 }

4、所有代码

package main

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
}

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

	// ----------------------------------get/set------------------------
	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)

	//------------------getSet / setNx---------------------------------------
	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)
	}

	//------------------MSet / MGet---------------------------------------
	//批量设置多个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)

	//------------------GetRange():字符串截取 /Incr():增加+1 / IncrBy():按指定步长增加 /Decr  自减 /DecrBy 指定步数递减---------------------------------------
	//GetRange() : key,start-从那个位置开始截取,endt-从那个位置结束
	val, err := redisDb.GetRange("test-key", 0, 4).Result()
	if err != nil {
		panic(err)
	}
	fmt.Println(val)

	///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)

	//------------------ Append():追加 /StrLen():获取长度---------------------------------------
	//会在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)

}

 类似资料: