REDIS - KEY

REDIS - KEY

DEL

  • 删除key值
    1
    2
    3
    4
    SET name zhangsan
    DEL name //删除key name
    EXISTS name //查看key是否存在
    DEL name age sex //一次删除多个key

DUMP

  • 序列化给定的key,返回被序列化的值,使用RESTORE命令可以讲这个值反序列化为redis键。
    1
    2
    3
    4
    127.0.0.1:6379> SET greeting "hello, dumping world!"
    OK
    127.0.0.1:6379> DUMP greeting
    "\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"

EXISTS

  • 检查给定key是否存在。
    1
    2
    3
    4
    5
    6
    7
    8
    127.0.0.1:6379> SET db "redis"
    OK
    127.0.0.1:6379> EXISTS db
    (integer) 1
    127.0.0.1:6379> DEL db
    (integer) 1
    127.0.0.1:6379> EXISTS db
    (integer) 0

EXPIRE

  • 为给定key设置生存时间,当key过期时(生存时间为0),他会被自动删除
  • 设置key过期时间
    1
    2
    3
    4
    5
    6
    7
    8
    127.0.0.1:6379>  EXPIRE cache_page 30
    (integer) 1
    127.0.0.1:6379> TTL cache_page
    (integer) 26
    127.0.0.1:6379> EXPIRE cache_page 30000
    (integer) 1
    127.0.0.1:6379> TTL cache_page
    (integer) 29996
  • 对一个 key 执行 INCR 命令,对一个列表进行 LPUSH 命令,或者对一个哈希表执行 HSET 命令,这类操作都不会修改 key 本身的生存时间
  • 使用 RENAME 对一个 key 进行改名,那么改名后的 key 的生存时间和改名前一样
  • PERSIST 命令可以在不删除 key 的情况下,移除 key 的生存时间,让 key 重新成为一个『持久的』(persistent) key

EXPIREAT

  • EXPIREAT 的作用和 EXPIRE 类似,都用于为key设置生存时间。
  • 不同在于EXPIREAT接收unix时间错。
    1
    2
    3
    4
    5
    6
    127.0.0.1:6379> SET cache www.google.com
    OK
    127.0.0.1:6379> EXPIREAT cache 1489536000
    (integer) 1
    127.0.0.1:6379> TTL cache
    (integer) 74223

KEYS

  • 查找所有符合给定模式pattern的key
  • KEYS * 匹配数据库中所有 key
  • KEYS h?llo 匹配 hello , hallo 和 hxllo 等
  • KEYS h*llo 匹配 hllo 和 heeeeello 等
  • KEYS h[ae]llo 匹配 hello 和 hallo ,但不匹配 hillo
  • 特殊符号用 \ 隔开
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    127.0.0.1:6379> keys * //匹配所有
    1) "two"
    2) "one"
    3) "four"
    4) "three"
    127.0.0.1:6379> KEYS *o* //匹配带o的key
    1) "two"
    2) "one"
    3) "four"
    127.0.0.1:6379> KEYS t?? //匹配t开头
    1) "two"
    127.0.0.1:6379> KEYS t[w]*
    1) "two"

MIGRATE

  • 将 key 原子性地从当前实例传送到目标实例的指定数据库上,一旦传送成功, key 保证会出现在目标实例上,而当前实例上的 key 会被删除。
  • 这个命令是一个原子操作,它在执行的时候会阻塞进行迁移的两个实例,直到以下任意结果发生:迁移成功,迁移失败,等到超时。
  • 启动两个redis实例
    1
    2
    redis-server & //默认6379端口
    redis-server --port 7777 & //777端口
  • 链接6379端口 设置键值
    1
    2
    3
    4
    5
    redis-cli //链接redis 默认端口
    flushall //清空
    SET greeting "Hello from 6379 instance" //设置一个key
    MIGRATE 127.0.0.1 7777 greeting 0 1000 //前移到7777端口实例上
    EXISTS greeting //迁移成功后 key 被删除
  • 使用另一个客户端,查看 7777 端口上的实例
    1
    2
    3
    4
    5
    redis-cli -p 7777
    127.0.0.1:7777> keys *
    1) "greeting"
    127.0.0.1:7777> get greeting
    "Hello from 6379 instance"

MOVE

  • 将当前数据库的key移动到给定的数据库db当中
  • 如果当前数据库(源数据库)和给定数据库(目标数据库)有相同名字的给定 key ,或者 key 不存在于当前数据库,那么 MOVE 没有任何效果
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    127.0.0.1:6379> SET name 'zhangsan'
    OK
    127.0.0.1:6379> MOVE name 1
    (integer) 1
    127.0.0.1:6379> keys *
    (empty list or set)
    127.0.0.1:6379> exists name
    (integer) 0
    127.0.0.1:6379> select 1
    OK
    127.0.0.1:6379[1]> keys *
    1) "name"
  • 如果存在则移动失败
    1
    2
    127.0.0.1:6379> move name 1
    (integer) 0

