Redis 集群实现分布式缓存的示例操作流程【Redis 系列之五】

〇、前言

Redis 集群的核心优势在于高可用性、可扩展性和高性能,特别适合需要处理大规模数据和高并发请求的应用场景。

本文先介绍了什么是 Redis 集群,然后通过示例,以手动和自动两种方式搭建集群,仅供参考。

安装、配置等详见博主过往 Redis 相关文章,都在这里了:https://www.cnblogs.com/hnzhengfy/category/2229717.html

一、Redis 集群简介

Redis 集群(Redis Cluster)是 Redis 官方在 3.0 版本推出的一套分布式存储方案。Redis 5.0 版本开始便把自动创建集群工具,集成到 redis-cli 中,因此更推荐使用新版本。

Redis集群是一个分布式实现的网状结构,提供了数据的自动分片以及对于数据节点故障的高可用性支持。每个节点都通过 TCP 连接跟其他每个节点连接,在一个有 N 个节点的集群中,每个节点都有 N-1 个流出的 TCP 连接,和 N-1 个流入的连接,这些 TCP 连接会永久保持。

如下图中一个蓝色圆为一个 Redis 节点:

下面是 Redis 集群的几个特点简介:

  • 数据分布

Redis 集群通过哈希槽(hash slot)来分配数据,整个集群共有 16384 个槽位。

所有的单个键值对将被均匀的保存到 16384 个哈希槽中的一个,键的槽位是通过对 key 键进行 CRC16 计算然后取模 16384 得到的。

不同的主节点负责不同的哈希槽范围,这个范围可以在集群配置时手动指定。

  • 高可用性

Redis 集群使用主从复制模型 提供高可用性,每个主节点 master 都有至少一个从节点 slave 作为备份。

自动故障转移。当某个主节点发生故障时,其对应的从节点会升级为主节点继续提供服务,从而保证了集群的可用性。

当存在多个从节点时,其所有子节点会广播一个数据包给集群里的其他主节点来请求选票,一旦某个从节点收到了大多数主节点的回应,那么它就赢得了选举,被推选为主节点,负责处理之前旧的主节点负责的哈希槽。这一过程是自动完成的,不需要人工干预。

  • 扩展性

Redis 集群允许动态添加或移除节点,从而轻松扩展读写性能和存储容量。

添加新节点后,可以手动或者自动将某些哈希槽迁移到新节点上。

Redis 集群的典型应用场景:

  • 缓存系统:需要存储大量热点数据,并且要求高并发访问。
  • 会话存储:分布式系统中存储用户会话信息。
  • 消息队列:实现高性能的消息传递和任务调度。
  • 排行榜/计数器:存储实时更新的排名或计数数据。
  • 分布式锁:在分布式系统中实现高效的锁机制。

尽管 Redis 集群有很多优点,但也需要注意以下几点:

  • **客户端兼容性:**需要使用支持 Redis 集群模式的客户端,以正确处理重定向(MOVED 和 ASK)。
  • **事务支持有限:**Redis 集群不支持跨节点的事务操作。
  • **复杂性增加:**相比单机 Redis,集群的部署、管理和维护更加复杂。
  • **网络依赖:**集群的性能和稳定性依赖于网络环境,网络延迟可能会影响性能。

更详细的介绍见官方文档:Scale with Redis Cluster Redis cluster specification

二、Redis 集群的搭建

2.1 简介

依据 Redis Cluster 内部故障转移实现原理,Redis 集群至少需要 3 个主节点,而每个主节点至少有 1 从节点,因此搭建一个集群至少包含 6 个节点,三主三从。

若为生产环境需要分别部署在 6 台不同机器上,并需要保证互相之间网络保持联通。本文为测试实例,将部署在同一台测试机上。

目前搭建方式有两种:

  • 手动搭建,通过 cluster 命令一步步实现。
  • 自动搭建,使用官方提供的集群管理工具快速搭建。

两种方式原理一样,自动搭建方式只是将手动搭建方式中需要执行的 Redis 命令封装成了可执行程序。

