Redis 为什么要分16个库

2024-01-12 18:04
文章标签 16 redis 要分 个库

本文主要是介绍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。

这篇关于Redis 为什么要分16个库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/598704

相关文章

Redis实现分布式锁全解析之从原理到实践过程

《Redis实现分布式锁全解析之从原理到实践过程》:本文主要介绍Redis实现分布式锁全解析之从原理到实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景介绍二、解决方案(一)使用 SETNX 命令(二)设置锁的过期时间(三)解决锁的误删问题(四)Re

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Redis 热 key 和大 key 问题小结

《Redis热key和大key问题小结》:本文主要介绍Redis热key和大key问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、什么是 Redis 热 key?热 key(Hot Key)定义: 热 key 常见表现:热 key 的风险:二、

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.