golang入门笔记—redis

golang连接和初始化redis

package main

import (
	"context"
	"fmt"
	"time"

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

var redisdb *redis.Client

func initRedis() (err error) {
	redisdb = redis.NewClient(&redis.Options{
		Addr:     "127.0.0.1:6379",
		Password: "",
		DB:       0,
	})
	ctx, calfunc := context.WithTimeout(context.Background(), 10*time.Second)
	_, err = redisdb.Ping(ctx).Result()
	calfunc()
	return
}

func main() {
	err := initRedis()
	if err != nil {
		fmt.Println("connect redis failed,err:", err)
	}
}

redis.Option

type Options struct {
	// 网络类型 tcp 或者 unix.
	// 默认是 tcp.
	Network string
	// redis地址,格式 host:port
	Addr string

	// 新建一个redis连接的时候,会回调这个函数
	OnConnect func(*Conn) error

	// redis密码,redis server没有设置可以为空。
	Password string
	
	// redis数据库,序号从0开始,默认是0,可以不用设置
	DB int

	// redis操作失败最大重试次数,默认不重试。
	MaxRetries int
	
	// 最小重试时间间隔.
	// 默认是 8ms ; -1 表示关闭.
	MinRetryBackoff time.Duration
	
	// 最大重试时间间隔
	// 默认是 512ms; -1 表示关闭.
	MaxRetryBackoff time.Duration

	// redis连接超时时间.
	// 默认是 5 秒.
	DialTimeout time.Duration
	
	// socket读取超时时间
	// 默认 3 秒.
	ReadTimeout time.Duration
	
	// socket写超时时间
	WriteTimeout time.Duration

	// redis连接池的最大连接数.
	// 默认连接池大小等于 cpu个数 * 10
	PoolSize int
	
	// redis连接池最小空闲连接数.
	MinIdleConns int
	// redis连接最大的存活时间,默认不会关闭过时的连接.
	MaxConnAge time.Duration
	
	// 当你从redis连接池获取一个连接之后,连接池最多等待这个拿出去的连接多长时间。
	// 默认是等待 ReadTimeout + 1 秒.
	PoolTimeout time.Duration
	// redis连接池多久会关闭一个空闲连接.
	// 默认是 5 分钟. -1 则表示关闭这个配置项
	IdleTimeout time.Duration
	// 多长时间检测一下,空闲连接
	// 默认是 1 分钟. -1 表示关闭空闲连接检测
	IdleCheckFrequency time.Duration

	// 只读设置,如果设置为true, redis只能查询缓存不能更新。
	readOnly bool
}

执行redis 的set和get

func main() {
	err := initRedis()
	if err != nil {
		fmt.Println("connect redis failed,err:", err)
	}
	ctx, canl := context.WithTimeout(context.Background(), 10*time.Second)
	err = redisdb.Set(ctx, "score", 100, 10*time.Second).Err() //将score设置为100,超时时间为10秒
	defer canl()
	cmder := redisdb.Get(ctx, "score") //得到score的值
	fmt.Println(cmder.Val())           //获取值
	fmt.Println(cmder.Err())           //获取错误
	cmder2, err := redisdb.Get(ctx, "score").Result()//获取值
	if err != nil {
		// 如果返回的错误是key不存在
		if errors.Is(err, redis.Nil) {//redis自带nil来表示key不存在的错误
			return defaultValue, nil
		}
		// 出其他错了
		return "", err
	}
	fmt.Println(cmder2)
}

redis的Do方法

// doDemo rdb.Do 方法使用示例
func doDemo() {
	ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
	defer cancel()

	// 直接执行命令获取错误
	err := rdb.Do(ctx, "set", "key", 10, "EX", 3600).Err()
	fmt.Println(err)

	// 执行命令获取结果
	val, err := rdb.Do(ctx, "get", "key").Result()
	fmt.Println(val, err)
}

//zest

func main() {
	err := initRedis()
	if err != nil {
		fmt.Println("connect redis failed,err:", err)
	}
	//zest
	key := "rank"
	items := []*redis.Z{ //redis.Z为众多redis数据结构中的一种
		&redis.Z{Score: 99, Member: "PHP"},
		&redis.Z{Score: 96, Member: "Golang"},
		&redis.Z{Score: 97, Member: "Python"},
		&redis.Z{Score: 99, Member: "Java"},
	}
	ctx, canl := context.WithTimeout(context.Background(), 10*time.Hour)
	defer canl()
	//把这些元素都追加到key
	redisdb.ZAdd(ctx, key, items...)
	newScore, err := redisdb.ZIncrBy(ctx, key, 10, "Golang").Result() //给golang加10分
	if err != nil {
		fmt.Println("zincrby failed,err:", err)
		return
	}
	fmt.Println("Golang's score is ", newScore)
	// 取分数最高的3个
	ret := redisdb.ZRevRangeWithScores(ctx, key, 0, 2).Val()
	for _, z := range ret {
		fmt.Println(z.Member, z.Score)
	}
	// 取95~100分的
	op := &redis.ZRangeBy{
		Min: "95",
		Max: "100",
	}
	ret, err = redisdb.ZRangeByScoreWithScores(ctx, key, op).Result()
	if err != nil {
		fmt.Printf("zrangebyscore failed, err:%v\n", err)
		return
	}
	for _, z := range ret {
		fmt.Println(z.Member, z.Score)
	}
}

在这里插入图片描述

zrange rank 0 4//score从小到大输出[0:4]
zrange rank 0 4 withscore//连分数也输出
zrevrange rank 0 4 //score从小到大输出[0:4]

参考链接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在 Golang 中连接 Redis 时失败,可能是以下几个原因: 1. Redis 服务器未启动 请确保 Redis 服务器已经在运行。你可以在命令行下输入 `redis-cli` 命令,查看 Redis 是否能够正常启动。 2. Redis 服务器未开启远程访问 默认情况下,Redis 只允许本地访问。如果你需要从远程连接 Redis,需要修改 Redis 的配置文件,将 `bind` 属性设置为 Redis 服务器的 IP 地址。例如,如果 Redis 服务器的 IP 地址为 192.168.1.100,你需要将配置文件中的 `bind` 属性设置为 `bind 192.168.1.100`。 3. Redis 服务器的防火墙未开放端口 如果 Redis 服务器的防火墙开启了,你需要开放 Redis 服务器的端口号。默认情况下,Redis 使用的端口号为 6379。你可以在 Redis 服务器的防火墙中开放该端口。 4. Golang 代码中的连接参数错误 请检查你的 Golang 代码中的连接参数是否正确。例如,你需要确保 Redis 服务器的 IP 地址、端口号、密码等信息都正确。 以下是一个简单的 Golang 代码连接 Redis 的示例: ```go package main import ( "github.com/go-redis/redis" ) func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB }) pong, err := client.Ping().Result() if err != nil { fmt.Println("Failed to ping Redis:", err) return } fmt.Println("Successfully connected to Redis:", pong) } ``` 你可以根据自己的实际情况修改该代码中的连接参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值