生产环境推荐使用自动搭建方式,更便捷、可靠。

2.2 手动搭建的步骤

2.2.1 分别配置并启动六个 Redis 服务节点

测试环境为单机部署六个节点,因此需要通过端口来区分。

节点信息预设:

|--------|------|---------|------------------------------------------|
| TCP 端口 | 节点类型 | 从节点对应端口 | 配置文件位置 |
| 7001 | 主 | 9001 | /usr/local/redis-cluster/7001/redis.conf |
| 7002 | 主 | 9002 | /usr/local/redis-cluster/7002/redis.conf |
| 7003 | 主 | 9003 | /usr/local/redis-cluster/7003/redis.conf |
| 9001 | 从 | - | /usr/local/redis-cluster/9001/redis.conf |
| 9002 | 从 | - | /usr/local/redis-cluster/9002/redis.conf |
| 9003 | 从 | - | /usr/local/redis-cluster/9003/redis.conf |

如下涉及到的命令。

下载和安装 Redis:

复制代码
[root@www ~]# cd /usr/local
[root@www local]# wget http://download.redis.io/releases/redis-7.2.7.tar.gz # 下载安装包
[root@www local]# tar -zxvf redis-7.2.7.tar.gz # 解压
[root@www local]# cd redis-7.2.7
[root@www redis-7.2.7]# make && make install  # 执行安装,直至完成即可

注意:Redis 基于 C 语言开发,故编译源码需要 GCC(Linux 下的一个编译器,这里需要用来编译 .c 文件)的支持。如机器上未安装需要先执行命令yum -y install gcc安装 GCC 编译工具,然后make distclean清除之前生成的文件,最后make && make install重新编译安装。

分别修改六个配置文件:(根据端口号进行不同配置)

复制代码
bind 10.10.1.1                         # 设置当前节点主机地址       
port 7001                              # 设置客户端连接监听端口     
pidfile /var/run/redis_7001.pid        # 设置 Redis 实例 pid 文件       
daemonize yes                          # 以守护进程运行 Redis 实例     
cluster-enabled yes                    # 启用集群模式
cluster-node-timeout 15000             # 设置当前节点连接超时毫秒数
cluster-config-file nodes-7001.conf    # 设置当前节点集群配置文件路径
databases 1                            # 集群模式,Redis 自动将数据库的数量从默认的 16 个(databases 配置项)调整为 1 个
protected-mode no                      # 关闭保护模式,因为配置了具体的 IP,但未配置密码【可根据实际情况配置】

然后再启动服务:

复制代码
[root@www ~]# /usr/local/bin/redis-server /usr/local/redis-cluster/9001/redis.conf # 分别启动六个 Redis 服务,注意配置文件的路径
[root@www ~]# ps -ef|grep redis # 查看服务启动是否成功
root     13663     1  0 10:23 ?        00:00:06 /usr/local/bin/redis-server 10.10.1.1:7001 [cluster]
root     13921     1  0 10:26 ?        00:00:06 /usr/local/bin/redis-server 10.10.1.1:7002 [cluster]
root     13939     1  0 10:26 ?        00:00:06 /usr/local/bin/redis-server 10.10.1.1:7003 [cluster]
root     16183     1  0 11:05 ?        00:00:00 /usr/local/bin/redis-server 10.10.1.1:9001 [cluster]
root     16253     1  0 11:06 ?        00:00:00 /usr/local/bin/redis-server 10.10.1.1:9002 [cluster]
root     16268     1  0 11:06 ?        00:00:00 /usr/local/bin/redis-server 10.10.1.1:9003 [cluster]
root     16281 16200  0 11:06 pts/1    00:00:00 grep --color=auto redis
[root@www ~]# 
# 若服务未启动成功,可能是端口被占用
lsof -i:9001
# lsof 命令安装:
yum install lsof -y

2.2.2 节点握手

节点握手(Node Handshake)是指集群中的各个节点相互识别并建立连接的过程。这是集群启动和正常运作的基础步骤之一,确保了所有节点能够相互通信,并共同维护整个集群的状态。

