单个键
-
TYPE key
返回键key存储的值的类型返回值 值类型 none 键不存在 string 字符串或者HyperLogLog(HLL是二进制字值) hash 散列 list 列表 set 集合 zset 有序集合 127.0.0.1:6379> type hash hash 127.0.0.1:6379> type list list 127.0.0.1:6379> type price zset 127.0.0.1:6379> type num1 set 127.0.0.1:6379> type msg string 127.0.0.1:6379> type hello none
-
DEL key [key …]
删除给定的任意多个键,不存在的键会被忽略,命令返回被成功删除的键数量127.0.0.1:6379> del num3 num4 2
-
EXISTS key
检查给定的键是否存在,存在返回:1,不存在返回:0127.0.0.1:6379> exists msg 1 127.0.0.1:6379> exists msg1 0
-
RENAME key newkey
将键的名字从key改为newkey,如果newkey已经存在,那么覆盖。键key不存在,或者key和newkey同名时,返回错误,修改成功返回OK127.0.0.1:6379> rename msg msgnew OK
-
RENAMENX key newkey
如果键newkey不存在,那么将键key改为newkey
如果键newkey已经存在,那么不做操作
修改成功返回1,修改失败返回0127.0.0.1:6379> renamenx msg msgnew (integer) 0 127.0.0.1:6379> renamenx msg msgnew1 (integer) 1
键过期功能
-
EXPIRE key seconds
将键 key 的生存时间设置为指定的秒数127.0.0.1:6379> expire msg 5 (integer) 1 127.0.0.1:6379> expire msg1 5 (integer) 0 127.0.0.1:6379> exists msg #时间到键已被删除不会 (integer) 0
-
PEXPIRE key milliseconds
将键 key 的生存时间设置为指定的毫秒数127.0.0.1:6379> pexpire msg 1000 (integer) 1
如果给定的键不存在,那么 EXPIRE 和 PEXPIRE 将返回 0 ,表示设置失败;如果命令返回 1 ,那么表示设置成功
当一个键被设置了生存时间之后,它的生存时间将会随着时间的流逝而减少:时间过去一毫秒,键的生存时间就减少一毫秒;时间过去一秒钟,键的生存时间就减少一秒钟;以此类推。当一个键的生存时间被减少至低于 0 时,Redis就会自动将这个键删除掉 -
EXPIREAT key timestamp
将键 key 的过期时间设置为指定的秒级UNIX 时间戳 -
PEXPIREAT key milliseconds-timestamp
将键 key 的过期时间设置为指定的毫秒级UNIX 时间戳如果给定的键不存在,那么 EXPIREAT 和 PEXPIREAT 将返回 0 ,表示设置失败;如果命令返回 1 ,那么表示设置成功。
对于被设置了过期时间的键来说,当键的过期时间小于当前时间的时候,Redis就会自动地删除该键 -
生存时间和过期时间的区别
设置生存时间和设置过期时间都可以让 Redis 自动删除指定的键,它们的区别在于设置“键什么时候被删除”的方式不同:
• EXPIRE 和 PEXIRE 的作用是让键在 N 秒钟或者 N 毫秒之后被删除
• 而 EXPIREAT 和 PEXPIREAT 的作用则是让键在指定的 UNIX 时间到达之后被删除。
带有生存时间的键就像是一个倒计时器,它会倒数 5、4、3、2、1、0,然后被删掉
而带有过期时间的键则像是一个定时器,它会在指定的时间来临之后被删掉 -
TTL key
以秒为单位,返回键的剩余生存时间127.0.0.1:6379> ttl msg (integer) 58 127.0.0.1:6379> ttl msg (integer) -2
-
PTTL key
以毫秒为单位,返回键的剩余生存时间127.0.0.1:6379> pttl msg (integer) 53144
Redis没有提供查看键的过期时间的命令,只能通过TTL和PTTL来查看键的过期剩余时间
TTL 和 PTTL可能会返回三种不同的值
返回 值 | 意 义 |
---|---|
-2 | 键不存在 |
-1 | 键存在,但没有设置过期时间或者生存时间 |
>= 0 | 键的剩余生存时间 |
- PERSIST key
移除为键 key设置的过期时间或生存时间,使得它不会被自动删除。
移除成功时命令返回1,如果命令没有设置过期时间或生存时间,那么命令返回 0127.0.0.1:6379> expire msg 60 (integer) 1 127.0.0.1:6379> persist msg (integer) 1 127.0.0.1:6379> ttl msg (integer) -1
对键的值进行排序
通过调用SORT命令,可以对列表、集合以及有序集合进行排序,对于原本已经有序的列表和有序集合,SORT命令可以让其他方式来排序值
SORT key [BY parrern] [LIMIT offset count] [GET pattern [GET pattern …]] [ASC | DESC] [ALPHA] [STORE destination]
-
最简单情形:SORT key
将输入键包含的值解释为浮点数,然后对这些浮点数按照值本身大小进行排序127.0.0.1:6379> rpush num 1 3 5 2 8 4 0 6 7 (integer) 9 127.0.0.1:6379> sort num 1) "0" 2) "1" 3) "2" 4) "3" 5) "4" 6) "5" 7) "6" 8) "7" 9) "8"
-
升序排序和降序排序
ASC: 排序后的值会从小到大的顺序排列(升序排列)
DESC: 排序后的值会从大到小的顺序排列(降序排列)127.0.0.1:6379> sort num asc 1) "0" 2) "1" 3) "2" 4) "3" 5) "4" 6) "5" 7) "6" 8) "7" 9) "8" 127.0.0.1:6379> sort num desc 1) "8" 2) "7" 3) "6" 4) "5" 5) "4" 6) "3" 7) "2" 8) "1" 9) "0"
-
对文字进行排序
默认情况下,SORT命令会将键包含的值解释为浮点数,然后对浮点数进行排序,但通过给定ALPHA参数,可以让SORT命令基于字典序对文件进行排序
一般情况下,有序集合里面的元素会根据分值来进行排序,但是通过执行SORT带有ALPHA参数后,可以根据元素本身来进行排序127.0.0.1:6379> sadd name tom peter jack tony (integer) 4 127.0.0.1:6379> sort name (error) ERR One or more scores can't be converted into double 127.0.0.1:6379> sort name alpha 1) "jack" 2) "peter" 3) "tom" 4) "tony"
-
基于外部键的值进行排序
默认情况,SORT命令在进行排序的时候,会使用被排序键本身包含的值来作为权重,但是通过执行BY pattern 选项,可以让SORT命令使用其他键的值来作为权重,对被排序键的值进行排序127.0.0.1:6379> sadd name java php c++ (integer) 3 127.0.0.1:6379> sort name alpha 1) "c++" 2) "java" 3) "php" 127.0.0.1:6379> mset java-score 100 php-score 50 c++-score 20 OK 127.0.0.1:6379> sort name by *-score 1) "c++" 2) "php" 3) "java"
-
获取外部键的值作为返回值
默认情况下,SORT命令会返回被排序键的值作为返回值,但是通过给定GET pattern选项,可以让SORT命令返回其他键的值来作为命令的返回值127.0.0.1:6379> sadd name java php c++ (integer) 3 127.0.0.1:6379> sort name alpha 1) "c++" 2) "java" 3) "php" 127.0.0.1:6379> mset java-name "JAVA" php-name "PHP" c++-name "C OR C++" OK 127.0.0.1:6379> sort name alpha get *-name 1) "C OR C++" 2) "JAVA" 3) "PHP"
-
指定返回结果的数量
默认情况下,SORT命令返回被排序键的所有值作为结果,但是通过指定 LIMIT offset count选项,可以让命令返回结果之前晓跳过offset 个值,然后只返回count个值127.0.0.1:6379> lpush num 9 8 4 0 1 3 2 7 5 6 (integer) 10 127.0.0.1:6379> sort num 1) "0" 2) "1" 3) "2" 4) "3" 5) "4" 6) "5" 7) "6" 8) "7" 9) "8" 10) "9" 127.0.0.1:6379> sort num limit 0 3 1) "0" 2) "1" 3) "2" 127.0.0.1:6379> sort num limit 2 3 1) "2" 2) "3" 3) "4"
-
存储排序结果
默认情况下,SORT命令只会向客户端返回排序结果,单并不存储排序结果,通过指定选项STORE destkey,可以将结果存储到destkey中127.0.0.1:6379> sort num store num-store (integer) 10 127.0.0.1:6379> lrange num-store 0 -1 1) "0" 2) "1" 3) "2" 4) "3" 5) "4" 6) "5" 7) "6" 8) "7" 9) "8" 10) "9"
-
使用多个选项和参数
SORT命令可以用户同时使用上面提到的所有选项和参数,通过适当地组合使用不同的参数和选项,可以将SORT命令变成一个强大的排序工具及数据获取工具
获取数据库中的键
-
RANDOMKEY
从当前数据库中随机返回一个键,被返回的键不会被删除
如果数据库不包含任何键值对(为空),则命令返回nil127.0.0.1:6379> randomkey "java-name" 127.0.0.1:6379> randomkey "name" 127.0.0.1:6379> randomkey "list"
-
keys pattern
返回当前数据库中,所有匹配给定模式pattern的键模式 匹配的键 KEYS * 数据库中的所有键 KEYS h?llo hello,hallo,hbllo等 KEYS h*llo hello,hllo,heeello,haaaalo等键 KEYS h[ae]llo hello、hallo
因为KEYS命令会一次性遍历整个数据库来获取所有与给定模式想匹配的键,所有随着包含的键值对越来越多,这个命令的执行速度会越来越慢,可能会导致数据库服务器被阻塞一段时间127.0.0.1:6379> keys * 1) "java-score" 2) "php-score" 3) "java-name" 4) "msgnew1" 5) "php-name" 6) "hash" 7) "num" 127.0.0.1:6379> keys c* 1) "c++-score" 2) "c++-name" 127.0.0.1:6379> keys n*um* 1) "num" 2) "num2" 3) "num-store" 4) "num5" 5) "num1"
Redis从2.8.0版本开始提供SCAN命令,可以以渐进的方式,分多次遍历整个数据库,返回匹配给定模式的键 -
SCAN cursor [MATCH pattern] [COUNT number]
cursor: 遍历时使用的游标,在开始一次新的遍历时,需要将cursor设置为0,之后每次调用SCAN,命令都会返回一个新的游标值,再次调用SCAN命令时需要输入这个游标值来继续上次的遍历,当命令返回的游标值为0时,遍历结束
MATCH pattern: 用于指定匹配的模式,类似于KEY命令的pattern参数
COUNT number: 指定这次遍历最多要返回多少个键,命令实际返回的键数量可能比这个值少,有时候,命令甚至会一个键也不返回,但只要命令返回的游标值不为0,就说明遍历没有结束,number参数默认值为:10SCAN 命令使用的算法可以保证,遍历从开始到结束期间,一直存在于数据库里面的键肯定会被遍历到,但中途被删除或者中途添加的键是否被遍历规则是不确定的,可能会可能不会
另外,命令可能会返回同一个键多次,要求无重复结果需要自己在客户端里面进行过滤 -
对比KEYS和SCAN
\ KEYS SCAN 处理方式 一次性遍历整个数据库并返回所有结果 每次遍历数据库中的一部分键,并返回一部分结果 是否阻塞 可能会 不会 是否出现重复值 不会 可能会 复杂度 O(N),N为包含的键值对数量 每次执行的复杂度为O(1)
遍历整个数据库的总复杂度为O(N),N为数据库包含的键值对数量