REDIS - KEY

REDIS - KEY

DEL

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

DUMP

  • 序列化给定的key,返回被序列化的值,使用RESTORE命令可以讲这个值反序列化为redis键。
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是否存在。
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过期时间
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时间错。
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
  • 特殊符号用 \ 隔开
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实例
redis-server & //默认6379端口
redis-server --port 7777 & //777端口
  • 链接6379端口 设置键值
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 端口上的实例
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 没有任何效果
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"
  • 如果存在则移动失败
127.0.0.1:6379> move name 1
(integer) 0

OBJECT

  • 命令允许从内部察看给定 key 的 Redis 对象
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
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 命令那样,以秒为单位。
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 那样,以秒为单位。
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 命令那样,以秒为单位。
127.0.0.1:6379> PTTL mykey
(integer) 66082847847

RANDOMKEY

  • 从当前数据库中随机返回(不删除)一个 key 。
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 命令将覆盖旧值
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 不存在时,返回一个错误
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 会拒绝进行反序列化,并返回一个错误
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 返回键值从大到小排序的结果
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修饰
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 两个参数
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;负责返回剩余生存时间
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 (哈希表)

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 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。