因为集群中的节点在创建之初都是相互独立的,只有通过节点握手操作,才可以将全部节点关联起来

复制代码
# 节点握手的命令格式:
cluster meet ip port

Redis 集群各个节点之间都是有联系的,但并不需要通过语句把全部的节点都进行握手,因为这些 TCP 连接是可以互相传导的。例如 A 和 B 之间有关联,B 和 C 之间有关联,那么 A 和 C 之间就会自动创建连接,无需重复创建。

因此,只需要在 7001 节点,把其他五个节点都连接上即可。

如下操作,先进入 7001 节点,然后通过命令连接其他 5 个节点

复制代码
# 首先,进入 A 节点
[root@www ~]# /usr/local/bin/redis-cli -h 10.225.141.138 -p 7001  
10.10.1.1:7001>
# 然后,连接其他五个节点
10.10.1.1:7001> cluster meet 10.10.1.1 7002  
OK
10.10.1.1:7001> cluster meet 10.10.1.1 7003
OK
10.10.1.1:7001> cluster meet 10.10.1.1 9003
OK
10.10.1.1:7001> cluster meet 10.10.1.1 9002
OK
10.10.1.1:7001> cluster meet 10.10.1.1 9001
OK
10.10.1.1:7001>
# 配置完成后,可以通过 cluster nodes 命令,查看节点间的连接情况
# 查看 7002 端口:
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7002 cluster nodes
6da31e7a6e89f7cdeb67294b557a2c13aa70a96d 10.10.1.1:9002@19002 master - 0 1744100953776 4 connected
95da38d0420e5908951a1b069e7eb09aba3e0fc4 10.10.1.1:7001@17001 master - 0 1744100955785 1 connected
14e23d0018458d16c30f3ecd6f154b1e54cfef6c 10.10.1.1:9003@19003 master - 0 1744100953000 3 connected
656696a751c65c702b40b4429353918cac6ca1bc 10.10.1.1:7003@17003 master - 0 1744100954781 2 connected
c1920f7b5d6de3763bb33fe0b801ffda8d5e4219 10.10.1.1:7002@17002 myself,master - 0 1744100952000 0 connected
50927b3da6dd835093fc02c045bb791685393e69 10.10.1.1:9001@19001 master - 0 1744100953000 5 connected
# 查看 9003 端口:
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 9003 cluster nodes
50927b3da6dd835093fc02c045bb791685393e69 10.10.1.1:9001@19001 master - 0 1744100973213 5 connected
c1920f7b5d6de3763bb33fe0b801ffda8d5e4219 10.10.1.1:7002@17002 master - 0 1744100973000 0 connected
95da38d0420e5908951a1b069e7eb09aba3e0fc4 10.10.1.1:7001@17001 master - 0 1744100974216 1 connected
6da31e7a6e89f7cdeb67294b557a2c13aa70a96d 10.10.1.1:9002@19002 master - 0 1744100972000 4 connected
14e23d0018458d16c30f3ecd6f154b1e54cfef6c 10.10.1.1:9003@19003 myself,master - 0 1744100971000 3 connected
656696a751c65c702b40b4429353918cac6ca1bc 10.10.1.1:7003@17003 master - 0 1744100974000 2 connected
[root@www ~]#

根据输出结果可以看出,每个节点都保持有 5 个连接,也就标志这个握手配置完成。

2.2.3 分配槽位

槽位就是 Redis 集群中的哈希槽(Hash Slot) 机制,它可以实现数据的分布式存储和负载均衡

什么是哈希槽?在 Redis 集群中,整个键空间被划分为16384个哈希槽(编号从0到16383)。每个节点负责一部分哈希槽,当客户端向集群中的某个节点发送命令时,如果该命令涉及的键属于这个节点所负责的哈希槽,则直接处理;如果不属于,则会返回一个重定向信息给客户端,指示它去正确的节点执行操作。

当完成握手操作后,此时的集群并未是上线运行状态,可以通过cluster info命令来查看集群当前状态。

