Redis键(Key)

Posted onetoinf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis键(Key)相关的知识,希望对你有一定的参考价值。

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"

以上是关于Redis键(Key)的主要内容,如果未能解决你的问题,请参考以下文章

Redis 键(key)

Redis 命令-键(key)

Redis键(Key)

redis学习一 (key)键,Python操作redis 键

Redis 键(key)

Redis 键(key)