golang redis(一)

redis安装:https://blog.csdn.net/weixin_40165163/article/details/103184001

redis监控:https://blog.csdn.net/weixin_40165163/article/details/103205330

golang驱动:  github.com/garyburd/redigo/redis

GitHub: https://github.com/zhumengyifang/GoRedisDemo

redis连接:

/**
创建redis连接有密码传入密码即可无密码传入空字符串
*/
func CreateConn(protocolType string, redisAddress string, password string) (redis.Conn, error) {
	var conn redis.Conn
	var err error
	if password == "" {
		conn, err = redis.Dial(protocolType, redisAddress)
	} else {
		conn, err = redis.Dial(protocolType, redisAddress, redis.DialPassword(password))
	}
	if err != nil {
		return nil, err
	}
	return conn, nil
}

使用方式:

    conn, err := internal.CreateConn(protocolType, ipAddress, passWord)
	if err != nil {
		panic(err)
	}
	defer conn.Close()

String

 Set和Get

func GetAndSetDemo(conn redis.Conn) {
	_, err := conn.Do("Set", "demoKey", "demoValue")
	if err != nil {
		fmt.Println(err)
		return
	}

	value, err := redis.String(conn.Do("Get", "demoKey"))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(value)
}

我们使用redis-cli看一下命令执行之前和执行之后的效果 

golang redis(一)_第1张图片

MGET 

func MGetDemo(conn redis.Conn) {
	conn.Do("Set", "Key1", "Value1")
	conn.Do("Set", "Key2", "Value2")

	values, err := redis.Values(conn.Do("MGET", "Key1", "Key2"))
	if err != nil {
		fmt.Println(err)
		return
	}

	var value1 string
	var value2 string

	if _, err := redis.Scan(values, &value1, &value2); err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(value1, value2)
}

 输出:

Value1 Value2

Getset

 用于设置指定 key 的值,并返回 key 的旧值。

func GetSetDemo(conn redis.Conn) {
	_, err := conn.Do("SET", "GetSetDemoK", "GetSetDemoV")
	if err != nil {
		fmt.Println(err)
		return
	}

	value, err := redis.String(conn.Do("GETSET", "GetSetDemoK", "replace"))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(value)
}

输出:

GetSetDemoV

golang redis(一)_第2张图片

 INCR

将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

func IncrDemo(conn redis.Conn) {
	if _, err := conn.Do("SET", "IncrKey", 1); err != nil {
		fmt.Println(err)
		return
	}

	if v, err := conn.Do("INCR", "IncrKey"); err != nil {
		fmt.Println(err)
		return
	} else {
		fmt.Println(v)
	}
}

输出:

2

Incrby

将 key 中储存的数字加上指定的增量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

func IncrByDemo(conn redis.Conn) {
	if _, err := conn.Do("SET", "IncrKey", 1); err != nil {
		fmt.Println(err)
		return
	}

	if v, err := conn.Do("INCRBY", "IncrKey", 5); err != nil {
		fmt.Println(err)
		return
	} else {
		fmt.Println(v)
	}
}

输出:

6

Decrby

将 key 所储存的值减去指定的减量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

func DecrbyDemo(conn redis.Conn){
	if _, err := conn.Do("SET", "DecrbyKey", 1); err != nil {
		fmt.Println(err)
		return
	}

	if v, err := conn.Do("DECRBY", "DecrbyKey", 5); err != nil {
		fmt.Println(err)
		return
	} else {
		fmt.Println(v)
	}
}

输出:

-4

Append

为指定的 key 追加值。如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

func AppendDemo(conn redis.Conn){
	if _, err := conn.Do("SET", "AppendKey", "Go"); err != nil {
		fmt.Println(err)
		return
	}

	if _, err := conn.Do("APPEND", "AppendKey", "Lang"); err != nil {
		fmt.Println(err)
		return
	}
}

golang redis(一)_第3张图片

Del 

用于删除已存在的键。不存在的 key 会被忽略。

func DelDemo(conn redis.Conn) {
	if _, err := conn.Do("SET", "DelKey", "DelValue"); err != nil {
		fmt.Println(err)
		return
	}

	if _, err := conn.Do("DEL", "DelKey"); err != nil {
		fmt.Println(err)
	}
}

golang redis(一)_第4张图片

golang redis(一)_第5张图片

过期时间:

  • EX seconds -- 指定过期时间,单位为秒.
  • PX milliseconds -- 指定过期时间,单位为毫秒.
  • NX -- 仅当键值不存在时设置键值.
  • XX -- 仅当键值存在时设置键值. 
func ExDemo(conn redis.Conn) {
	if _, err := conn.Do("SET", "ExKey", "ExValue", "Ex", 10); err != nil {
		fmt.Println(err)
		return
	}

	time.Sleep(time.Second * 10)

	value, err := redis.String(conn.Do("Get", "ExKey"))
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(value)
}

输出:

redigo: nil returned

 

你可能感兴趣的:(Redis)