复制代码
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7001 cluster info
cluster_state:fail
cluster_slots_assigned:0
cluster_slots_ok:0
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:0
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:1670
cluster_stats_messages_pong_sent:1604
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:3279
cluster_stats_messages_ping_received:1604
cluster_stats_messages_pong_received:1675
cluster_stats_messages_received:3279
total_cluster_links_buffer_limit_exceeded:0
[root@www ~]#

通过第一行中的cluster_state:fail,可以看出当前集群状态为不可用。

这是因为各个节点的槽位尚未指定。只有分配了槽位数据请求才可以根据槽位配置到达指定的数据库。

复制代码
# 配置槽位的命令语法:
cluster addslots slot [slot ...]
# 根据设计,需要给三个主节点 A、B、C 分配槽位,那么就均分全部 16383 个槽位
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7001 cluster addslots {0..5461}
OK
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7002 cluster addslots {5462..10922}
OK
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7003 cluster addslots {10923..16383}
OK
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7001 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3  # 3 个配置了哈希槽的节点为主节点
cluster_current_epoch:5
cluster_my_epoch:1
cluster_stats_messages_ping_sent:199
cluster_stats_messages_pong_sent:208
cluster_stats_messages_meet_sent:5
cluster_stats_messages_sent:412
cluster_stats_messages_ping_received:208
cluster_stats_messages_pong_received:204
cluster_stats_messages_received:412
total_cluster_links_buffer_limit_exceeded:0
[root@www ~]#

通过最后输出的第一行中的cluster_state:ok,可以看出当前集群状态为可用。

注意:如果哈希槽配置错误的话,需要将全部节点删掉,重新开启六个服务员、握手、配置哈希槽。

2.2.4 主从复制

Redis 集群中的主从复制(Master-Slave Replication)是实现高可用性和数据冗余的重要机制。通过主从复制,Redis 能够在主节点(Master)发生故障时,将其中一个从节点(Slave)提升为主节点,从而保证服务的连续性。

槽位分配完成后,当某一个节点异常后,整个 Redis 服务就会挂掉,此时就需要给节点分主从了。

复制代码
# 主从配置的语法:
redis-cli -h <ip-slave> -p <port-slave> cluster replicate <node-id-master>
# 其中的 node-id 可以通过 cluster node 查询,如下第一列:
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7001 cluster nodes
ec08659c0c30d9070ed49a76fcc7a40cfecd0558 10.10.1.1:7002@17002 master - 0 1744111736908 0 connected 5462-10922
6be04389be627b46af71dfd65cb99bf0f8b5b8d6 10.10.1.1:7003@17003 master - 0 1744111735903 2 connected 10923-16383
e8dc3ba5fab05104fe63cb2401bd1969f7617ac6 10.10.1.1:7001@17001 myself,master - 0 1744111734000 1 connected 0-5461
97c82692d437136e4f417fe117cfe611e7446a9e 10.10.1.1:9001@19001 master - 0 1744111734899 5 connected
5b063fd32127fecc84308f31489dc93823d015e2 10.10.1.1:9002@19002 master - 0 1744111736000 4 connected
7e85fb3b01f045d98dc2f5e07dcd700dc5921faf 10.10.1.1:9003@19003 master - 0 1744111736000 3 connected
# 根据设计,7001-主【9001-从】、7002-主【9002-从】、7003-主【9003-从】
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 9001 cluster replicate e8dc3ba5fab05104fe63cb2401bd1969f7617ac6
OK
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 9002 cluster replicate ec08659c0c30d9070ed49a76fcc7a40cfecd0558
OK
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 9003 cluster replicate 6be04389be627b46af71dfd65cb99bf0f8b5b8d6
OK
# 最后再查看下集群状态,三主三从
[root@www ~]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7002 cluster nodes
ec08659c0c30d9070ed49a76fcc7a40cfecd0558 10.10.1.1:7002@17002 myself,master - 0 1744112243000 0 connected 5462-10922
e8dc3ba5fab05104fe63cb2401bd1969f7617ac6 10.10.1.1:7001@17001 master - 0 1744112242968 1 connected 0-5461
7e85fb3b01f045d98dc2f5e07dcd700dc5921faf 10.10.1.1:9003@19003 slave 6be04389be627b46af71dfd65cb99bf0f8b5b8d6 0 1744112243000 2 connected
5b063fd32127fecc84308f31489dc93823d015e2 10.10.1.1:9002@19002 slave ec08659c0c30d9070ed49a76fcc7a40cfecd0558 0 1744112241000 0 connected
97c82692d437136e4f417fe117cfe611e7446a9e 10.10.1.1:9001@19001 slave e8dc3ba5fab05104fe63cb2401bd1969f7617ac6 0 1744112244977 1 connected
6be04389be627b46af71dfd65cb99bf0f8b5b8d6 10.10.1.1:7003@17003 master - 0 1744112243973 2 connected 10923-16383
[root@www ~]#