OBJECT

  • 命令允许从内部察看给定 key 的 Redis 对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    127.0.0.1:6379>  SET game "COD"
    OK
    127.0.0.1:6379> OBJECT REFCOUNT game //只有一个引用
    (integer) 1
    127.0.0.1:6379> OBJECT IDLETIME game //等待一阵,然后查看空调转
    (integer) 12
    127.0.0.1:6379> GET game //读取 让它处于激活状态
    "COD"
    127.0.0.1:6379> OBJECT IDLETIME game // 不再处于空转
    (integer) 0
    127.0.0.1:6379> OBJECT ENCODING game //字符串的编码方式
    "embstr"
    127.0.0.1:6379> SET phone 15820123123
    OK
    127.0.0.1:6379> OBJECT ENCODING phone
    "int"
    127.0.0.1:6379> SET age 20
    OK
    127.0.0.1:6379> OBJECT ENCODING age //短数字被编码为 int
    "int"

PERSIST

  • 移除给定key的生存时间,将这个key从带生存时间的key转成不带生存时间的key
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    127.0.0.1:6379> SET mykey "Hello"
    OK
    127.0.0.1:6379> EXPIRE mykey 100000
    (integer) 1
    127.0.0.1:6379> TTL mykey
    (integer) 99996
    127.0.0.1:6379> PERSIST mykey
    (integer) 1
    127.0.0.1:6379> TTL mykey
    (integer) -1

PEXPIRE

  • 和 EXPIRE 命令的作用类似,但是它以毫秒为单位设置 key 的生存时间,而不像 EXPIRE 命令那样,以秒为单位。
    1
    2
    3
    4
    5
    6
    7
    8
    127.0.0.1:6379> SET mykey "Hello"
    OK
    127.0.0.1:6379> PEXPIRE mykey 150000
    (integer) 1
    127.0.0.1:6379> TTL mykey //返回值以秒为单位
    (integer) 142
    127.0.0.1:6379> PTTL mykey //可以给出准确的毫秒数
    (integer) 136021

PEXPIREAT

  • 这个命令和 EXPIREAT 命令类似,但它以毫秒为单位设置 key 的过期 unix 时间戳,而不是像 EXPIREAT 那样,以秒为单位。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    127.0.0.1:6379> SET mykey "Hello"
    OK
    127.0.0.1:6379> PEXPIREAT mykey 1555555555005
    (integer) 1
    127.0.0.1:6379> TTL mykey // TTL返回秒
    (integer) 66082853
    127.0.0.1:6379> PTTL mykey // PTTL 返回毫秒
    (integer) 66082847847
    127.0.0.1:6379>

PTTL

  • 这个命令类似于 TTL 命令,但它以毫秒为单位返回 key 的剩余生存时间,而不是像 TTL 命令那样,以秒为单位。
    1
    2
    127.0.0.1:6379> PTTL mykey
    (integer) 66082847847

RANDOMKEY

  • 从当前数据库中随机返回(不删除)一个 key 。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    127.0.0.1:6379> MSET fruit "apple" drink "beer" food "cookies"
    OK
    127.0.0.1:6379> randomkey
    "food"
    127.0.0.1:6379> randomkey
    "drink"
    127.0.0.1:6379> keys *
    1) "food"
    2) "drink"
    3) "fruit"
    127.0.0.1:6379> flushall
    OK
    127.0.0.1:6379> randomkey
    (nil)

RENAME

  • 将key 改名为newkey
  • 当 key 和 newkey 相同,或者 key 不存在时,返回一个错误
  • 当 newkey 已经存在时, RENAME 命令将覆盖旧值
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    127.0.0.1:6379> SET message "hello world"
    OK
    127.0.0.1:6379> RENAME message greeting
    OK
    127.0.0.1:6379> EXISTS message
    (integer) 0
    127.0.0.1:6379> EXISTS greeting
    (integer) 1
    //key 不存在 返回错误
    127.0.0.1:6379> RENAME message greeting
    (error) ERR no such key
    //key存在将会覆盖
    127.0.0.1:6379> SET greeting "old value"
    OK
    127.0.0.1:6379> SET message "new value"
    OK
    127.0.0.1:6379> RENAME message greeting
    OK
    127.0.0.1:6379> get greeting
    "new value"

