REDIS - KEY
REDIS - KEY
AlexREDIS - KEY
DEL
- 删除key值
1
2
3
4SET name zhangsan
DEL name //删除key name
EXISTS name //查看key是否存在
DEL name age sex //一次删除多个key
DUMP
- 序列化给定的key,返回被序列化的值,使用
RESTORE
命令可以讲这个值反序列化为redis键。1
2
3
4127.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
8127.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
8127.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
6127.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
13127.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
2redis-server & //默认6379端口
redis-server --port 7777 & //777端口 - 链接6379端口 设置键值
1
2
3
4
5redis-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
5redis-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
12127.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
2127.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
20127.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
10127.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
8127.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
9127.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
2127.0.0.1:6379> PTTL mykey
(integer) 66082847847
RANDOMKEY
- 从当前数据库中随机返回(不删除)一个 key 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14127.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
20127.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
18127.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
10127.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
12127.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
12127.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
15127.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
15127.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 | 127.0.0.1:6379> SET weather "sunny" |
SCAN
- SCAN 命令及其相关的 SSCAN 命令、 HSCAN 命令和 ZSCAN 命令都用于增量地迭代(incrementally iterate)一集元素(a collection of elements):
- SCAN 命令用于迭代当前数据库中的数据库键。
- SSCAN 命令用于迭代集合键中的元素。
- HSCAN 命令用于迭代哈希键中的键值对。
- ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。