基本键指令
Redis 键命令用于管理 redis 的键。
基本键指令
Redis 键命令用于管理 redis 的键。
键指令 | 作用 | 例子 | 返回值 | 序号 |
---|---|---|---|---|
DEL | 用于在 key 存在时删除 key | DEL KEY_NAME | 被删除 key 的数量 | 0 |
DUMP | 序列化给定 key ,并返回被序列化的值 | DUMP KEY_NAME | 如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值 | 1 |
EXISTS | 检查给定 key 是否存在 | EXISTS KEY_NAME | 若 key 存在返回 1 ,否则返回 0 | 2 |
EXPIRE | 为给定 key 设置过期时间,以秒计。 | EXPIRE KEY_NAME TIME_IN_SECONDS | 设置成功返回 1 ,当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 | 3 |
EXPIREAT | EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。秒时间戳 | EXPIREAT KEY_NAME TIME_IN_UNIX_TIMESTAMP | 设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 | 4 |
PEXPIRE | Redis PEXPIRE 命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位 | PEXPIRE KEY_NAME TIME_IN_MILLISECONDS | 设置成功,返回 1。key 不存在或设置失败,返回 0 | 5 |
PEXPIREAT | 设置 key 过期时间的时间戳(unix timestamp) 。毫秒时间戳 | PEXPIREAT KEY_NAME TIME_IN_UNIX_TIMESTAMP | 设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 | 6 |
KEYS | 用于查找所有符合给定模式 pattern 的 key | KEYS PATTERN (可以用*代表所有) | 符合给定模式的 key 列表 (Array) | 7 |
MOVE | 用于将当前数据库的 key 移动到给定的数据库 db 当中 | MOVE KEY_NAME DESTINATION_DATABASE | 移动成功返回 1 ,失败则返回 0 | 8 |
PERSIST | 用于移除给定 key 的过期时间,使得 key 永不过期 | PERSIST KEY_NAME | 当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 | 9 |
PTTL | 以毫秒为单位返回 key 的剩余的过期时间 | PTTL KEY_NAME | 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。 | 10 |
TTL | 以秒为单位返回 key 的剩余过期时间 | TTL KEY_NAME | 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间 | 11 |
RANDOMKEY | 从当前数据库中随机返回一个 key | RANDOMKEY | 当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil (windows 系统返回 null) | 12 |
RENAME | 用于修改 key 的名称 | RENAME OLD_KEY_NAME NEW_KEY_NAME | 改名成功时提示 OK ,失败时候返回一个错误,当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值。 | 13 |
RENAMENX | 仅用于在新的 key 不存在时修改 key 的名称 | RENAMENX OLD_KEY_NAME NEW_KEY_NAME | 修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 | 14 |
SCAN | 用于迭代当前数据库中的数据库键 | SCAN cursor [MATCH pattern] [COUNT count] | 返回值是一个包含两个元素的数组, 第一个数组元素是用于进行下一次迭代的新游标, 而第二个数组元素则是一个数组, 这个数组中包含了所有被迭代的元素 | 15 |
scan:http://doc.redisfans.com/key/scan.html
SCAN 命令的回复是一个包含两个元素的数组, 第一个数组元素是用于进行下一次迭代的新游标, 而第二个数组元素则是一个数组, 这个数组中包含了所有被迭代的元素。
在第二次调用 SCAN 命令时, 命令返回了游标 0
, 这表示迭代已经结束, 整个数据集(collection)已经被完整遍历过了。
以 0
作为游标开始一次新的迭代, 一直调用 SCAN 命令, 直到命令返回游标 0
, 我们称这个过程为一次完整遍历(full iteration)
- DEL
err := RedisClient.Del(ctx, "name85").Err()
if err != nil {
logrus.Error("删除失败")
}
logrus.Info("删除成功")
keys := []string{"name111", "name222", "name333"}
err = RedisClient.Del(ctx, keys...).Err()
if err != nil {
logrus.Error(err)
}
logrus.Info("key删除成功->", keys)
- DUMP
val,err := RedisClient.Dump(ctx,"kkkkk").Result()
if err != nil{
logrus.Error("dump err",err)
}
logrus.Info("val->",val)
- EXISTS
result, err := RedisClient.Exists(ctx, "key","key3","kkkkk").Result()
if err != nil {
return
}
logrus.Infof("存在key->%d个",result)
- EXPIRE
// 10s后过期
res,err := RedisClient.Expire(ctx,"kkkkk",time.Second*10).Result()
if err!=nil{
logrus.Error(err)
}
logrus.Info(res) // true
- EXPIREAT
// Declaring time in UTC
//t := time.Date(2020, 11, 9, 7, 0, 0, 0, time.UTC)
t := time.Now()
// Declaring durations
d1 := t.Add(time.Second * 100) // 100秒后过期
err := RedisClient.ExpireAt(ctx,"kkkkk",d1).Err()
if err != nil{
logrus.Error(err)
}
- PEXPIRE
RedisClient.PExpire(ctx,"kkkkk",10*time.Second) // 10秒后过期
err := RedisClient.PExpire(ctx,"kkkkk",10000*time.Millisecond).Err() // 10秒后过期
if err !=nil{
logrus.Error(err)
}
- KEYS
result, err := RedisClient.Keys(ctx,"name*").Result()
if err != nil {
return
}
for _,v := range result{
logrus.Info("key: ",v)
}
//INFO[0000] key: name465
//INFO[0000] key: name34
//INFO[0000] key: name488
- MOVE
isOK, err := RedisClient.Move(ctx, "name212", 1).Result()
if err != nil {
return
}
logrus.Info(isOK)
- PERSIST
result, err := RedisClient.Persist(ctx, "kkkkk").Result()
if err != nil {
logrus.Error(err)
}
logrus.Info(result) // 如果key本来就是永久的,则结果为false,否则为true
- PTTL
result, err := RedisClient.PTTL(ctx,"name121").Result()
if err != nil {
return
}
logrus.Info(result) //27777h46m36.573s
- TTL
result, err := RedisClient.TTL(ctx, "name121").Result()
if err != nil {
logrus.Error(err)
}
logrus.Info(result)
- RANDOMKEY
result, err := RedisClient.RandomKey(ctx).Result()
if err != nil {
logrus.Error(err)
}
logrus.Info(result)
- RENAME
result, err := RedisClient.Rename(ctx, "name121-new", "name121-new").Result()
if err != nil {
logrus.Error(err)
}
logrus.Info(result) // 正常情况下,返回string OK,如果新的key不存在,则返回error信息;新旧key的name一样,依旧返回ok
- RENAMENX
result, err := RedisClient.RenameNX(ctx, "name111", "name111").Result()
if err != nil {
logrus.Error(err)
}
logrus.Info(result) // false,因为新旧key一样,结果为false
- SCAN
result, cursor, err := RedisClient.Scan(ctx,0,"name*",1000000).Result()
if err != nil {
logrus.Error(err)
}
logrus.Infof("共%d个key",len(result))
logrus.Warn(result,cursor)
scan获取到所有的key
todo
给大佬膜拜了