网络知识 娱乐 Redis数据库详解

Redis数据库详解

在Redis中,我们在使用相关命令时实际上是在默认的数据库中执行的,因为在Redis中是有很多个数据库的,不同数据库与数据库之间数据是不同步的,那么在这一篇中, 我们主要了解一下Redis中数据库相关知识。


数据库管理

在Redis中主要提供了dbsize、select、flushdb/flushall等命令,下面我们分别介绍这些命令的详细使用。

1、切换数据库

select index

我们知道在其它的关系型数据库例如Mysql中也是支持有多个数据库,并且基本上关系型数据库都是以名字来判断数据库是否重复的。而在Redis中则不同,Redis是通过数字来判断的数据库是否重复的。在Redis中默认的数据库为0,而默认最大的数据库为16个。

select命令可以选择切换的数据库,因为Redis中默认是从0开始的,所以默认最大为15。如果超过这个范围Redis则会提示报错。并且在Redis中不同数据库与数据库之间,数据是不同步,也就是没有任何关系,也就是如上图所示。下面我们用更形象的图来表示Redis不同数据库之间的存储。如下图所示:

既然Redis中有多个数据库的功能,那我们在日常开发中,是不是可以将生产中的数据存储到指定的数据库中,然后将测试环境中的数据存储到另一个数据库中呢?答案就是在技术上当然是可以,但在业务上基本不会这么做,因为我们在平常使用关系型数据库例如Mysql我们也不会将生产环境中的数据和测试环境中的数据存储在同一个数据库实例中,而基本都是将生产环境和测试环境分离。那么Redis也是一样的。除此之外,在Redis以后在做分布式时,只允许使用0号数据库,也就是说越高版本的Redis已经越来越弱化这个功能了。只是为了兼容而没有将多数据库的功能去掉而已。下面我们分析一下,为什么Redis要弱化这个多数据库的功能。

  • Redis是单线程的。我们已经在以前的文章中多次介绍过了。所以即使我们按照业务把不同的数据存储到不同的数据库中,那在执行相关命令时,因为单线程等原因,它们彼此之间还是会有影响的。
  • 如我们在实际的开发中使用了多数据库的功能,那么如果在某一个数据库中出现相应的问题,如慢查询等。那么它会影响其它数据库的相关性能,并且,我们还不好排查问题,因为相比一个数据库来说,我们很难快速的定位出现的问题是在哪个数据库中。
  • 部分Redis客户端工具并不支持,这种选择多数据库的功能。即使支持,也很有可能因为疏忽,而对不同的数据库数据产生影响。

如我们在实际的开发中,如果想使用多个数据库的功能时,可以向之前文章中介绍的那样,部署多个实例,也就是不同的端口来实现多数据库的功能。


2.flushdb/flushall 看名字我们应该能猜到flushdb和flushall都是清空Redis数据库的命令。它们的区别就是前者是清空当前数据库的中的数据,而后者是清除所有数据库中的数据。下面我们看具体的事例。

下面我们看一下flushdb/flushall的注意事项:

  • flushdb/flushall命令会一下清除Redis中当前数据库或者所有数据库的内容,如果我们操作失误,很容易造成安全事故。在后续的文章中我们将介绍rename-command配置,rename-command配置则可以必免上述的问题,以及出现上述问题时的数据恢复。
  • 如果当前Redis中的数据量比较多时,flushdb/flushall命令可能会造成阻塞,所以要慎用。