当前位置:首页 > 问答 > 正文

Windows下搞定Redis各种模式搭建,主从哨兵分片全覆盖教程

主要基于Redis官方文档、CSDN技术博客“Redis实战笔记”系列、知乎专栏“分布式缓存漫谈”以及个人实践总结。

Windows下搞定Redis各种模式搭建,主从哨兵分片全覆盖教程

想在Windows上把Redis玩明白,单机启动只是第一步,真正要用起来,尤其是想保证数据不丢、服务高可用,就得搞懂主从、哨兵和分片集群这几种模式,下面我就用大白话把这几种模式在Windows下的搭建方法讲清楚。

第一部分:准备工作——先把Redis弄到Windows上

Redis官方并不直接提供Windows版本的下载,但微软开源团队维护了一个Windows移植版,来源:微软archive项目。

  1. 去GitHub上搜索并下载最新的“MicrosoftArchive/redis” releases版本,是一个.zip压缩包。
  2. 解压到你想放的目录,D:\Redis,解压后你会看到一堆文件,redis-server.exe 就是服务端程序,redis-cli.exe 是客户端连接工具。
  3. 打开一个命令行窗口(CMD),切换到Redis目录,直接输入 redis-server.exe 回车,如果看到一个大的ASCII艺术字样的Redis logo,并且没有报错,说明单机版Redis已经成功启动了,这是所有模式的基础。

第二部分:主从复制模式——搞个数据备份

主从模式就是弄一个主库(Master)和若干个从库(Slave),主库负责写数据,从库自动从主库那里同步数据,主要用来做数据备份和读操作的负载均衡,来源:Redis官方文档Replication章节。

  1. 准备两个Redis实例:因为是在一台机器上模拟,我们需要两份Redis,直接复制整个Redis文件夹,比如一份叫 Redis-Master,另一份叫 Redis-Slave
  2. 配置主库(Master):主库的配置基本不用动,用默认的 redis.windows.conf 文件就行,确保 port 是默认的6379。
  3. 配置从库(Slave):打开 Redis-Slave 文件夹里的 redis.windows.conf 文件,找到并修改两个地方:
    • port 6380 (避免端口冲突,换个端口)
    • 找到 # replicaof <masterip> <masterport> 这一行,去掉注释 ,改成 replicaof 127.0.0.1 6379,这行命令的意思就是告诉这个实例:“你是从库,你的主库在本地(127.0.0.1)的6379端口。”
  4. 启动:先打开一个CMD,进入 Redis-Master 目录,启动主库:redis-server.exe redis.windows.conf,再打开另一个CMD,进入 Redis-Slave 目录,启动从库:redis-server.exe redis.windows.conf
  5. 验证:用客户端连接主库 redis-cli.exe -p 6379,执行 set mykey hello,然后连接从库 redis-cli.exe -p 6380,执行 get mykey,如果能读到 hello,说明主从同步成功!在从库上执行 info replication 命令可以查看复制状态。

第三部分:哨兵模式——让系统自动故障切换

主从模式有个问题,如果主库挂了,需要手动把从库升级成主库,很麻烦,哨兵(Sentinel)就是来解决这个问题的,它是个“监控员”,能自动完成故障发现和主从切换,来源:Redis官方文档Sentinel章节。

  1. 先搭建好一个主从环境:就是第二部分的内容,一个主(6379),一个从(6380)。
  2. 配置哨兵:在Redis目录下(可以放在Master或Slave目录,也可以单独放一份),找到 sentinel.conf 文件,我们需要修改关键配置:
    • port 26379 (哨兵自己服务的端口,默认26379)
    • sentinel monitor mymaster 127.0.0.1 6379 2 这行是核心,意思是:监控一个名叫 mymaster 的主库,它在127.0.0.1:6379,最后的 2 表示至少需要2个哨兵同意才认为主库真的挂了(因为我们只起一个哨兵做演示,所以这个值设为1也可以,但生产环境至少3个)。
    • sentinel down-after-milliseconds mymaster 5000 表示5秒内主库没响应,就认为它“主观下线”。
  3. 启动哨兵:打开一个新的CMD,执行 redis-server.exe sentinel.conf --sentinel,注意,必须加上 --sentinel 参数,告诉程序以哨兵模式运行。
  4. 模拟故障验证
    • 先用客户端连接哨兵 redis-cli.exe -p 26379,执行 sentinel master mymaster 查看主库信息,确认是6379。
    • 手动关闭主库(6379) 的进程。
    • 等待几秒钟后,再次在哨兵客户端执行 sentinel master mymaster,你会发现,主库的IP和端口已经变成了原来从库的(127.0.0.1:6380)!检查原来的从库(6380)的信息,它的角色(role)已经变成了 master,这就完成了自动切换。

第四部分:分片集群模式——应对海量数据

当数据量非常大,一台机器内存不够时,就需要分片集群(Cluster),它把数据分到多个主节点上存储,同时每个主节点还可以有从节点做备份,来源:Redis官方文档Cluster教程。 在Windows上搭建原生集群非常复杂,需要Ruby环境,而且微软移植版对集群的支持可能不完善,这里介绍一个更简单的模拟方法,用于学习和测试:使用多个实例,但不用它们自动发现和分配槽位,我们手动控制分片逻辑,这虽然不是真正的Cluster,但能让你理解分片的核心思想。

  1. 启动多个Redis实例:我们启动三个实例,端口分别为7001, 7002, 7003,复制三份Redis文件夹,分别修改各自的 redis.windows.conf 文件中的 port 为对应端口。
  2. 客户端实现分片:核心在于,应用程序(客户端)决定一条数据该存到哪个实例,我们用一个最简单的分片规则:对key进行CRC32哈希计算,然后对实例数量取模。分片结果 = CRC32(key) % 3
    • 结果=0,存到7001实例。
    • 结果=1,存到7002实例。
    • 结果=2,存到7003实例。
  3. 演示:在程序中,当你要存储 user:1001 这个key时,计算 CRC32("user:1001") % 3,假设结果是1,那么程序就主动连接7002端口这个实例进行存储,读取的时候,同样计算一遍,再去对应的实例读。
  4. 说明:这种方法的好处是简单直观,避免了在Windows上配置真正集群的麻烦,缺点是扩容(增加实例)非常麻烦,需要重新计算所有数据的哈希并迁移,真正的Redis Cluster引入了“哈希槽”的概念来自动管理这些。

总结一下

在Windows上,单机、主从、哨兵都可以很好地搭建和测试,能让你充分理解Redis的高可用机制,而真正的分片集群,由于环境限制,建议直接在Linux服务器上实践,或者用Docker来模拟,这个教程给了你一个在Windows环境下入门所有核心概念的实用路径,动手做一遍,印象会非常深刻。

Windows下搞定Redis各种模式搭建,主从哨兵分片全覆盖教程