Redis提供了几个面向Redis数据库的操作,它们分别是dbsize、select、flushdb/flushall命令
1、数据库切换
select dbIndex
关系型数据库,例如MySQL支持在一个实例下有多个数据库存在的,但是与关系型数据库用字符来区分不同数据库名不同,Redis只是用数字作为多个数据库的实现。Redis默认配置中是有16个数据库;
redis.conf配置文件
select0操作将切换到第一个数据库,select15选择最后一个数据库,但是0号数据库和15号数据库之间的数据没有任何关联,甚至可以存在相同的键;
当使用redis-cli-h{ip}-p{port}连接Redis时,默认使用的就是0号数据库,当选择其他数据
库时,会有[index]的前缀标识,其中index就是数据库的索引下标;
Redis3.0中已经逐渐弱化这个功能,例如Redis的分布式实现RedisCluster只允许使用0号数据库,只不过为了向下兼容老版本的数据库功能,该功能没有完全废弃掉;
忘掉该功能的原因有三点:
1)、Redis是单线程的。如果使用多个数据库,那么这些数据库仍然是使用
一个CPU,彼此之间还是会受到影响的。
2)、多数据库的使用方式,会让调试和运维不同业务的数据库变的困难,
假如有一个慢查询存在,依然会影响其他数据库,这样会使得别的业务方定
位问题非常的困难。
3)、部分Redis的客户端根本就不支持这种方式。即使支持,在开发的时候
来回切换数字形式的数据库,很容易弄乱。
2、flushdb/flushall
flushdb/flushall命令用于清除数据库,两者的区别的是flushdb只清除当前数据库,flushall会清除所有数据库。
flushdb/flushall命令可以非常方便的清理数据,但是也带来两个问题:
- 1)、flushdb/flushall命令会将所有数据清除,一旦误操作后果不堪设想
- 2)、如果当前数据库键值数量比较多,flushdb/flushall存在阻塞Redis的可能
性。
3、核心点
1、Redis高性能的三个因素:纯内存存储、IO多路复用技术、单线程架构
2、由于Redis的单线程架构,所以需要每个命令能被快速执行完,否则会存在阻塞Redis的可能,理解Redis单线程命令处理机制是开发和运维Redis的核心之一。