Redis 为什么要分16个库

目录

一. 前言

二. 16 个数据库的由来

三. 正解 Redis 数据库概念

四. 集群环境下的 Redis 实例

五. 总结


一. 前言

    在实际的项目中,Redis 常被用作缓存、分布式锁、消息队列等的解决方案。但是在搭建好Redis 服务后,Redis 默认创建了16个数据库(db0 - db15),而在 Redis 集群下只有一个 db0 数据库。如下图所示:

二. 16 个数据库的由来

    Redis 是一个类似于字典结构的存储服务器,一个 Redis 实例提供了多个用来存储数据的字典,在客户端可以指定将数据存储于哪个字典中。这与在一个关系数据库实例中创建多个数据库类似,所以,可以将 Redis 中的每个字典都理解为一个独立的数据库。

    我们讲过 Redis 默认支持16个数据库,这可以通过修改 Redis 的配置文件 /redis/redis.conf 中的databases 字段的值,设置完毕并重启 Redis 即可完成配置。

    此外,客户端与 Redis 建立连接之后,默认会选择0号数据库即 db0,但可以使用 select 命令更换存储的数据库。

也可以通过修改配置文件的方式选择默认数据库:

三. 正解 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 的区别如下:

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

五. 总结

1. Redis 实例默认创建了16个数据库,且不支持自定义命名,以 dbX 的方式命名(db0 - db15)。

2. 默认数据库的数量可以在配置文件中修改。

3. 应以命名空间的方式理解 Redis 数据库 db,多个应用程序不应使用同一个 Redis 的不同库,而一个应用程序对应一个 Redis 实例,不同的数据库可用于存储不同环境的数据。

4. Redis集群下只有 db0,不支持多 db。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/341597.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微软Visual Studio产品之Visual C++编程进阶——一维数组(画画版)

我是荔园微风,作为一名在IT界整整25年的老兵,看到不少初学者在学习编程语言的过程中如此的痛苦,我决定做点什么,我小时候喜欢看小人书(连环画),在那个没有电视、没有手机的年代,这是…

dhcp 时间同步 详细介绍

装服务程序步骤 1.如果有默认配置 请先备份 再进行修改 2.修改完配置文件 请重启服务或重新加载配置文件 否则不生效 注意:有的软件 安装包的名字和 系统里服务程序的名字不一样 htttp httpd openssh-server ssh 高阶级改防火墙 一, dhcp自动分配IP地…

JavaScript基础02

1 - 运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值、比较和执行算数运算等功能的符号。 JavaScript中常用的运算符有: 算数运算符 递增和递减运算符 比较运算符 逻…

Unity组件开发--短连接HTTP

1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…

安防视频云平台/可视化监控云平台ARM版EasyCVR无法下载录像文件,如何解决?

视频集中存储/云存储/视频监控管理平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。GB28181视频监控/AI智能大数据视频分析EasyCVR平台已经广泛应用在工地…

Google I/O大会:Android 13

3个体验升级的方向 以智能手机为场景核心、 扩大智能终端的应用边界以及实现多设备间更好地协同。具体到系统体验层,安卓13将支持图标颜色随主题更换、为不同应用设定使用的语言、新的媒体中心界面等等,同时谷歌也推出了自家的钱包应用(Goog…

065:vue中将一维对象数组转换为二维对象数组

第065个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

如何将ArcGIS工程文件迁移到ArcGIS Pro内

当你刚接触ArcGIS Pro的时候,尝试新建一个工程文件会发现工程文件的后缀已经改变,那么以前在ArcGIS内辛苦制作的工程文件是否就不能在ArcGIS Pro内使用了,答案是否定的,对此Esri也给出了解决方案,这里为大家介绍一下迁…

yolov8 瑞芯微 RKNN 的 C++部署,部署工程难度小、模型推理速度快

之前写过两次yolov8目标检测部署,后续继续思考,针对部署还有优化空间,本示例的部署方式优化了部署难度,加快了模型推理速度(略微增加了后处理的时耗)。 特别说明:如有侵权告知删除,…

【数据库系统概论】期末复习3

系列文章 期末复习1 期末复习2 系列文章试述 SQL 语言的特点。什么是基本表?什么是视图?两者的区别和联系是什么?试述视图的优点。哪类视图是可以更新的?哪类视图是不可更新的?各举一例说明。连接查询嵌套查询数据更新…

WPF 布局

了解 WPF中所有布局如下,我们一一尝试实现,本文档主要以图形化的形式展示每个布局的功能。 布局: Border、 BulletDecorator、 Canvas、 DockPanel、 Expander、 Grid、 GridView、 GridSplitter、 GroupBox、 Panel、 ResizeGrip、 Separat…

Google的Ndk-Sample学习笔记之一(hello-jniCallback)

前言: 近段时间因为项目的需求,需要使用JNI,所以下载了Google的Ndk-Sample学习下,准备记录 下来,留给后期自己查看 问题点一:JNI_OnLoad方法必须返回JNI的版本 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {JNIEnv *env;memset(&g_ctx, 0, sizeof(g_…