Redis有多种数据结构,但是对于这些数据结构来说,操作其中的Key 有一些通用的命令。如:

keys pattern 命令可以遍历输出对应的的键,其中可以使用通配符:

* 代表匹配所有字符
? 代表匹配一个字符
[] 代表匹配部分字符,例如:keys [1,3]*,则匹配 1,和3开头的任意key;keys [1-10]* ,则匹配 1到10开头的任意key
\x 用来做转义,例如要匹配星号,问号,则需要转义,keys \x*

当需要遍历所有键,或者其它操作时,keys是不错的选择
例如:想删除所有以jedis开头的key,则可以执行:

redis-cli -a 密码 -p 端口 -h 主机 keys jedis* | xargs redis-cli -a 密码 -p 端口 -h 主机 del 

keys 虽好,但是要合理使用!如果线上key的总数很大,千万、千万、千万不要使用keys ,它会造成Redis 的线程阻塞,会非常影响Redis性能。

可用版本:>= 1.0.0
时间复杂度:O(N), N 为数据库中 key 的数量。
返回值:符合给定模式的 key 列表。

dbsize可以返回当前数据库中键的总数。该命令在计算总键的时候不会遍历所有键,而是直接获取Redis内置的键总数的变量,所以该命令复杂度为O(1)。

可用版本:>= 1.0.0
时间复杂度:O(1)
返回值:返回当前数据库key的总数

判断某个key,是否存在,返回1代表存在,返回0带表不存在,从3.0.3版本之后,该命令可以接收多个key,它返回的是多个key中总共的存在数,所以如果在使用该命令的时候,如果后面的参数有重复的key,则结果中也会计算多次。

可用版本:>= 1.0.0
时间复杂度:O(1)
返回值:1 or 0 (3.0.3之后可能返回大于1的数)

删除缓存中的key,无论是什么类型的key,都可以删除,返回结果为删除成功的个数;如果删除的是一个key,该key不存在,则返回0;
在删除过程中,如果删除N个key,则时间复杂度为O(N),如果该N个key中有非字符串类型的key,则删除该key的时间复杂度为O(M)。其中M为该key的元素个数(集合、列表、有序集合)

可用版本:>= 1.0.0
时间复杂度:O(N)
返回值:整数

为一个key设置过期时间,当超过这个时间后,Redis 中会自动删除该key。
当一个key设置了过期时间后,可以使用del命令来直接删除该key,或者使用set(getset)命令对其过期时间进行覆写, 也就是说如果一个命令只是修改(alter)一个带生存时间的 key 的值而不是用一个新的 key 值来代替(replace)它的话,那么生存时间不会被改变。
比如说,对一个 key 执行 INCR 命令,对一个列表进行 LPUSH 命令,或者对一个哈希表执行 HSET 命令,这类操作都不会修改 key 本身的生存时间。
另一方面,如果使用 RENAME 对一个 key 进行改名,那么改名后的 key 的生存时间和改名前一样。
如果一个key的类型是string类型,对该key设置了过期时间,在过期时间有效期内,重新使用set命令对该string设值,该string的过期时间都会失效。
使用 PERSIST 命令可以在不删除 key 的情况下,移除 key 的生存时间,让 key 重新成为一个持久 key 。
可以对一个已经带有生存时间的 key 执行 EXPIRE 命令,新指定的生存时间会取代旧的生存时间。

过期的key 可以使用ttl 命令来查看该key还剩余的过期时间。
ttl返回的值如果为正整数,则是说明还有过期的时间秒数。如果返回-1则说明该key没有设置过期时间,返回-2则代表key已经过期。
注意:为什么设置了过期时间的key,在过期后还会返回-2?而不是返回没有该key?因为这涉及到了redis 的内存淘汰策略。

可用版本:>= 1.0.0
时间复杂度:O(1)
返回值:1,如果该key不存在,则返回0

返回key的数据类型,比如:字符串类型的返回string ,列表类型的返回是lis,如果键不存在,则返回none。

可用版本:>= 1.0.0
时间复杂度:O(1)
返回值:key的数据类型,没有返回none。

type命令实际返回键的数据结构命令,但是这些只是对外的数据结构,redis 底层针对每种类型都有对应的内部编码实现。
object 对应的子命令:

  • OBJECT REFCOUNT key:返回该key关联的值的引用数,该命令主要用于调试;
  • OBJECT ENCODING key:返回该key的内部数据编码结构;
  • OBJECT IDLETIME key:返回该key自创建以来空闲的时间(单位:秒),只有当内存淘汰策略(maxmemory-policy)为noeviction时才可用;
  • OBJECT FREQ key:返回该key的存储对象的对数访问频率计数器,只有当内存淘汰策略(maxmemory-policy)为LFU时才可用;
  • OBJECT HELP :帮助文档;

redis 内部编码对照表:

数据结构 编码类型
string raw
int
embstr
hash hashtable
ziplist
list ziplist
linkedlist
set hashtable
inset
zset skiplist
ziplist
raw:大于39个字节的字符串编码;
embstr:小于等于39个字节的字符串编码;
int:字符串中的整数字符串的编码,节省空间;
ziplist:用于节省空间的特殊表示,但是在列表元素比较多的情况下,性能会有所下降;
intset:是一种特殊的编码,用于仅由整数组成的小集合;
skiplist:sort集合中使用的编码,用于节省空间;

可用版本:>= 2.2.3
时间复杂度:O(1)
返回值:refcount 子命令会返回整数;encoding 返回编码实现名称

Copyright © 2019-2020 2024-04-27 01:50:13