 键(key)
          键(key)
        
 # Redis 键(key)
Redis键命令用于管理redis的键。
语法格式: [COMMAND] [KEY_NAME]
# Redis keys 命令
| 命令 | 描述 | 
|---|---|
| DEL key | 该命令用于在 key 存在时删除 key。 | 
| DUMP key | 序列化给定 key ,并返回被序列化的值。 | 
| EXISTS key | 检查给定 key 是否存在。 | 
| EXPIRE key seconds | 为给定 key 设置过期时间,以秒计。 | 
| EXPIREAT key timestamp | EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。 | 
| PEXPIRE key milliseconds | 设置 key 的过期时间以毫秒计。 | 
| PEXPIREAT key milliseconds-timestamp | 设置 key 过期时间的时间戳(unix timestamp) 以毫秒计 | 
| KEYS pattern | 查找所有符合给定模式( pattern)的 key 。 | 
| MOVE key db | 将当前数据库的 key 移动到给定的数据库 db 当中。 | 
| PERSIST key | 移除 key 的过期时间,key 将持久保持。 | 
| PTTL key | 以毫秒为单位返回 key 的剩余的过期时间。 | 
| TTL key | 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)。 | 
| RANDOMKEY | 从当前数据库中随机返回一个 key | 
| RENAME key newkey | 修改 key 的名称 | 
| RENAMENX key newkey | 仅当 newkey 不存在时,将 key 改名为 newkey 。 | 
| SCAN cursor [MATCH pattern] [COUNT count] | 迭代数据库中的数据库键。 | 
| TYPE key | 返回 key 所储存的值的类型。 | 
# DEL
Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。
- 语法
  redis 127.0.0.1:6379> DEL KEY_NAME
- 返回值 - 被删除 key 的数量。 
# DUMP
Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值。
- 语法
  redis 127.0.0.1:6379> DUMP KEY_NAME
- 返回值 - 如果 - key不存在,那么返回- nil。 否则,返回序列化之后的值。
# EXISTS
Redis EXISTS 命令用于检查给定 key 是否存在。
- 语法
  redis 127.0.0.1:6379> EXISTS KEY_NAME
- 返回值 - 若 - key存在返回- 1,否则返回- 0
# EXPIRE
Redis Expire 命令用于设置 key 的过期时间,key 过期后将不再可用。单位以秒计。
- 语法
  redis 127.0.0.1:6379> Expire KEY_NAME TIME_IN_SECONDS
- 返回值 - 设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。 
# EXPIREAT
Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。
- 语法
  redis 127.0.0.1:6379> Expireat KEY_NAME TIME_IN_UNIX_TIMESTAMP
- 返回值 - 设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。 
# PEXPIRE
Redis PEXPIRE 命令和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。
- 语法
  redis 127.0.0.1:6379> PEXPIRE key milliseconds
- 返回值 - 设置成功,返回 1, /key 不存在或设置失败,返回 0 
# PEXPIREAT
Redis PEXPIREAT 命令用于设置 key 的过期时间,以毫秒计。key 过期后将不再可用。
- 语法
  PEXPIREAT KEY_NAME TIME_IN_MILLISECONDS_IN_UNIX_TIMESTAMP
- 返回值 - 设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。 
# KEYS
Redis Keys 命令用于查找所有符合给定模式 pattern 的 key 。。
- 语法
  redis 127.0.0.1:6379> KEYS PATTERN
- 返回值 - 符合给定模式的 key 列表 (Array)。 
# MOVE
Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。
- 语法
  redis 127.0.0.1:6379> MOVE KEY_NAME DESTINATION_DATABASE
- 返回值 - 移动成功返回 1 ,失败则返回 0 。 
- 实例 - # key 存在于当前数据库 redis> SELECT 0 # redis默认使用数据库 0,为了清晰起见,这里再显式指定一次。 OK redis> SET song "secret base - Zone" OK redis> MOVE song 1 # 将 song 移动到数据库 1 (integer) 1 redis> EXISTS song # song 已经被移走 (integer) 0 redis> SELECT 1 # 使用数据库 1 OK redis:1> EXISTS song # 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库 1) (integer) 1 # 当 key 不存在的时候 redis:1> EXISTS fake_key (integer) 0 redis:1> MOVE fake_key 0 # 试图从数据库 1 移动一个不存在的 key 到数据库 0,失败 (integer) 0 redis:1> select 0 # 使用数据库0 OK redis> EXISTS fake_key # 证实 fake_key 不存在 (integer) 0 # 当源数据库和目标数据库有相同的 key 时 redis> SELECT 0 # 使用数据库0 OK redis> SET favorite_fruit "banana" OK redis> SELECT 1 # 使用数据库1 OK redis:1> SET favorite_fruit "apple" OK redis:1> SELECT 0 # 使用数据库0,并试图将 favorite_fruit 移动到数据库 1 OK redis> MOVE favorite_fruit 1 # 因为两个数据库有相同的 key,MOVE 失败 (integer) 0 redis> GET favorite_fruit # 数据库 0 的 favorite_fruit 没变 "banana" redis> SELECT 1 OK redis:1> GET favorite_fruit # 数据库 1 的 favorite_fruit 也是 "apple"
# PERSIST
Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。
- 语法
  redis 127.0.0.1:6379> PERSIST KEY_NAME
- 返回值 - 当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。 
# PTTL
Redis Pttl 命令以毫秒为单位返回 key 的剩余过期时间
- 语法
  redis 127.0.0.1:6379> PTTL KEY_NAME
