Notice: 函数 WP_Scripts::localize 的调用方法不正确$l10n 参数必须是一个数组。若要将任意数据传递给脚本,请改用 wp_add_inline_script() 函数。 请查阅调试 WordPress来获取更多信息。 (这个消息是在 5.7.0 版本添加的。) in /data/www/appblog/wp-includes/functions.php on line 6131

Redis单体及集群支持的数据库数量

Redis常被用作缓存、分布式锁、消息队列等的解决方案。Redis默认创建了16个数据库(db0~db15),而在Redis集群下只有一个db0数据库

可以通过修改Redis的配置文件/redis/redis.confdatabases: 16字段的值,重启Redis即可完成配置。

Redis数据库概念

Redis的数据库都以db+编号的方式命名,这是因为Redis不支持自定义数据库名。开发者则需要自己记录存储的数据与数据库之间的对应关系。此外,Redis不支持为每个数据库设置不同的访问密码,即客户端要么可以访问全部的数据库,要么所有的数据库都不能被访问

Redis中存在这么一个命令flushall,该命令可以清空当前Redis实例下所有数据库的数据。这与类似于mysql的关系型数据库不同,关系型数据库的每个数据库常用于存储不同应用程序的数据,且不提供清除当前实例下所有数据库数据的方法。

因此,对于Redis来说,用命名空间的方式理解Redis提供的db0~db15数据库会更合适,且一个Redis实例不适合存储多个应用程序的数据。比如,我们可以这么做:使用db0数据库存储应用程序在生产环境的数据,用db1数据库存储测试环境的数据。但是,不适合用db0数据库存储应用程序A的数据,用db1存储应用程序B的数据不同的应用程序应使用不同的Redis实例。此外,我们不必担心使用过多的Redis实例造成数据库服务压力过大,因为Redis是非常轻量级的,一个空的Redis实例占用的内存只有1MB左右

集群环境下的Redis实例

在单体Redis的情况下可以使用select命令来实现数据库的切换,但在集群环境下,Redis不支持使用select命令来切换数据库,这是因为在集群环境下只有一个db0数据库。集群与单体Redis的区别如下:

key批量操作支持有限:例如mget、mset必须在一个slot
Key事务和Lua支持有限:操作的key必须在一个节点
key是数据分区的最小粒度:不支持bigkey分区
不支持多个数据库:集群模式下只有一个db0
复制只支持一层:不支持树形复制结构

总结

  • Redis实例默认创建了16个数据库,且不支持自定义命名,以dbX的方式命名(db0~db15)
  • 默认数据库的数量可以在配置文件中修改
  • 应以命名空间的方式理解Redis数据库db,多个应用程序不应使用同一个Redis的不同库,而应一个应用程序对应一个Redis实例,不同的数据库可用于存储不同环境的数据
  • Redis集群下只有db0,不支持多db
上一篇 Redis 分区
下一篇 正则表达式:检验数字