Redis 键(key)
Redis 键命令用于管理 redis 的键。
语法
Redis 键命令的基本语法如下:
redis 127.0.0.1:6379> COMMAND KEY_NAME
实例
127.0.0.1:6379> SET NoSQL0 redis
OK
127.0.0.1:6379> DEL NoSQL0
(integer) 1
127.0.0.1:6379>
在以上实例中 DEL 是一个命令, runoobkey 是一个键。 如果键被删除成功,命令执行后输出 (integer) 1,否则将输出 (integer) 0
Redis keys 命令
命令执行成功则返回 (integer) 1,否则将输出 (integer) 0
DEL
Redis DEL 命令用于删除已存在的键。不存在的 key 会被忽略。
127.0.0.1:6379> SET NoSQL0 redis
OK
127.0.0.1:6379> DEL NoSQL0
(integer) 1
127.0.0.1:6379>
DUMP
Redis DUMP 命令用于序列化给定 key ,并返回被序列化的值。如果 key 不存在,那么返回 nil 。 否则,返回序列化之后的值。
127.0.0.1:6379> SET greeting "hello, dumping world!"
OK
127.0.0.1:6379> DUMP greeting
"\x00\x15hello, dumping world!\a\x00,\x7f\xe7\xf1%\xed(W"
127.0.0.1:6379> DUMP not-exists-key
(nil)
127.0.0.1:6379>
EXISTS
Redis EXISTS 命令用于检查给定 key 是否存在。若 key 存在返回 1 ,否则返回 0 。
127.0.0.1:6379> EXISTS greeting
(integer) 1
127.0.0.1:6379> EXISTS no-existing
(integer) 0
127.0.0.1:6379>
Keys
Redis Keys 命令用于查找所有符合给定模式 pattern 的 key .符合给定模式的 key 列表 (Array)。
127.0.0.1:6379> SET nosql0 redis
OK
127.0.0.1:6379> SET nosql2 mongodb
OK
127.0.0.1:6379> SET nosql3 Counchdb
OK
127.0.0.1:6379> KEYS nosql*
1) "nosql0"
2) "nosql2"
3) "nosql3"
127.0.0.1:6379>
Expire
Redis Expire 命令用于设置 key 的过期时间。key 过期后将不再可用。设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
127.0.0.1:6379> SET ttl-key redis
OK
127.0.0.1:6379> EXPIRE ttl-key 60
(integer) 1
127.0.0.1:6379>
设置了过期时间为 1 分钟,1分钟后该键会自动删除。
Expireat
Redis Expireat 命令用于以 UNIX 时间戳(unix timestamp)格式设置 key 的过期时间。key 过期后将不再可用。设置成功返回 1 。 当 key 不存在或者不能为 key 设置过期时间时(比如在低于 2.1.3 版本的 Redis 中你尝试更新 key 的过期时间)返回 0 。
127.0.0.1:6379> SET ttl-key redis
OK
127.0.0.1:6379> EXPIREAT ttl-key 1518689999
(integer) 1
127.0.0.1:6379>
EXPIREAT 的作用和 EXPIRE 类似,都用于为 key 设置过期时间。 不同在于 EXPIREAT 命令接受的时间参数是 UNIX 时间戳(unix timestamp)。类似的还有:
- PEXPIRE key milliseconds
设置 key 的过期时间以毫秒计。 - PEXPIREAT key milliseconds-timestamp
设置 key 过期时间的时间戳(unix timestamp) 以毫秒计
TTL & PERSIST
Redis TTL 命令以秒为单位返回 key 的剩余过期时间。当 key 不存在时,返回 -2 。 当 key 存在但没有设置剩余生存时间时,返回 -1 。 否则,以秒为单位,返回 key 的剩余生存时间。类似的还有PTTL key以毫秒为单位返回 key 的剩余的过期时间。
Redis PERSIST 命令用于移除给定 key 的过期时间,使得 key 永不过期。当过期时间移除成功时,返回 1 。 如果 key 不存在或 key 没有设置过期时间,返回 0 。
127.0.0.1:6379> SET mykey "Hello"
OK
127.0.0.1:6379> EXPIRE mykey 10
(integer) 1
127.0.0.1:6379> TTL mykey
(integer) 2
127.0.0.1:6379> PERSIST mykey
(integer) 0
127.0.0.1:6379> TTL mykey
(integer) -2
RANDOMKEY
Redis RANDOMKEY 命令从当前数据库中随机返回一个 key 。当数据库不为空时,返回一个 key 。 当数据库为空时,返回 nil 。
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> RANDOMKEY
(nil)
127.0.0.1:6379> MSET fruit "apple" drink "beer" food "cookies"
OK
127.0.0.1:6379> RANDOMKEY
"drink"
127.0.0.1:6379> RANDOMKEY
"fruit"
127.0.0.1:6379> RANDOMKEY
"fruit"
其中 FLUSHDB 删除当前数据库所有 key
Rename & Renamenx
Redis Rename 命令用于修改 key 的名称 。改名成功时提示 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"
Redis Renamenx 命令用于在新的 key 不存在时修改 key 的名称 。修改成功时,返回 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"
Type
Redis Type 命令用于返回 key 所储存的值的类型。返回 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
Move
Redis MOVE 命令用于将当前数据库的 key 移动到给定的数据库 db 当中。移动成功返回 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
# 证实 song 被移到了数据库 1 (注意命令提示符变成了"redis:1",表明正在使用数据库
redis:1> EXISTS song
(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"