目录安装Redis客户端连接redis
基本指令Keys():根据正则获取keys
Type():获取key对应值得类型
Del():删除缓存项
Exists():检测缓存项是否存在
Expire(),ExpireAt():设置有效期
TTL(),PTTL():获取有效期
DBSize():查看当前数据库key的数量
FlushDB():清空当前数据
FlushAll():清空所有数据库
字符串(string)类型Set():设置
SetEX():设置并指定过期时间
SetNX():设置并指定过期时间
Get():获取
GetRange():字符串截取
Incr():增加+1
IncrBy():按指定步长增加
Decr():减少-1
DecrBy():按指定步长减少
Append():追加
StrLen():获取长度
列表(list)类型LPush():将元素压入链表
LInsert():在某个位置插入新元素
LSet():设置某个元素的值
LLen():获取链表元素个数
LIndex():获取链表下标对应的元素
LRange():获取某个选定范围的元素集
从链表左侧弹出数据
LRem():根据值移除元素
集合(set)类型SAdd():添加元素
SPop():随机获取一个元素
SRem():删除集合里指定的值
SSMembers():获取所有成员
SIsMember():判断元素是否在集合中
SCard():获取集合元素个数
SUnion():并集,SDiff():差集,SInter():交集
有序集合(zset)类型ZAdd():添加元素
ZIncrBy():增加元素分值
ZRange()、ZRevRange():获取根据score排序后的数据段
ZRangeByScore()、ZRevRangeByScore():获取score过滤后排序的数据段
ZCard():获取元素个数
ZCount():获取区间内元素个数
ZScore():获取元素的score
ZRank()、ZRevRank():获取某个元素在集合中的排名
ZRem():删除元素
ZRemRangeByRank():根据排名来删除
ZRemRangeByScore():根据分值区间来删除
哈希(hash)类型HSet():设置
HMset():批量设置
HGet():获取某个元素
HGetAll():获取全部元素
HDel():删除某个元素
HExists():判断元素是否存在
HLen():获取长度
安装Redis客户端
Go语言中使用第三方库https://github.com/go-redis/redis连接Redis数据库并进行操作。使用以下命令下载并安装:go get github.com/go-redis/redis/v8注:导入时指定了版本v8,忽略版本是一个常见错误
连接redis说明:Background返回一个非空的Context。 它永远不会被取消,没有值,也没有期限。 它通常在main函数,初始化和测试时使用,并用作传入请求的顶级上下文。
示例:package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
//Background返回一个非空的Context。 它永远不会被取消,没有值,也没有期限。
//它通常在main函数,初始化和测试时使用,并用作传入请求的顶级上下文。
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
pong, err := rdb.Ping(ctx).Result()
if err != nil {
fmt.Printf("连接redis出错,错误信息:%v", err)
}
fmt.Println("成功连接redis")
}
基本指令
Keys():根据正则获取keys
示例:package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
//*表示获取所有的key
keys, err := rdb.Keys(ctx, "*").Result()
if err != nil {
panic(err)
}
fmt.Println(keys)
}
Type():获取key对应值得类型
Type()方法用户获取一个key对应值的类型
示例:package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
vType, err := rdb.Type(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println(vType) //string
}
Del():删除缓存项
示例:package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
n, err := rdb.Del(ctx, "key1", "key2").Result()
if err != nil {
panic(err)
}
fmt.Printf("成功删除了 %v 个\n", n)
}
Exists():检测缓存项是否存在
Exists()方法用于检测某个key是否存在package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
n, err := rdb.Exists(ctx, "key1").Result()
if err != nil {
panic(err)
}
if n > 0 {
fmt.Println("存在")
} else {
fmt.Println("不存在")
}
}注:Exists()方法可以传入多个key,返回的第一个结果表示存在的key的数量,不过工作中我们一般不同时判断多个key是否存在,一般就判断一个key,所以判断是否大于0即可,如果判断判断传入的多个key是否都存在,则返回的结果的值要和传入的key的数量相等
Expire(),ExpireAt():设置有效期
需要在设置好了缓存项后,在设置有效期
Expire()方法是设置某个时间段(time.Duration)后过期,ExpireAt()方法是在某个时间点(time.Time)过期失效package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
res, err := rdb.Expire(ctx, "key", time.Minute * 2).Result()
if err != nil {
panic(err)
}
if res {
fmt.Println("设置成功")
} else {
fmt.Println("设置失败")
}
res, err = rdb.ExpireAt(ctx, "key2", time.Now()).Result()
if err != nil {
panic(err)
}
if res {
fmt.Println("设置成功")
} else {
fmt.Println("设置失败")
}
}
TTL(),PTTL():获取有效期
TTL()方法可以获取某个键的剩余有效期
示例:package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"time"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
//设置一分钟的有效期
rdb.Expire(ctx, "key", time.Minute)
//获取剩余有效期,单位:秒(s)
ttl, err := rdb.TTL(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println(ttl)
//获取剩余有效期,单位:毫秒(ms)
pttl, err := rdb.PTTL(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println(pttl)
}
DBSize():查看当前数据库key的数量
示例:package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
num, err := rdb.DBSize(ctx).Result()
if err != nil {
panic(err)
}
fmt.Printf("数据库有 %v 个缓存项\n", num)
}
FlushDB():清空当前数据
示例:package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
var ctx = context.Background()
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "172.16.147.128:6379",
Password: "",
DB: 0,
})
//清空当前数据库,因为连接的是索引为0的数据库,所以清空的就是0号数据库
res, err := rdb.FlushDB(ctx).Result()
if err != nil {
panic(err)
}
fmt.Println(res)//OK
}
FlushAll():清空所有数据库
示例:package main
import (
"context"
"fmt"
"