RENAMENX

  • 当且仅当 newkey 不存在时,将 key 改名为 newkey
  • 当 key 不存在时,返回一个错误
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    127.0.0.1:6379> SET player "MPlyaer"
    OK
    127.0.0.1:6379> EXISTS best_player
    (integer) 0
    # newkey 不存在,改名成功
    127.0.0.1:6379> RENAMENX player best_player
    (integer) 1
    127.0.0.1:6379> SET animal "bear"
    OK
    127.0.0.1:6379> SET favorite_animal "butterfly"
    OK
    # newkey存在时,失败
    127.0.0.1:6379> RENAMENX animal favorite_animal
    (integer) 0
    127.0.0.1:6379> get animal
    "bear"
    127.0.0.1:6379> get favorite_animal
    "butterfly"

RESTORE

  • 反序列化给定的序列化值,并将它和给定的 key 关联
  • RESTORE 在执行反序列化之前会先对序列化值的 RDB 版本和数据校验和进行检查,如果 RDB 版本不相同或者数据不完整的话,那么 RESTORE 会拒绝进行反序列化,并返回一个错误
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    127.0.0.1:6379> SET greeting "hello, dumping world!"
    OK
    127.0.0.1:6379> DUMP greeting
    "\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
    127.0.0.1:6379> RESTORE greeting-again 0 "\x00\x15hello, dumping world!\x06\x00E\xa0Z\x82\xd8r\xc1\xde"
    OK
    127.0.0.1:6379> GET greeting-again
    "hello, dumping world!"
    127.0.0.1:6379> RESTORE fake-message 0 "hello moto moto blah blah" //使用错误的值进行反序列化
    (error) ERR DUMP payload version or checksum are wrong

SORT

  • 返回或保存给定列表、集合、有序集合 key 中经过排序的元素。
  • 排序默认以数字作为对象,值被解释为双精度浮点数,然后进行比较
  • SORT key 返回键值从小到大排序的结果
  • SORT key DESC 返回键值从大到小排序的结果
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    127.0.0.1:6379> LPUSH today_cost 30 1.5 10 8
    (integer) 4
    127.0.0.1:6379> SORT today_cost //排序
    1) "1.5"
    2) "8"
    3) "10"
    4) "30"
    127.0.0.1:6379> SORT today_cost DESC //降序排列
    1) "30"
    2) "10"
    3) "8"
    4) "1.5"

SORT - ALPHA

  • sort 默认排序对象为数字,当需要对字符串进行排序是,需要显示地在sort命令之后添加ALPHA修饰
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    127.0.0.1:6379> LPUSH website "www.baidu.com"
    (integer) 1
    127.0.0.1:6379> LPUSH website "www.qipajun.com"
    (integer) 2
    127.0.0.1:6379> LPUSH website "www.google.com"
    (integer) 3

    127.0.0.1:6379> SORT website ALPHA
    1) "www.baidu.com"
    2) "www.google.com"
    3) "www.qipajun.com"

SORT - LIMIT

  • 排序之后返回元素的数量可以通过 LIMIT 修饰符进行限制, 修饰符接受 offset 和 count 两个参数
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    127.0.0.1:6379> RPUSH rank 1 3 5 7 9
    (integer) 5
    127.0.0.1:6379> RPUSH rank 2 4 6 8 10
    (integer) 10
    127.0.0.1:6379> SORT rank LIMIT 0 5
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> SORT rank LIMIT 0 1
    1) "1"
    127.0.0.1:6379> SORT rank LIMIT 0 2 DESC
    1) "10"
    2) "9"

TTL

  • 以秒为单位,返回给定 key 的剩余生存时间(TTL, time to live)
  • key 不存在返回-2; 没有剩余时间返回-1;负责返回剩余生存时间
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    127.0.0.1:6379> FLUSHDB
    OK
    # 不存在的 key
    127.0.0.1:6379> TTL key
    (integer) -2
    127.0.0.1:6379> SET key value
    OK
    # key 存在,但没有设置剩余生存时间
    127.0.0.1:6379> TTL key
    (integer) -1
    # 有剩余生存时间的 key
    127.0.0.1:6379> EXPIRE key 10086
    (integer) 1
    127.0.0.1:6379> TTL key
    (integer) 10081

TYPE

  • 返回key所存储的值得类型
  • 返回类型:

    none (key不存在)
    string (字符串)
    list (列表)
    set (集合)
    zset (有序集)
    hash (哈希表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
127.0.0.1:6379> SET weather "sunny"
OK
#字符串
127.0.0.1:6379> TYPE weather
string
127.0.0.1:6379> LPUSH book_list "programming in scala"
(integer) 1
#列表
127.0.0.1:6379> TYPE book_list
list
127.0.0.1:6379> SADD pat "dog"
(integer) 1
#结合
127.0.0.1:6379> TYPE pat
set

SCAN

  • SCAN 命令及其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):
    • SCAN 命令用于迭代当前数据库中的数据库键。
    • SSCAN 命令用于迭代集合键中的元素。
    • HSCAN 命令用于迭代哈希键中的键值对。
    • ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。