select:切换数据库
select dbIndex
- Redis默认配置中是有16个数据库(0-15)。各个数据库之间的数据没有任何关联,可以存在相同的键。
- 虽然redis提供了多数据库,但是现在并不推荐使用。redis3.0中已经逐渐弱化了这个功能,比如redis的分布式实现redis cluster只允许使用0号数据库,只不过为了向下兼容老版本的数据库功能才没有废弃调
那么为什么要废弃调这个“优秀”的功能呢,原因有三:
- redis是单线程的。如果使用多个数据库,那么这些数据库仍然是使用一个CPU,彼此之间还是会受到影响
- 多数据库的使用方式,会让调试和运维不同业务的数据库变得困难,假如有一个慢查询存在,仍然会影响其他数据库,这样会使得别的业务定位问题非常困难
- 部分redis客户端根本不支持这种方式。即使支持,开发的时候来回切换数据形式的数据库,很容易弄乱
建议:在一台机器上部署多个redis实例,彼此之间用端口区分,因为现代计算机或者服务器通常是多核CPU。这样即保证了业务之间不会被影响,又合理的利用了CPU资源
flushdb/flushall:清空数据库
flushdb:清空当前数据库
作用
- 清空当前数据库中的所有key
- 此命令从不失败。
返回值
总是返回 OK
实例
redis> DBSIZE # 清空前的 key 数量
(integer) 4
redis> FLUSHDB
OK
redis> DBSIZE # 清空后的 key 数量
(integer) 0
flushall:清空所有数据库
作用
- 清空整个 Redis 服务器的数据(删除所有数据库的所有 key )。
- 此命令从不失败
返回值
总是返回 OK
实例
redis> DBSIZE # 0 号数据库的 key 数量
(integer) 9
redis> SELECT 1 # 切换到 1 号数据库
OK
redis[1]> DBSIZE # 1 号数据库的 key 数量
(integer) 6
redis[1]> flushall # 清空所有数据库的所有 key
OK
redis[1]> DBSIZE # 不但 1 号数据库被清空了
(integer) 0
redis[1]> SELECT 0 # 0 号数据库(以及其他所有数据库)也一样
OK
redis> DBSIZE
(integer) 0
注意
虽然这两个命令可以非常方便的清理数据,但是也带来两个问题:
- 会将所有数据清除,一旦误操作后果不堪设想。不过可以通过rename-command配置规避这个问题,以及在误操作后快速恢复数据。
- 如果当前数据库键值数据较多,flushdb/flushall存在阻塞redis的可能性,所以使用flushdb、flushall一定要小心谨慎