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

相关推荐
麻花201320 分钟前
sql server分析表大小
数据库
纪元A梦1 小时前
Redis最佳实践——秒杀系统设计详解
数据库·redis·缓存
老马啸西风2 小时前
Neo4j GDS-09-neo4j GDS 库中路径搜索算法实现
网络·数据库·算法·云原生·中间件·neo4j·图数据库
XY.散人2 小时前
初识Redis · list和hash类型
数据库·redis·哈希算法
Arbori_262152 小时前
Oracle WITH 子句(也称为 公共表表达式,Common Table Expression,CTE)
数据库·oracle
Tapdata3 小时前
拒绝停服, 随时回退:Sybase 到 Postgresql 的无缝数据库双向迁移方案
数据库
moxiaoran57533 小时前
mysql自动赋值
数据库·mysql
结衣结衣.3 小时前
【MySQL】数据库基础
数据库·mysql
博界IT精灵3 小时前
SQL语言
数据库·sql
小样vvv3 小时前
【微服务管理】注册中心:分布式系统的基石
java·数据库·微服务