至此,测试集群就搭建完成了。

2.3 自动搭建

Redis 官方提供了关于集群的命令,使用简单、便捷。

--cluster参数提供使用,其中create命令可以用来创建集群。但是建议使用 5.0 及以上版本,因为从 5.0 版本开始,这两个命令才被集成到 redis-cli 工具。之前版本还需要安装 Ruby 语言执行环境。

在执行自动搭建命令前,也同样需要先把 6 个节点服务开起来,详见手动搭建部分。

服务开启后就可以使用自动搭建命令来一键搭建:

复制代码
/usr/local/bin/redis-cli --cluster create 10.10.1.1:7001 10.10.1.1:7002 10.10.1.1:7003 10.10.1.1:9001 10.10.1.1:9002 10.10.1.1:9003 --cluster-replicas 1

如下执行结果:(其中有一步需要输入yes 确认,建议先仔细检查生成的配置是否符合预期,特别是槽位分配和主从关系)

复制代码
# 执行命令
[root@www bin]# /usr/local/bin/redis-cli --cluster create 10.10.1.1:7001 10.10.1.1:7002 10.10.1.1:7003 10.10.1.1:9001 10.10.1.1:9002 10.10.1.1:9003 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.10.1.1:9002 to 10.10.1.1:7001
Adding replica 10.10.1.1:9003 to 10.10.1.1:7002
Adding replica 10.10.1.1:9001 to 10.10.1.1:7003
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: af1ff734b47df915722ffa9a79586743db36c2d2 10.10.1.1:7001
   slots:[0-5460] (5461 slots) master
M: 9305f12e963336ca227273e47fce3e2044a244de 10.10.1.1:7002
   slots:[5461-10922] (5462 slots) master
M: fc0a9cb203a7ad95252c3728ac8de9eb87c367d4 10.10.1.1:7003
   slots:[10923-16383] (5461 slots) master
S: b3f919bf46306463a5d81ce9d45464045eeeac41 10.10.1.1:9001
   replicates af1ff734b47df915722ffa9a79586743db36c2d2
S: e97b87fb6cc894767557fc9c439ba9ddbdf0c144 10.10.1.1:9002
   replicates 9305f12e963336ca227273e47fce3e2044a244de
S: 69e7a3f91b08671a594579ac95fc755bf394a212 10.10.1.1:9003
   replicates fc0a9cb203a7ad95252c3728ac8de9eb87c367d4
Can I set the above configuration? (type 'yes' to accept): yes  # 手动确认自动生成集群的配置信息(如节点分配、槽位分布等)
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 10.10.1.1:7001)
M: af1ff734b47df915722ffa9a79586743db36c2d2 10.10.1.1:7001
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: 9305f12e963336ca227273e47fce3e2044a244de 10.10.1.1:7002
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: e97b87fb6cc894767557fc9c439ba9ddbdf0c144 10.10.1.1:9002
   slots: (0 slots) slave
   replicates 9305f12e963336ca227273e47fce3e2044a244de
S: 69e7a3f91b08671a594579ac95fc755bf394a212 10.10.1.1:9003
   slots: (0 slots) slave
   replicates fc0a9cb203a7ad95252c3728ac8de9eb87c367d4
