redis-1-键命令

/ Database / 没有评论 / 40浏览

基本键指令

Redis 键命令用于管理 redis 的键。

alt

基本键指令

Redis 键命令用于管理 redis 的键。

键指令作用例子返回值序号
DEL用于在 key 存在时删除 keyDEL KEY_NAME被删除 key 的数量0
DUMP序列化给定 key ,并返回被序列化的值DUMP KEY_NAME如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值1
EXISTS检查给定 key 是否存在EXISTS KEY_NAME若 key 存在返回 1 ,否则返回 02
EXPIRE为给定 key 设置过期时间,以秒计。EXPIRE KEY_NAME TIME_IN_SECONDS设置成功返回 1 ,当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 03
EXPIREATEXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。秒时间戳EXPIREAT KEY_NAME TIME_IN_UNIX_TIMESTAMP设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 04
PEXPIRERedis PEXPIRE 命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位PEXPIRE KEY_NAME TIME_IN_MILLISECONDS设置成功,返回 1。key 不存在或设置失败,返回 05
PEXPIREAT设置 key 过期时间的时间戳(unix timestamp) 。毫秒时间戳PEXPIREAT KEY_NAME TIME_IN_UNIX_TIMESTAMP设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 06
KEYS用于查找所有符合给定模式 pattern 的 keyKEYS PATTERN (可以用*代表所有)符合给定模式的 key 列表 (Array)7
MOVE用于将当前数据库的 key 移动到给定的数据库 db 当中MOVE KEY_NAME DESTINATION_DATABASE移动成功返回 1 ,失败则返回 08
PERSIST用于移除给定 key 的过期时间,使得 key 永不过期PERSIST KEY_NAME当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 09
PTTL以毫秒为单位返回 key 的剩余的过期时间PTTL KEY_NAME当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。10
TTL以秒为单位返回 key 的剩余过期时间TTL KEY_NAME当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间11
RANDOMKEY从当前数据库中随机返回一个 keyRANDOMKEY当数据库不为空时,返回一个 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 已经存在,返回 014
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)

  1. 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)
  1. DUMP
	val,err := RedisClient.Dump(ctx,"kkkkk").Result()
	if err != nil{
		logrus.Error("dump err",err)
	}
	logrus.Info("val->",val)
  1. EXISTS
	result, err := RedisClient.Exists(ctx, "key","key3","kkkkk").Result()
	if err != nil {
		return
	}
	logrus.Infof("存在key->%d个",result)
  1. EXPIRE
	// 10s后过期
	res,err := RedisClient.Expire(ctx,"kkkkk",time.Second*10).Result()
	if err!=nil{
		logrus.Error(err)
	}
	logrus.Info(res) // true
  1. 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)
	}
  1. 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)
	}
  1. 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
  1. MOVE
	isOK, err := RedisClient.Move(ctx, "name212", 1).Result()
	if err != nil {
		return
	}
	logrus.Info(isOK)
  1. PERSIST
	result, err := RedisClient.Persist(ctx, "kkkkk").Result()
	if err != nil {
		logrus.Error(err)
	}
	logrus.Info(result) // 如果key本来就是永久的,则结果为false,否则为true
  1. PTTL
	result, err := RedisClient.PTTL(ctx,"name121").Result()
	if err != nil {
		return
	}
	logrus.Info(result) //27777h46m36.573s
  1. TTL
	result, err := RedisClient.TTL(ctx, "name121").Result()
	if err != nil {
		logrus.Error(err)
	}
	logrus.Info(result)
  1. RANDOMKEY
	result, err := RedisClient.RandomKey(ctx).Result()
	if err != nil {
		logrus.Error(err)
	}
	logrus.Info(result)
  1. 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
  1. RENAMENX
	result, err := RedisClient.RenameNX(ctx, "name111", "name111").Result()
	if err != nil {
		logrus.Error(err)
	}
	logrus.Info(result) // false,因为新旧key一样,结果为false
  1. 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