go : go-redis 基础操作

苍茫大地一剑尽挽破,何处繁华笙歌落
具体代码在: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)

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
我认为你可能指的是"Gache"而不是"Gaache"。Gache是一个基于Go语言的缓存库,而"go-redis"是一个用于Go语言的Redis客户端库。下面是它们的区别和各自的优缺点: Gache的特点和优缺点: - 特点:Gache是一个内存缓存库,它提供了简单而高效的缓存功能,可以用于在应用程序中存储和访问数据。它支持设置过期时间、LRU(最近最少使用)策略等常见的缓存功能。 - 优点:Gache非常轻量级,易于使用和集成到应用程序中。它适用于需要快速缓存数据的场景,可以显著提高应用程序的性能和响应时间。 - 缺点:Gache是基于内存的缓存库,因此有一定的内存限制。如果缓存数据量较大,可能会消耗较多的内存资源。另外,Gache不支持分布式缓存,因此在多个节点之间无法共享缓存。 go-redis的特点和优缺点: - 特点:go-redis是Go语言中与Redis交互的客户端库,它提供了丰富的功能和API,用于连接、操作和管理Redis数据库。它支持各种Redis命令、事务、发布/订阅等功能。 - 优点:go-redis是一个成熟且广泛使用的Redis客户端库,具有稳定性和可靠性。它提供了丰富的功能和选项,可以满足各种复杂的业务需求。 - 缺点:go-redis的主要缺点是它需要与Redis服务器进行网络通信,因此在某些情况下可能会导致一定的网络延迟。另外,由于它是一个客户端库,需要与Redis服务器进行连接,因此在高并发或大规模应用中可能需要管理连接池和资源消耗。 综上所述,Gache适用于简单且轻量级的内存缓存需求,适合单个应用程序。而go-redis适用于与Redis服务器进行交互的更复杂场景,支持更多功能和选项。选择适合自己需求的库取决于具体的应用场景和性能要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行人已

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值