- 返回值 - 当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以毫秒为单位,返回 key 的剩余生存时间。 
- 注意:在 Redis 2.8 以前,当 key 不存在,或者 key 没有设置剩余生存时间时,命令都返回 -1 。 
- 实例 # 不存在的 key - redis> FLUSHDB OK redis> PTTL key (integer) -2 # key 存在,但没有设置剩余生存时间 redis> SET key value OK redis> PTTL key (integer) -1 # 有剩余生存时间的 key redis> PEXPIRE key 10086 (integer) 1 redis> PTTL key (integer) 6179
# TTL
Redis TTL 命令以秒为单位返回 key 的剩余过期时间。
- 语法
  redis 127.0.0.1:6379> TTL KEY_NAME
- 实例 - # 不存在的 key redis> FLUSHDB OK redis> TTL key (integer) -2 # key 存在,但没有设置剩余生存时间 redis> SET key value OK redis> TTL key (integer) -1 # 有剩余生存时间的 key redis> EXPIRE key 10086 (integer) 1 redis> TTL key (integer) 10084
# RANDOMKEY
Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。
- 语法
  redis 127.0.0.1:6379> RANDOMKEY 
- 返回值 - 当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil (windows 系统返回 null)。 
- 实例 
# 数据库不为空
  redis> MSET fruit "apple" drink "beer" food "cookies"   # 设置多个 key
  OK
  redis> RANDOMKEY
  "fruit"
  redis> RANDOMKEY
  "food"
  redis> KEYS *    # 查看数据库内所有key,证明 RANDOMKEY 并不删除 key
  1) "food"
  2) "drink"
  3) "fruit"
  # 数据库为空
  redis> FLUSHDB  # 删除当前数据库所有 key
  OK
  redis> RANDOMKEY
  (nil)
# RENAME
Redis Rename 命令用于修改 key 的名称 。
- 语法
  redis 127.0.0.1:6379> RENAME OLD_KEY_NAME NEW_KEY_NAME 
- 返回值 - 改名成功时提示 OK ,失败时候返回一个错误。当 OLD_KEY_NAME 和 NEW_KEY_NAME 相同,或者 OLD_KEY_NAME 不存在时,返回一个错误。 当 NEW_KEY_NAME 已经存在时, RENAME 命令将覆盖旧值 
- 实例 - # key 存在且 newkey 不存在 redis> SET message "hello world" OK redis> RENAME message greeting OK redis> EXISTS message # message 不复存在 (integer) 0 redis> EXISTS greeting # greeting 取而代之 (integer) 1 # 当 key 不存在时,返回错误 redis> RENAME fake_key never_exists (error) ERR no such key # newkey 已存在时, RENAME 会覆盖旧 newkey redis> SET pc "lenovo" OK redis> SET personal_computer "dell" OK redis> RENAME pc personal_computer OK redis> GET pc (nil) redis:1> GET personal_computer # 原来的值 dell 被覆盖了 "lenovo"
# RENAMENX
Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。
- 语法
  redis 127.0.0.1:6379> RENAMENX OLD_KEY_NAME NEW_KEY_NAME
- 返回值 - 修改成功时,返回 1 。 如果 NEW_KEY_NAME 已经存在,返回 0 。 
- 实例 - # newkey 不存在,改名成功 redis> SET player "MPlyaer" OK redis> EXISTS best_player (integer) 0 redis> RENAMENX player best_player (integer) 1 # newkey存在时,失败 redis> SET animal "bear" OK redis> SET favorite_animal "butterfly" OK redis> RENAMENX animal favorite_animal (integer) 0 redis> get animal "bear" redis> get favorite_animal "butterfly"
# SCAN
Redis Scan 命令用于迭代数据库中的数据库键。 SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。 SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。
# 相关命令
- SSCAN命令用于迭代集合键中的元素。
- HSCAN命令用于迭代哈希键中的键值对。
- ZSCAN命令用于迭代有序集合中的元素(包括元素成员和元素分值)。
- 语法: - SCAN cursor [MATCH pattern] [COUNT count]- cursor - 游标。
- pattern - 匹配的模式。
- count - 指定从数据集里返回多少元素,默认值为 10 。
 
- 返回值: 数组列表。 
- 实例 - redis 127.0.0.1:6379> scan 0 # 使用 0 作为游标,开始新的迭代 1) "17" # 第一次迭代时返回的游标 2) 1) "key:12" 2) "key:8" 3) "key:4" 4) "key:14" 5) "key:16" 6) "key:17" 7) "key:15" 8) "key:10" 9) "key:3" 10) "key:7" 11) "key:1" redis 127.0.0.1:6379> scan 17 # 使用的是第一次迭代时返回的游标 17 开始新的迭代 1) "0" 2) 1) "key:5" 2) "key:18" 3) "key:0" 4) "key:2" 5) "key:19" 6) "key:13" 7) "key:6" 8) "key:9" 9) "key:11"
# TYPE
Redis Type 命令用于返回 key 所储存的值的类型。
- 语法
  redis 127.0.0.1:6379> TYPE KEY_NAME 
- 返回值 - 返回 key 的数据类型,数据类型有: - none (key不存在)
- string (字符串)
- list (列表)
- set (集合)
- zset (有序集)
- hash (哈希表)
 
- 实例 - # 字符串- redis> SET weather "sunny" OK - redis> TYPE weather string - # 列表- redis> LPUSH book_list "programming in scala" (integer) 1 - redis> TYPE book_list list - # 集合- redis> SADD pat "dog" (integer) 1 - redis> TYPE pat set