Redis(开发与运维):09---数据库管理(dbsize、select、flushdb、flushall)
关于数据库管理的更多知识点,还可以参阅另外一篇文章:https://blog.csdn.net/qq_41453285/article/details/103245279一、数据库数量()许多关系型数据库,例如MySQL支持在一个实例下有多个数据库存在 的。但是与关系型数据库用字符来区分不同数据库名不同,Redis只是用数字作为多个数据库的实现,Redis默认配置中是有16个数据库二、dbsize
·
- 关于数据库管理的更多知识点,还可以参阅另外一篇文章:Redis(设计与实现):16---数据库之服务器中的数据库(struct redisDb、dbnum属性、database选项、db属性、SELECT命令)_董哥的黑板报的博客-CSDN博客
一、数据库数量
- 许多关系型数据库,例如MySQL支持在一个实例下有多个数据库存在 的。但是与关系型数据库用字符来区分不同数据库名不同,Redis只是用数字作为多个数据库的实现,Redis默认配置中是有16个数据库
dbsize命令
- dbsize命令可以返回当前数据库中键的数量
dbsize
二、切换数据库(select)
select dbIndex
- select命令可以切换数据库。数据库编号默认从0开始
- redis-cli连接Redis服务端时,默认连接的是0号数据库
演示案例
例如下面在0号数据库中建立一个hello字符串键,但是在15号数据库中查找不到它
多数据库功能已经逐渐弱化了
- 那么能不能像使用测试数据库和正式数据库一样,把正式的数据放在0号数据库,测试的数据库放在1号数据库,那么两者在数据上就不会彼此受影响了。事实真有那么好吗?
- Redis3.0中已经逐渐弱化这个功能,例如Redis的分布式实现Redis Cluster只允许使用0号数据库,只不过为了向下兼容老版本的数据库功能, 该功能没有完全废弃掉,下面分析一下为什么要废弃掉这个“优秀”的功能呢?总结起来有三点:
- Redis是单线程的。如果使用多个数据库,那么这些数据库仍然是使用一个CPU,彼此之间还是会受到影响的
- 多数据库的使用方式,会让调试和运维不同业务的数据库变的困难, 假如有一个慢查询存在,依然会影响其他数据库,这样会使得别的业务方定位问题非常的困难
- 部分Redis的客户端根本就不支持这种方式。即使支持,在开发的时候来回切换数字形式的数据库,很容易弄乱
- 个人建议如果要使用多个数据库功能,完全可以在一台机器上部署多个Redis实例,彼此用端口来做区分,因为现代计算机或者服务器通常是有多个CPU的。这样既保证了业务之间不会受到影响,又合理地使用了CPU资源
三、清除数据库(flushdb、flushall)
- flushdb/flushall命令用于清除数据库,两者的区别的是:flushdb只清除当前数据库,flushall会清除所有数据库
这两个命令使用需要谨慎
- flushdb/flushall命令会将所有数据清除,一旦误操作后果不堪设想,后面的文章会介绍rename-command配置规避这个问题,以及如何在误操作后快速恢复数据
- 如果当前数据库键值数量比较多,flushdb/flushall存在阻塞Redis的可能性
演示案例
- 例如下面0号数据库中有2个键,1号数据库有1个键,我们使用flushdb只清空1号数据库中的键
- 我们在1号数据库中使用flushall命令,此时会清除所有数据库中的键
更多推荐






所有评论(0)