一个高性能的 key-value 数据库
数据库操作 切换数据库
默认情况下,Redis服务器启动时会创建16个数据库,使用号码0-15标识,默认使用0号数据库。不同数据库拥有不同的命名空间,因此不同数据库可拥有同名的键。
select DBID
127.0.0.1:6379> keys list* 1) "list11" 2) "list1" 3) "list2" 127.0.0.1:6379> select 2 OK 127.0.0.1:6379[2]> keys list* (empty array) 127.0.0.1:6379[2]>获取数据库键值对数量
dbsize
127.0.0.1:6379> dbsize (integer) 66清空数据库
清空所有数据库。
flushall [ASYNC|SYNC]
清空当前数据库。
flushdb [ASYNC|SYNC]
ASYNC选项可指定异步方式,后台线程执行。
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> flushall OK互换数据库
swapdb index1 index2
键操作 匹配模式获取键
可使用的通配符有:*,匹配0个或任意多个字符;?,匹配单个字符;[str],匹配给定字符串中的单个字符;[?-?],匹配范围内单个字符。
keys pattern
127.0.0.1:6379> keys list* 1) "list11" 2) "list1" 3) "list2" 127.0.0.1:6379> keys list1 1) "list1" 127.0.0.1:6379> keys list (empty array) 127.0.0.1:6379> keys * 1) "article::001" 2) "b1" 3) "house" 4) "st1" 5) "soft" 6) "bb1" 7) "song"迭代数据库中的键
keys命令会检查库中所有键,一次性将符合条件的所有键返回。Redis提供了迭代器scan命令,每次获取库中一部分键,重复执行来迭代获取符合条件的键。
scan cursor [MATCH pattern] [COUNT count] [TYPE type]
cursor为0开始一次新的迭代,scan每次会返回数量不确定的键且可能包含重复键,返回的结果包括下一次迭代开始的游标和一个元素列表。count可设置期望返回的键数量但不保证按count返回,默认为10。
127.0.0.1:6379> scan 0
1) "12"
2) 1) "hyq"
2) "count"
3) "bignum"
4) "thousand"
5) "mountain"
6) "hello"
7) "soft"
8) "msg"
9) "list2"
10) "bor"
11) "pi"
......
127.0.0.1:6379> scan 39
1) "0"
2) 1) "db11"
2) "book"
3) "db1"
127.0.0.1:6379>
127.0.0.1:6379> scan 0 match list*
1) "12"
2) 1) "list2"
......
127.0.0.1:6379> scan 10 match list*
1) "25"
2) (empty array)
127.0.0.1:6379> scan 25 match list*
1) "61"
2) 1) "list1"
127.0.0.1:6379> scan 61 match list*
1) "39"
2) 1) "list11"
127.0.0.1:6379> scan 39 match list*
1) "0"
2) (empty array)
127.0.0.1:6379> scan 0 count 5
1) "24"
2) 1) "hyq"
2) "count"
3) "bignum"
4) "thousand"
5) "mountain"
127.0.0.1:6379> scan 24 count 5
1) "12"
2) 1) "hello"
2) "soft"
3) "msg"
4) "list2"
5) "bor"
6) "pi"
127.0.0.1:6379>
127.0.0.1:6379> scan 0 type hash
1) "12"
2) (empty array)
......
127.0.0.1:6379> scan 10 type hash
1) "25"
2) 1) "article::001"
2) "article::002"
127.0.0.1:6379> scan 0 type hasa
1) "12"
2) (empty array)
......
为解决数据结构中可能的阻塞,Redis为散列、集合和有序集合也提供了迭代命令。
hscan key cursor [MATCH pattern] [COUNT count]
127.0.0.1:6379> hscan article::002 0 1) "0" 2) 1) "view_count" 2) "1" 127.0.0.1:6379> hgetall article::002 1) "view_count" 2) "1"
sscan key cursor [MATCH pattern] [COUNT count]
127.0.0.1:6379> sscan soft 0 1) "0" 2) 1) "idea" 2) "mysql" 3) "shell" 127.0.0.1:6379> smembers soft 1) "idea" 2) "mysql" 3) "shell" 127.0.0.1:6379> type soft set 127.0.0.1:6379> sscan set3 0 (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379> type set3 zset
zscan key cursor [MATCH pattern] [COUNT count]
127.0.0.1:6379> zscan set3 0
1) "0"
2) 1) "a"
2) "1"
3) "b"
4) "2"
5) "d"
6) "4"
7) "e"
8) "5"
9) "c"
10) "6"
127.0.0.1:6379> zrange set3 0 10 withscores
1) "a"
2) "1"
3) "b"
4) "2"
5) "d"
6) "4"
7) "e"
8) "5"
9) "c"
10) "6"
随机返回一个键
randomkey
127.0.0.1:6379> randomkey "hello" 127.0.0.1:6379[2]> randomkey (nil)检查给定键是否存在
exists key [key ...]
127.0.0.1:6379> exists set1 (integer) 1 127.0.0.1:6379> exists set1 sset (integer) 1 127.0.0.1:6379> exists sset (integer) 0查看键的类型
type key
127.0.0.1:6379> type world string 127.0.0.1:6379> type h1 none 127.0.0.1:6379> type set1 set 127.0.0.1:6379> type guangdong zset 127.0.0.1:6379> type article::002 hash修改键名
可直接覆盖已存在的键。
rename key newkey
或只在新键名不存在时修改。
renamenx key newkey
127.0.0.1:6379> rename set3 sset OK 127.0.0.1:6379> rename set3 sset (error) ERR no such key 127.0.0.1:6379> renamenx sset h1 (integer) 1 127.0.0.1:6379> renamenx h1 world (integer) 0移动键
将指定键移动到另一个数据库,当目标数据库已有同名键时放弃执行。
move key db
127.0.0.1:6379> get world "beauty" 127.0.0.1:6379> move world 2 (integer) 1 127.0.0.1:6379> get world (nil) 127.0.0.1:6379> select 2 OK 127.0.0.1:6379[2]> keys * 1) "world"移除键
同步方式移除。
del key [key ...]
异步方式移除,执行时只移除了对键的引用,实际移除操作在后台线程执行。
unlink key [key ...]
127.0.0.1:6379> del db1111 st2 pi (integer) 3 127.0.0.1:6379> del db1111 st2 pi (integer) 0 127.0.0.1:6379> unlink band hy (integer) 2 127.0.0.1:6379> unlink band hy (integer) 0
值操作 对键的值排序
通过sort命令可对列表元素、集合元素或有序集合成员进行排序,默认进行数字值排序,按从小到大的顺序返回排序后的各个值。
sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern ...]] [ASC|DESC] [ALPHA] [STORE destination]
ALPHA选项指定使用字符串排序而非数字值排序,LIMIT选项可获取部分结果,offset指定跳过的元素数量,count指定需获取数量。当使用BY选项时,SORT命令将不再依据元素自身的值进行排序,而是按照给定pattern组合成新的key,并按照新key中对应的内容进行排序,新key无时默认内容为0。GET选项可获取外部键的值作为结果。pattern可接受包含*的字符串、包含*和->的字符串、#。
127.0.0.1:6379> sort set3 (error) ERR One or more scores can't be converted into double 127.0.0.1:6379> sort set3 alpha 1) "a" 2) "b" 3) "c" 4) "d" 5) "e" 127.0.0.1:6379> sort set3 alpha limit 0 1 1) "a" 127.0.0.1:6379> sort set3 alpha limit 2 2 1) "c" 2) "d" 127.0.0.1:6379> sadd set1 5 8 2 6 50 9 127.0.0.1:6379> hset p:5 time 200 (integer) 1 127.0.0.1:6379> hset p:7 time 100 (integer) 1 127.0.0.1:6379> hset p:2 time 600 (integer) 1 127.0.0.1:6379> hset p:6 time 500 (integer) 1 127.0.0.1:6379> sort set1 by p:*->time 1) "50" 2) "8" 3) "9" 4) "5" 5) "6" 6) "2" 127.0.0.1:6379> sort set1 get p:*->time 1) "600" 2) "200" 3) "500" 4) (nil) 5) (nil) 6) (nil)



