0 序言
一个Redis服务器可以包含多个数据库。在默认情况下,Redis服务器在启动时将会创建16个数据库:这些数据库都使用号码进行标识,其中第一个数据库为0号数据库,第二个数据库为1号数据库,而第三个数据库则为2号数据库,以此类推。
Redis虽然不允许在同一个数据库中使用两个同名的键,但是由于不同数据库拥有不同的命名空间,因此在不同数据库中使用同名的键是完全没有问题的,而用户也可以通过使用不同数据库来存储不同的数据,以此来达到重用键名并且减少键冲突的目的。
存储值命名空间
redis的key的命名规范
1.建议全部大写
2.key不能太长也不能太短,键名越长越占资源,太短可读性太差
3.key 单词与单词之间以 : 分开
1 select 切换至指定数据库
// db 代表 0-15
SELECT db
2 KEYS:获取所有与给定匹配符相匹配的键
因为KEYS命令需要检查数据库包含的所有键,并一次性将符合条件的所有键全部返回给客户端,所以当数据库包含的键数量比较大时,使用KEYS命令可能会导致服务器被阻塞。
KEYS pattern
示例:
3 SCAN:以渐进方式迭代数据库中的键
该命令是一个迭代器,它每次被调用的时候都会从数据库中获取一部分键,用户可以通过重复调用SCAN命令来迭代数据库包含的所有键:
SCAN cursor
SCAN命令的cursor参数用于指定迭代时使用的游标,游标记录了迭代的轨迹和进度。在开始一次新的迭代时,用户需要将游标设置为0:
SCAN 0
SCAN命令的执行结果由两个元素组成:
●第一个元素是进行下一次迭代所需的游标,如果这个游标为0,那么说明客户端已经对数据库完成了一次完整的迭代。
●第二个元素是一个列表,这个列表包含了本次迭代取得的数据库键;如果SCAN命令在某次迭代中没有获取到任何键,那么这个元素将是一个空列表。
关于SCAN命令返回的键列表,有两点需要注意:
●SCAN命令可能会返回重复的键,用户如果不想在结果中包含重复的键,那么就需要自己在客户端中进行检测和过滤。
●SCAN命令返回的键数量是不确定的,有时甚至会不返回任何键,但只要命令返回的游标不为0,迭代就没有结束。
SCAN命令的迭代保证针对数据库的一次完整迭代(full iteration)以用户给定游标0调用SCAN命令开始,直到SCAN命令返回游标0结束。SCAN命令为完整迭代提供以下保证:
●从迭代开始到迭代结束的整个过程中,一直存在于数据库中的键总会被返回。
●如果一个键在迭代的过程中被添加到数据库中,那么这个键是否会被返回是不确定的。
●如果一个键在迭代的过程中被移除了,那么SCAN命令在它被移除之后将不再返回这个键,但是这个键在被移除之前仍然有可能被SCAN命令返回。
●无论数据库如何变化,迭代总是有始有终的,不会出现循环迭代或者其他无法终止迭代的情况。
完整迭代示例:只要返回的游标不为0,迭代就没有结束,返回的游标是下一次迭代要用的
指定返回键的期望数量:
SCAN cursor [COUNT number]
迭代与给定匹配符相匹配的键
SCAN cursor [MATCH pattern]
HSCAN、SSCAN、ZSCAN这3个命令可以用于迭代散列,集合,有序集合。
4 SORT:对键的值进行排序
执行SORT命令对列表元素、集合元素或者有序集合成员进行排序。
SORT key
指定排序方式
SORT key [ASC|DESC]
对字符串值进行排序
SORT key [ALPHA]
只获取部分排序结果
SORT key [LIMIT offset count]
5 EXISTS:检查给定键是否存在
可以通过使用EXISTS命令,检查给定的一个或多个键是否存在于当前正在使用的数据库中:
EXISTS key [key ...]
只有2个键是存在的
6 DBSIZE:获取数据库包含的键值对数量
DBSIZE
7 TYPE:查看键的类型
TYPE key
8 RENAME、RENAMENX:修改键名
RENAME origin new
9 MOVE:将给定的键移动到另一个数据库
MOVE key db
当目标数据库存在与给定键同名的键时,MOVE命令将放弃执行移动操作。
10 DEL:移除指定的键
DEL命令允许用户从当前正在使用的数据库中移除指定的一个或多个键,以及与这些键相关联的值:
DEL key [key ...]
11 UNLINK:以异步方式移除指定的键
因为DEL命令会以同步方式执行移除操作,所以如果待移除的键非常庞大或者数量众多,那么服务器在执行移除操作的过程中就有可能被阻塞。比如,移除一个包含上百万个元素的集合,移除一个包含数十万个键值对的散列,或者一次移除成千上万个键,都有可能引起服务器阻塞。
UNLINK命令与DEL命令一样,都可以用于移除指定的键,但它与DEL命令的区别在于,当用户调用UNLINK命令去移除一个数据库键时,UNLINK只会在数据库中移除对该键的引用(reference),而对键的实际移除操作则会交给后台线程执行,因此UNLINK命令将不会造成服务器阻塞。
UNLINK key [key ...]
UNLINK命令从Redis 4.0版本开始可用
12 FLUSHDB:清空当前数据库
通过使用FLUSHDB命令,用户可以清空当前正在使用的数据库:
FLUSHDB
与DEL命令一样,FLUSHDB命令也是一个同步移除命令,并且因为FLUSHDB移除的是整个数据库而不是单个键,所以它常常会引发比DEL命令更为严重的服务器阻塞现象。
为了解决这个问题,Redis 4.0给FLUSHDB命令新添加了一个async选项:
FLUSHDB async
13 FLUSHALL:清空所有数据库
使用FLUSHALL命令,用户可以清空Redis服务器包含的所有数据库:
FLUSHALL
与FLUSHDB命令一样,以同步方式执行的FLUSHALL命令也可能会导致服务器阻塞,因此Redis 4.0也给FLUSHALL命令添加了同样的async选项:
FLUSHALL async
14 SWAPDB:互换数据库
SWAPDB命令接受两个数据库号码作为输入,然后对指定的两个数据库进行互换,最后返回OK作为结果:
SWAPDB x y
SWAPDB命令从Redis 4.0版本开始可用。