M: fc0a9cb203a7ad95252c3728ac8de9eb87c367d4 10.10.1.1:7003
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: b3f919bf46306463a5d81ce9d45464045eeeac41 10.10.1.1:9001
   slots: (0 slots) slave
   replicates af1ff734b47df915722ffa9a79586743db36c2d2
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
# 至此自动部署完成!
# 下边查看生成结果:
[root@www bin]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7001 cluster nodes
9305f12e963336ca227273e47fce3e2044a244de 10.10.1.1:7002@17002 master - 0 1744282476755 2 connected 5461-10922
af1ff734b47df915722ffa9a79586743db36c2d2 10.10.1.1:7001@17001 myself,master - 0 1744282473000 1 connected 0-5460
e97b87fb6cc894767557fc9c439ba9ddbdf0c144 10.10.1.1:9002@19002 slave 9305f12e963336ca227273e47fce3e2044a244de 0 1744282475750 2 connected
69e7a3f91b08671a594579ac95fc755bf394a212 10.10.1.1:9003@19003 slave fc0a9cb203a7ad95252c3728ac8de9eb87c367d4 0 1744282474000 3 connected
fc0a9cb203a7ad95252c3728ac8de9eb87c367d4 10.10.1.1:7003@17003 master - 0 1744282474000 3 connected 10923-16383
b3f919bf46306463a5d81ce9d45464045eeeac41 10.10.1.1:9001@19001 slave af1ff734b47df915722ffa9a79586743db36c2d2 0 1744282476000 1 connected
[root@www bin]# /usr/local/bin/redis-cli -h 10.10.1.1 -p 7002 cluster nodes
af1ff734b47df915722ffa9a79586743db36c2d2 10.10.1.1:7001@17001 master - 0 1744282484000 1 connected 0-5460
fc0a9cb203a7ad95252c3728ac8de9eb87c367d4 10.10.1.1:7003@17003 master - 0 1744282487101 3 connected 10923-16383
e97b87fb6cc894767557fc9c439ba9ddbdf0c144 10.10.1.1:9002@19002 slave 9305f12e963336ca227273e47fce3e2044a244de 0 1744282485093 2 connected
b3f919bf46306463a5d81ce9d45464045eeeac41 10.10.1.1:9001@19001 slave af1ff734b47df915722ffa9a79586743db36c2d2 0 1744282485000 1 connected
69e7a3f91b08671a594579ac95fc755bf394a212 10.10.1.1:9003@19003 slave fc0a9cb203a7ad95252c3728ac8de9eb87c367d4 0 1744282486097 3 connected
9305f12e963336ca227273e47fce3e2044a244de 10.10.1.1:7002@17002 myself,master - 0 1744282485000 2 connected 5461-10922
[root@www bin]# 

参考:https://www.cnblogs.com/esofar/p/10486621.html

相关推荐
呆呆小金人9 分钟前
SQL入门:正则表达式-高效文本匹配全攻略
大数据·数据库·数据仓库·sql·数据库开发·etl·etl工程师
白鲸开源1 小时前
(二)从分层架构到数据湖仓架构:数据仓库分层下的技术架构与举例
大数据·数据库·数据分析
好玩的Matlab(NCEPU)1 小时前
Redis vs RabbitMQ 对比总结
数据库·redis·rabbitmq
21号 11 小时前
16.MySQL 服务器配置与管理
服务器·数据库·mysql
我的offer在哪里1 小时前
MongoDB
数据库·mongodb
练习时长一年3 小时前
AI开发结构化输出
数据库
IvorySQL3 小时前
灾难恢复工具内核细节探究与分享
数据库·postgresql·开源
lypzcgf3 小时前
商城小程序数据库表结构文档
数据库·小程序·电商
jjw_zyfx4 小时前
Ubuntu上vue3 vite使用MBTiles搭建地图服务器
服务器·数据库·ubuntu
EndingCoder4 小时前
Node.js SQL数据库:MySQL/PostgreSQL集成
javascript·数据库·sql·mysql·postgresql·node.js