文章目录
1. SELECT: 切换到指定数据库
- Redis启动时会创建16个数据库,默认在0号数据库
- 同一个数据库下不允许有两个同名的键,但是不同的数据库下可以
SELECT index
: 切换到index号数据库(0=<index<=15)
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> SELECT 0
OK
127.0.0.1:6379> SELECT 3
OK
2. KEYS:获取所有与给定匹配符相匹配的键
KEYS pattern
: 找出当前数据库下和匹配符匹配的所有键
127.0.0.1:6379> KEYS * # 匹配所有的键
1) "bitmap"
2) "myzset"
3) "strenm"
4) "3500"
5) "\xe5\xa7\x93\xe5\x90\x8d
127.0.0.1:6379> KEYS s* # 匹配所有以s开头的键
1) "strenm"
2) "s1"
3) "str"
4) "stren"
5) "set4"
- 匹配符的写法满足正则表达式的要求
- *: 匹配0个或多个任意字符
- ?: 匹配任意单个字符
- []: 匹配括号中给出的字符
3. SCAN:以渐进方式迭代数据库中的键
1. 示例:
127.0.0.1:6379> scan 0
1) "17"
2) 1) "bitmap"
2) "\xe5\xa7\x93\xe5\x90\x8d1"
3) "uname"
4) "vm3"
5) "name"
6) "vm2"
7) "salary"
8) "or_result"
9) "myzset"
10) "strenm"
127.0.0.1:6379> scan 17
1) "23"
2) 1) "xor_result"
2) "set4"
3) "3500"
4) "s1"
5) "str"
6) "a"
7) "cNGA3K"
8) "mutilStus"
9) "salary1"
10) "\xe5\xa7\x93\xe5\x90\x8d"
127.0.0.1:6379> scan 23
1) "0"
2) 1) "num"
2) "GEhG3x"
3) "and_result"
4) "stren"
5) "111"
127.0.0.1:6379> scan 0
1) "17"
2) 1) "bitmap"
2) "\xe5\xa7\x93\xe5\x90\x8d1"
3) "uname"
4) "vm3"
5) "name"
6) "vm2"
7) "salary"
8) "or_result"
9) "myzset"
10) "strenm"
返回结果:
- 第一个元素是进行下一次迭代所需的游标,如果这个游标为0,那么说明客户端已经对数据库完成了一次完整的迭代
- 第二个元素是一个列表,这个列表包含了本次迭代取得的数据库键;如果SCAN命令在某次迭代中没有获取到任何键,那么这个元素将是一个空列表
2. 迭代与给定匹配符相匹配的键
127.0.0.1:6379> SCAN 0 MATCH s* # 迭代以s开头的键
1) "17"
2) 1) "salary"
2) "strenm"
127.0.0.1:6379> SCAN 17 MATCH s*
1) "23"
2) 1) "set4"
2) "s1"
3) "str"
4) "salary1"
127.0.0.1:6379> SCAN 23 MATCH s*
1) "0"
2) 1) "stren"
3. 指定返回键的期望数量
127.0.0.1:6379> SCAN 0 COUNT 5 # 每次迭代返回5个
1) "28"
2) 1) "bitmap"
2) "\xe5\xa7\x93\xe5\x90\x8d1"
3) "uname"
4) "vm3"
5) "name"
127.0.0.1:6379> SCAN 28 COUNT 5
1) "17"
2) 1) "vm2"
2) "salary"
3) "or_result"
4) "myzset"
5) "strenm"
4. 数据结构迭代命令
1. 散列迭代命令
`HSCAN hash cursor [MATCH pattern] [COUNT number]`
2. 集合迭代命令
`SSCAN set cursor [MATCH pattern] [COUNT number]`
3. 有序集合迭代命令
`ZSCAN sorted_set cursor [MATCH pattern] [COUNT number]`
4 . RANDOMKEY:随机返回一个键
127.0.0.1:6379> RANDOMKEY
"salary1"
127.0.0.1:6379> RANDOMKEY
"\xe5\xa7\x93\xe5\x90\x8d1"
127.0.0.1:6379> RANDOMKEY
"set4"
5. SORT:对键的值进行排序
1. 示例:
127.0.0.1:6379> SMEMBERS set1
1) "3.14"
2) "1024"
3) "123456"
4) "888"
5) "10086"
6) "256"
127.0.0.1:6379> SORT set1
1) "3.14"
2) "256"
3) "888"
4) "1024"
5) "10086"
6) "123456"
2. 指定排序方式
SORT set [ASC|DESC]
: ASC表示升序,DESC表示降序
127.0.0.1:6379> SORT set1 ASC
1) "3.14"
2) "256"
3) "888"
4) "1024"
5) "10086"
6) "123456"
127.0.0.1:6379> SORT set1 DESC
1) "123456"
2) "10086"
3) "1024"
4) "888"
5) "256"
6) "3.14"
3. 对字符串值进行排序
127.0.0.1:6379> SMEMBERS fruits
1) "dragon fruit"
2) "apple"
3) "banaba"
4) "watermelon"
5) "cherry"
6) "mango"
127.0.0.1:6379> SORT fruits ALPHA # 指定排序方式为ALPHA
1) "apple"
2) "banaba"
3) "cherry"
4) "dragon fruit"
5) "mango"
6) "watermelon"
4. 获取排序的部分结果
127.0.0.1:6379> SORT fruits ALPHA LIMIT 1 3 # 跳过1个 然后取3个
1) "banaba"
2) "cherry"
3) "dragon fruit"
5. 获取字符串键的值
SORT命令将把被排序的元素与*符号进行替换,构建出一个键名,然后使用GET命令去获取该键的值
127.0.0.1:6379> KEYS *price #存在的键
1) "mango-price"
2) "cherry-price"
3) "banaba-price"
4) "watermelon-price"
5) "apple-price"
6) "dragon fruit-price"
127.0.0.1:6379> SMEMBERS fruits # fruits集合
1) "dragon fruit"
2) "apple"
3) "banaba"
4) "watermelon"
5) "cherry"
6) "mango"
127.0.0.1:6379> SORT fruits ALPHA GET *-price
1) "8.5" # apple-price
2) "4.5" # banaba-price
3) "7"
4) "6"
5) "5"
6) "3.5"
6. 获取散列中的键值
存在集合:
127.0.0.1:6379> SMEMBERS fruits
1) "dragon fruit"
2) "apple"
3) "banaba"
4) "watermelon"
5) "cherry"
6) "mango"
存在散列:
127.0.0.1:6379> SORT fruits ALPHA GET *-info->inventory
1) "1000"
2) "300"
3) "50"
4) "500"
5) "250"
6) "324"
7. 获取被排序元素本身
# 不仅返回散列中的inventory值 也返回被排序的元素
127.0.0.1:6379> SORT fruits ALPHA GET # GET *-info->inventory
1) "apple"
2) "1000"
3) "banaba"
4) "300"
5) "cherry"
6) "50"
7) "dragon fruit"
8) "500"
9) "mango"
10) "250"
11) "watermelon"
12) "324"
8. 使用外部键的值作为排序权重
# 根据水果的价格对fruits集合进行排序
127.0.0.1:6379> SORT fruits BY *-price GET # GET *-price
1) "watermelon"
2) "3.5"
3) "banaba"
4) "4.5"
5) "mango"
6) "5"
7) "dragon fruit"
8) "6"
9) "cherry"
10) "7"
11) "apple"
12) "8.5"
9. 保存排序结果
SORT key [STORE destination]
: 将排序结果存储在列表destination中
127.0.0.1:6379> SORT fruits ALPHA STORE sorted_fruits
(integer) 6
127.0.0.1:6379> LRANGE sorted_fruits 0 -1
1) "apple"
2) "banaba"
3) "cherry"
4) "dragon fruit"
5) "mango"
6) "watermelon"
6. EXISTS:检查给定键是否存在
返回存在的给定键数量作为返回值
127.0.0.1:6379> EXISTS s1 set4 as2
(integer) 2
7. DBSIZE:获取数据库包含的键值对数量
127.0.0.1:6379> DBSIZE
(integer) 40
8. TYPE:查看键的类型
127.0.0.1:6379> TYPE fruits
set
127.0.0.1:6379> TYPE num
string
9. RENAME、RENAMENX:修改键名
# 新键msg2不存在
127.0.0.1:6379> set msg "hello"
OK
127.0.0.1:6379> GET msg2
(nil)
127.0.0.1:6379> RENAME msg msg2
OK
127.0.0.1:6379> GET msg
(nil)
127.0.0.1:6379> GET msg2
"hello"
# 新键msg3存在 会先删除msg3 再执行改名操作
127.0.0.1:6379> SET msg3 "hi"
OK
127.0.0.1:6379> RENAME msg2 msg3
OK
127.0.0.1:6379> GET msg2
(nil)
127.0.0.1:6379> GET msg3
"hello"
# 只有新键不存在时才能修改成功
127.0.0.1:6379> SET msg4 123
OK
127.0.0.1:6379> RENAMENX msg3 msg4
(integer) 0
127.0.0.1:6379> RENAMENX msg3 msg1
(integer) 1
10. MOVE:将给定的键移动到另一个数据库
127.0.0.1:6379> MOVE msg1 1
(integer) 1
127.0.0.1:6379> select 1
OK
127.0.0.1:6379[1]> GET msg1
"hello"
127.0.0.1:6379[1]> select 0
OK
127.0.0.1:6379> GET msg1
(nil)
127.0.0.1:6379> SET msg1 "123"
OK
127.0.0.1:6379> MOVE msg1 1
(integer) 0
如果给定键并不存在于当前数据库,或者目标数据库中存在与给定键同名的键,那么MOVE命令将不做动作,只返回0表示移动失败
11. DEL:移除指定的键
删除给定的一个或多个键
127.0.0.1:6379> DEL set4 a num
(integer) 3
12. UNLINK:以异步方式移除指定的键
- DEL命令会以同步方式执行移除操作,所以如果待移除的键非常庞大或者数量众多,那么服务器在执行移除操作的过程中就有可能被阻塞
- UNLINK命令去移除一个数据库键时,UNLINK只会在数据库中移除对该键的引用(reference),而对键的实际移除操作则会交给后台线程执行,因此UNLINK命令将不会造成服务器阻塞
127.0.0.1:6379> UNLINK uname s1 msg4
(integer) 3
13. FLUSHDB:清空当前数据库
127.0.0.1:6379> FLUSHDB
OK
14. SWAPDB:互换数据库
127.0.0.1:6379> KEYS *
1) "s1"
2) "s2"
127.0.0.1:6379> SWAPDB 0 1
OK
127.0.0.1:6379> KEYS *
1) "msg1"
127.0.0.1:6379> SELECT 1
OK
127.0.0.1:6379[1]> KEYS *
1) "s1"
2) "s2"
参考书籍:《Redis使用手册》 黄健宏