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()
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看一下命令执行之前和执行之后的效果
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
用于设置指定 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
将 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
将 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
将 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
为指定的 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
}
}
用于删除已存在的键。不存在的 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)
}
}
过期时间:
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