Windows Redis Memurai 配置指南、用户创建、权限管理

关于 Memurai :Memurai 是 Windows 平台上的 Redis 兼容实现,提供与 Redis 相同的命令和功能。配置文件为 memurai.conf,服务名为 Memurai。可以使用 memurai-cliredis-cli 连接 Memurai。

目录


一、Memurai IP 访问限制配置

1.1 核心概念

Memurai 的 IP 访问控制通过 bindprotected-mode 配置项实现:

  • bind:指定 Memurai 监听哪个 IP 地址
  • protected-mode:保护模式,当未设置密码且只允许本地访问时启用

不限制 IP = 允许远程访问 = 配置 bind 0.0.0.0 并设置密码

1.2 允许远程访问(不限制 IP)

步骤 1:找到 Memurai 配置文件

Windows 下常见位置:

makefile 复制代码
C:\Program Files\Memurai\memurai.conf
C:\ProgramData\Memurai\memurai.conf
C:\memurai\memurai.conf

查找方法:

  • 查看 Memurai 服务配置
  • 查看安装目录
  • 使用 memurai-cli CONFIG GET dir 查看配置目录
  • 检查服务启动参数:sc qc Memurai

步骤 2:修改配置文件

打开 Memurai 配置文件(memurai.conf),找到并修改以下配置项:

conf 复制代码
# 允许所有 IP 连接(不限制 IP)
bind 0.0.0.0

# 关闭保护模式(如果设置了密码,可以关闭)
protected-mode no

# 设置密码(强烈推荐)
requirepass your_strong_password_123

步骤 3:重启 Memurai 服务

Windows 服务方式:

bash 复制代码
# 停止服务
net stop Memurai

# 启动服务
net start Memurai

或者使用服务管理器:

  • Win + R → services.msc → 找到 Memurai 服务 → 重启

步骤 4:验证配置

bash 复制代码
# 连接 Memurai(使用 memurai-cli 或 redis-cli)
memurai-cli

# 如果设置了密码,需要先认证
AUTH your_strong_password_123

# 查看 bind 配置
CONFIG GET bind

# 查看 protected-mode 配置
CONFIG GET protected-mode

预期结果:

arduino 复制代码
1) "bind"
2) "0.0.0.0"
1) "protected-mode"
2) "no"

1.3 限制 IP 访问(仅允许特定 IP)

方法一:仅允许本地访问(最安全)

conf 复制代码
# 仅允许本地连接
bind 127.0.0.1

# 启用保护模式
protected-mode yes

方法二:允许特定 IP 访问

conf 复制代码
# 允许本地和特定 IP
bind 127.0.0.1 192.168.1.100

# 启用保护模式
protected-mode yes

# 设置密码(推荐)
requirepass your_strong_password_123

方法三:允许网段访问

conf 复制代码
# 允许本地和整个网段
bind 127.0.0.1 192.168.1.0/24

# 注意:Redis 不支持 CIDR 格式,需要列出具体 IP 或使用防火墙

注意 :Redis 的 bind 不支持 CIDR 网段格式,如需限制网段,建议使用防火墙规则。

1.4 完整配置示例

示例 1:开发环境(允许远程访问)

conf 复制代码
# 网络配置
bind 0.0.0.0
port 6379
protected-mode no

# 安全配置
requirepass dev_password_123

# 其他配置
timeout 0
tcp-keepalive 300

示例 2:生产环境(限制访问)

conf 复制代码
# 网络配置
bind 127.0.0.1 192.168.1.100
port 6379
protected-mode yes

# 安全配置
requirepass Strong_Password_123!@#

# 其他配置
timeout 0
tcp-keepalive 300
maxmemory 2gb
maxmemory-policy allkeys-lru

1.5 用户访问控制(ACL 用户管理)

Memurai(兼容 Redis 6.0+)支持 ACL(Access Control List)用户管理系统,可以创建多个用户并设置不同的权限。

1.5.1 ACL 用户管理概述

ACL 系统特点:

  • 支持创建多个用户
  • 每个用户可以设置独立的密码
  • 可以为用户分配不同的命令权限
  • 可以限制用户访问的键(key)模式
  • 支持只读用户、只写用户等不同角色

ACL vs requirepass:

  • requirepass:单一密码,所有连接使用同一个密码
  • ACL:多用户系统,每个用户有独立的密码和权限

1.5.2 启用 ACL 功能

方法一:在配置文件中启用(推荐)

memurai.conf 中添加:

conf 复制代码
# 启用 ACL
aclfile "C:\Program Files\Memurai\users.acl"

# 或者直接在配置文件中定义用户
user default on nopass ~* &* +@all

方法二:使用命令行启用

bash 复制代码
memurai-server --aclfile "C:\Program Files\Memurai\users.acl"

1.5.3 创建用户

基本语法:

bash 复制代码
ACL SETUSER username [rule [rule ...]]

创建用户示例:

bash 复制代码
# 连接 Memurai
memurai-cli
# 或
redis-cli

# 如果设置了默认密码,先认证
AUTH default_password

# 创建用户并设置密码
ACL SETUSER app_user on >app_password_123 ~* &* +@all

# 创建只读用户
ACL SETUSER readonly_user on >readonly_pass_123 ~* &* +@read +@keyspace

# 创建仅允许访问特定键前缀的用户
ACL SETUSER api_user on >api_pass_123 ~api:* &* +@all -@dangerous

参数说明:

  • on:启用用户
  • off:禁用用户
  • >password:设置用户密码
  • ~pattern:允许访问的键模式(~* 表示所有键)
  • &pattern:允许访问的发布/订阅频道模式(&* 表示所有频道)
  • +@category:允许的命令类别
  • -@category:禁止的命令类别
  • +command:允许特定命令
  • -command:禁止特定命令

1.5.4 用户权限类别

常用命令类别:

类别 说明 包含的命令
@all 所有命令 所有可用命令
@read 只读命令 GET, HGET, LRANGE, SMEMBERS 等
@write 写入命令 SET, HSET, LPUSH, SADD 等
@keyspace 键空间命令 DEL, EXISTS, EXPIRE, TTL 等
@string 字符串命令 GET, SET, APPEND, INCR 等
@list 列表命令 LPUSH, RPUSH, LPOP, RPOP 等
@hash 哈希命令 HGET, HSET, HGETALL 等
@set 集合命令 SADD, SMEMBERS, SINTER 等
@sortedset 有序集合命令 ZADD, ZRANGE, ZSCORE 等
@stream 流命令 XADD, XREAD, XRANGE 等
@pubsub 发布订阅命令 PUBLISH, SUBSCRIBE, PSUBSCRIBE 等
@admin 管理命令 CONFIG, INFO, SHUTDOWN 等
@dangerous 危险命令 FLUSHALL, FLUSHDB, KEYS 等

1.5.5 用户管理完整案例

案例 1:创建管理员用户(所有权限)

bash 复制代码
# 创建管理员用户
ACL SETUSER admin on >admin_strong_password_123 ~* &* +@all

# 验证用户
ACL GETUSER admin

案例 2:创建应用用户(读写权限,禁止危险命令)

bash 复制代码
# 创建应用用户,允许所有键的读写,禁止危险命令
ACL SETUSER app_user on >app_password_123 ~* &* +@all -@dangerous -FLUSHALL -FLUSHDB -KEYS

# 验证用户
ACL GETUSER app_user

案例 3:创建只读用户

bash 复制代码
# 创建只读用户
ACL SETUSER readonly_user on >readonly_pass_123 ~* &* +@read +@keyspace

# 验证用户
ACL GETUSER readonly_user

案例 4:创建受限用户(仅访问特定键前缀)

bash 复制代码
# 创建仅能访问 api:* 键的用户
ACL SETUSER api_user on >api_pass_123 ~api:* &* +@all -@dangerous

# 验证用户
ACL GETUSER api_user

案例 5:创建缓存用户(仅字符串操作)

bash 复制代码
# 创建仅能进行字符串操作的用户
ACL SETUSER cache_user on >cache_pass_123 ~cache:* &* +@string +@keyspace

# 验证用户
ACL GETUSER cache_user

1.5.6 用户管理命令

查看所有用户:

bash 复制代码
ACL LIST

查看特定用户信息:

bash 复制代码
ACL GETUSER username

查看当前用户:

bash 复制代码
ACL WHOAMI

删除用户:

bash 复制代码
ACL DELUSER username

修改用户密码:

bash 复制代码
# 方法 1:重新设置密码
ACL SETUSER username >new_password

# 方法 2:清除密码
ACL SETUSER username nopass

启用/禁用用户:

bash 复制代码
# 启用用户
ACL SETUSER username on

# 禁用用户
ACL SETUSER username off

保存 ACL 配置到文件:

bash 复制代码
ACL SAVE

1.5.7 使用用户连接

使用特定用户连接:

bash 复制代码
# 方式 1:连接时指定用户和密码
memurai-cli --user app_user --pass app_password_123
# 或
redis-cli --user app_user --pass app_password_123

# 方式 2:连接后认证
memurai-cli
AUTH app_user app_password_123

# 方式 3:URL 格式
memurai-cli -u redis://app_user:app_password_123@host:port

验证当前用户:

bash 复制代码
ACL WHOAMI

1.5.8 在配置文件中定义用户

memurai.conf 中可以直接定义用户:

conf 复制代码
# 定义默认用户(无密码,所有权限)
user default on nopass ~* &* +@all

# 定义管理员用户
user admin on >admin_password_123 ~* &* +@all

# 定义应用用户
user app_user on >app_password_123 ~* &* +@all -@dangerous

# 定义只读用户
user readonly_user on >readonly_pass_123 ~* &* +@read +@keyspace

# 定义受限用户(仅访问特定键)
user api_user on >api_pass_123 ~api:* &* +@all -@dangerous

加载配置文件后,用户会自动创建。

1.5.9 ACL 文件管理

ACL 文件格式:

sql 复制代码
user default on nopass ~* &* +@all
user admin on >admin_password_123 ~* &* +@all
user app_user on >app_password_123 ~* &* +@all -@dangerous

在配置文件中指定 ACL 文件:

conf 复制代码
aclfile "C:\Program Files\Memurai\users.acl"

保存当前 ACL 配置到文件:

bash 复制代码
ACL SAVE

从文件加载 ACL 配置:

bash 复制代码
ACL LOAD

1.5.10 用户权限验证

测试用户权限:

bash 复制代码
# 使用只读用户连接
memurai-cli --user readonly_user --pass readonly_pass_123

# 尝试读取(应该成功)
GET mykey

# 尝试写入(应该失败)
SET mykey value
# 错误:(error) NOPERM this user has no permissions to run the 'set' command

查看用户权限详情:

bash 复制代码
ACL GETUSER readonly_user

1.5.11 与传统 requirepass 的对比

特性 requirepass ACL 用户系统
用户数量 单一密码 多个用户
权限控制 无(所有用户相同权限) 细粒度权限控制
适用场景 简单场景 生产环境、多应用
Redis 版本 所有版本 Redis 6.0+ / Memurai
配置复杂度 简单 较复杂

建议:

  • 开发/测试环境 :可以使用 requirepass(简单)
  • 生产环境:推荐使用 ACL 用户系统(更安全、更灵活)

二、配置文件位置与创建

2.1 查找 Memurai 配置文件位置

方法 1:查看 Memurai 服务配置

Windows 服务管理器:

  1. Win + R → services.msc
  2. 找到 Memurai 服务
  3. 右键 → 属性 → 查看"可执行文件的路径"

命令行方式:

bash 复制代码
sc qc Memurai

方法 2:使用 Memurai CLI 查询

bash 复制代码
memurai-cli
# 或使用 redis-cli(Memurai 兼容 Redis 命令)

# 查看配置目录
CONFIG GET dir

# 查看所有配置
CONFIG GET "*"

方法 3:查看安装目录

常见安装位置:

makefile 复制代码
C:\Program Files\Memurai\
C:\ProgramData\Memurai\
C:\memurai\

配置文件名称:

  • memurai.conf(Memurai 主配置文件)

2.2 创建或修改配置文件

步骤 1:找到配置文件

根据上述方法找到配置文件位置。

步骤 2:备份原配置文件(重要)

bash 复制代码
# 复制配置文件作为备份
copy "C:\Program Files\Memurai\memurai.conf" "C:\Program Files\Memurai\memurai.conf.bak"

步骤 3:编辑配置文件

使用文本编辑器(如 Notepad++、VS Code)打开 memurai.conf 文件。

注意:确保使用 UTF-8 编码保存。

步骤 4:重启 Memurai 服务

bash 复制代码
net stop Memurai
net start Memurai

2.3 配置文件查找顺序

Memurai 启动时按以下顺序查找配置文件:

  1. 命令行参数 --config-file 指定的文件
  2. 服务配置中指定的配置文件路径
  3. 默认配置文件(安装目录下的 memurai.conf

三、配置文件内容详解

3.1 网络相关配置

bind

作用:指定 Redis 监听哪个 IP 地址

语法:

conf 复制代码
bind ip1 ip2 ip3

常用值:

含义 说明
127.0.0.1 仅本地访问 最安全,不允许远程连接
0.0.0.0 所有 IP 允许任何 IP 连接(不限制 IP)
192.168.1.100 指定 IP 仅允许该 IP 连接
127.0.0.1 192.168.1.100 多个 IP 允许本地和指定 IP

示例:

conf 复制代码
# 允许所有 IP 连接
bind 0.0.0.0

# 仅允许本地连接
bind 127.0.0.1

# 允许本地和特定 IP
bind 127.0.0.1 192.168.1.100

port

作用:指定 Redis 监听端口

默认值6379

示例:

conf 复制代码
port 6379

protected-mode

作用:保护模式,当未设置密码且只允许本地访问时启用

值:

  • yes:启用保护模式(默认)
  • no:关闭保护模式

说明:

  • protected-mode yes 且未设置密码时,只允许本地连接
  • 当设置了密码或 bind 0.0.0.0 时,建议 protected-mode no

示例:

conf 复制代码
# 允许远程访问时
protected-mode no

# 仅本地访问时
protected-mode yes

timeout

作用:客户端空闲超时时间(秒)

默认值0(不超时)

示例:

conf 复制代码
timeout 300  # 300 秒无操作自动断开

tcp-keepalive

作用:TCP 保活时间(秒)

默认值300

示例:

conf 复制代码
tcp-keepalive 300

3.2 安全相关配置

requirepass

作用:设置 Redis 访问密码

语法:

conf 复制代码
requirepass your_password

重要提示:

  • 生产环境必须设置强密码
  • 密码不要包含特殊字符(如 #、空格),可能导致解析错误
  • 建议使用字母、数字、下划线组合

示例:

conf 复制代码
requirepass Redis_Password_123

使用密码连接:

bash 复制代码
# 方式 1:连接时指定密码
redis-cli -a your_password

# 方式 2:连接后认证
redis-cli
AUTH your_password

rename-command

作用:重命名危险命令,提高安全性

示例:

conf 复制代码
# 禁用 FLUSHALL 命令
rename-command FLUSHALL ""

# 重命名 FLUSHDB 命令
rename-command FLUSHDB "FLUSHDB_SECRET_KEY"

# 重命名 CONFIG 命令
rename-command CONFIG "CONFIG_SECRET_KEY"

3.3 完整配置模板

开发环境配置

conf 复制代码
################################## NETWORK #####################################

# 允许所有 IP 连接
bind 0.0.0.0

# 端口
port 6379

# 关闭保护模式(已设置密码)
protected-mode no

# 超时设置
timeout 0
tcp-keepalive 300

################################# SECURITY #####################################

# 设置密码
requirepass dev_password_123

################################# GENERAL #####################################

# 守护进程模式(Windows 下无效)
# daemonize yes

# 日志级别
loglevel notice

# 日志文件
logfile ""

# 数据库数量
databases 16

################################# SNAPSHOTTING ################################

# RDB 持久化配置
save 900 1
save 300 10
save 60 10000

# RDB 文件名
dbfilename dump.rdb

# 工作目录
dir ./

生产环境配置

conf 复制代码
################################## NETWORK #####################################

# 仅允许本地和特定 IP
bind 127.0.0.1 192.168.1.100

# 端口
port 6379

# 启用保护模式
protected-mode yes

# 超时设置
timeout 300
tcp-keepalive 60

################################# SECURITY #####################################

# 强密码
requirepass Strong_Password_123!@#

# 重命名危险命令
rename-command FLUSHALL ""
rename-command FLUSHDB "FLUSHDB_SECRET"
rename-command CONFIG "CONFIG_SECRET"
rename-command SHUTDOWN "SHUTDOWN_SECRET"

################################# MEMORY #####################################

# 最大内存
maxmemory 2gb

# 内存淘汰策略
maxmemory-policy allkeys-lru

################################# PERSISTENCE ################################

# AOF 持久化
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

# RDB 持久化
save 900 1
save 300 10
save 60 10000

四、验证配置是否生效

4.1 方法一:使用 Memurai CLI 查看配置(最常用)

bash 复制代码
# 连接 Memurai(可以使用 memurai-cli 或 redis-cli)
memurai-cli
# 或
redis-cli

# 如果设置了密码,先认证
AUTH your_password

# 查看 bind 配置
CONFIG GET bind

# 查看 protected-mode 配置
CONFIG GET protected-mode

# 查看 port 配置
CONFIG GET port

# 查看所有配置
CONFIG GET "*"

预期结果(允许远程访问):

arduino 复制代码
1) "bind"
2) "0.0.0.0"
1) "protected-mode"
2) "no"
1) "port"
2) "6379"

4.2 方法二:测试远程连接

在另一台机器或本机模拟远程连接:

bash 复制代码
# 方式 1:指定 IP 和密码(使用 memurai-cli 或 redis-cli)
memurai-cli -h 服务器IP -p 6379 -a your_password
# 或
redis-cli -h 服务器IP -p 6379 -a your_password

# 方式 2:分步连接
memurai-cli -h 服务器IP -p 6379
# 或
redis-cli -h 服务器IP -p 6379
AUTH your_password

成功标志:

makefile 复制代码
服务器IP:6379> PING
PONG

失败情况:

  • Connection refused:bind 配置错误或防火墙阻止
  • NOAUTH Authentication required:需要密码认证
  • (error) ERR invalid password:密码错误

4.3 方法三:查看 Memurai 日志

Windows 下查看日志:

bash 复制代码
# 查看 Memurai 服务日志
# 通常在安装目录下或 Windows 事件查看器中

# 事件查看器
eventvwr.msc
# 应用程序和服务日志 → Memurai

日志中查找:

markdown 复制代码
* Ready to accept connections
* Server initialized

4.4 方法四:使用 netstat 查看监听端口

bash 复制代码
# 查看 Memurai 端口监听情况
netstat -an | findstr 6379

预期输出(允许远程访问):

复制代码
TCP    0.0.0.0:6379           0.0.0.0:0              LISTENING

仅本地访问:

复制代码
TCP    127.0.0.1:6379         0.0.0.0:0              LISTENING

4.5 常见问题排查

问题 可能原因 解决方法
远程连接被拒绝 bind 127.0.0.1 改为 bind 0.0.0.0
需要密码认证 未设置密码或密码错误 使用 AUTH password-a password
保护模式错误 protected-mode yes 且无密码 设置密码或 protected-mode no
配置不生效 未重启服务 执行 net stop Memurainet start Memurai
防火墙阻止 Windows 防火墙未放行 添加防火墙规则

五、关键配置字段详解

5.1 bind 详解

核心概念

bind 决定 Memurai 服务监听哪个本地 IP 地址

重要区分:

  • bind:控制 Memurai 监听哪(服务层)
  • 防火墙:控制 谁能连(网络层)
  • 密码:控制 谁能用(应用层)

常见配置及含义

配置 含义 适用场景
bind 127.0.0.1 仅监听本机 最安全,单机应用
bind 0.0.0.0 监听所有 IPv4 网卡 允许远程访问(不限制 IP)
bind 192.168.1.100 仅监听指定 IP 生产环境,更安全
bind 127.0.0.1 192.168.1.100 监听多个 IP 允许本地和特定 IP

配置文件写法(最佳实践)

允许远程访问:

conf 复制代码
bind 0.0.0.0
protected-mode no
requirepass your_strong_password

仅本地访问:

conf 复制代码
bind 127.0.0.1
protected-mode yes

允许特定 IP:

conf 复制代码
bind 127.0.0.1 192.168.1.100
protected-mode yes
requirepass your_strong_password

5.2 protected-mode 详解

核心概念

protected-mode 是 Memurai(兼容 Redis 3.2+)的安全特性。

工作原理:

  • protected-mode yes 时:
    • 如果未设置密码,只允许本地连接(127.0.0.1
    • 如果设置了密码,允许远程连接
  • protected-mode no 时:
    • 允许所有连接(需要配合密码使用)

配置建议

场景 protected-mode requirepass bind
仅本地,无密码 yes 不设置 127.0.0.1
仅本地,有密码 yes 设置 127.0.0.1
远程访问,有密码 no 设置 0.0.0.0
远程访问,无密码 no 不设置 0.0.0.0 ⚠️ 不安全

重要 :生产环境必须 设置密码,即使 protected-mode no

5.3 requirepass 详解

设置密码

conf 复制代码
requirepass your_password_here

使用密码连接

方式 1:命令行参数

bash 复制代码
memurai-cli -a your_password
# 或
redis-cli -a your_password

方式 2:连接后认证

bash 复制代码
memurai-cli
# 或
redis-cli
AUTH your_password

方式 3:URL 格式

bash 复制代码
memurai-cli -u redis://:your_password@host:port
# 或
redis-cli -u redis://:your_password@host:port

修改密码

bash 复制代码
# 连接 Memurai
memurai-cli
# 或
redis-cli

# 认证
AUTH old_password

# 修改密码
CONFIG SET requirepass new_password

# 保存配置(可选)
CONFIG REWRITE

取消密码

bash 复制代码
CONFIG SET requirepass ""

注意 :取消密码后,如果 protected-mode yes,将只允许本地连接。

5.4 配置优先级

Memurai 配置的优先级(从高到低):

  1. 运行时配置CONFIG SET 命令
  2. 命令行参数memurai-server --bind 0.0.0.0
  3. 配置文件memurai.conf 中的配置
  4. 默认值:Memurai 内置默认值

查看当前生效配置:

bash 复制代码
CONFIG GET bind
CONFIG GET protected-mode

六、远程连接检查清单

6.1 检查项列表

✅ 1. bind 配置为 0.0.0.0 或包含目标 IP

bash 复制代码
redis-cli
CONFIG GET bind

预期结果:

bash 复制代码
1) "bind"
2) "0.0.0.0"  # 或包含你的 IP

✅ 2. protected-mode 配置正确

bash 复制代码
CONFIG GET protected-mode

预期结果(允许远程访问):

bash 复制代码
1) "protected-mode"
2) "no"  # 如果设置了密码

✅ 3. 已设置密码(推荐)

bash 复制代码
CONFIG GET requirepass

预期结果:

bash 复制代码
1) "requirepass"
2) "your_password"  # 或空字符串(不推荐)

✅ 4. Windows 防火墙放行 6379 端口

管理员 CMD 中执行:

bash 复制代码
netsh advfirewall firewall add rule name="Redis 6379" dir=in action=allow protocol=TCP localport=6379

验证防火墙规则:

bash 复制代码
netsh advfirewall firewall show rule name="Redis 6379"

✅ 5. Memurai 服务正在运行

bash 复制代码
# 检查服务状态
sc query Memurai

# 或查看端口监听
netstat -an | findstr 6379

6.2 测试远程连接

在另一台机器或本机模拟远程连接:

bash 复制代码
# 方式 1:指定密码(使用 memurai-cli 或 redis-cli)
memurai-cli -h 服务器IP -p 6379 -a your_password
# 或
redis-cli -h 服务器IP -p 6379 -a your_password

# 方式 2:分步连接
memurai-cli -h 服务器IP -p 6379
# 或
redis-cli -h 服务器IP -p 6379
AUTH your_password

成功标志:

makefile 复制代码
服务器IP:6379> PING
PONG
服务器IP:6379> INFO server
# Server
redis_version:7.0.0
memurai_version:...
...

6.3 开发环境 vs 生产环境

开发环境标准配置

conf 复制代码
bind 0.0.0.0
protected-mode no
requirepass dev_password
port 6379

特点:

  • ✅ 允许远程连接
  • ✅ 密码简单 OK
  • ✅ 关闭保护模式

生产环境标准配置

conf 复制代码
bind 127.0.0.1 192.168.1.100
protected-mode yes
requirepass Strong_Password_123!@#
port 6379
timeout 300
maxmemory 2gb
maxmemory-policy allkeys-lru

特点:

  • ✅ 限制访问 IP
  • ✅ 强密码
  • ✅ 启用保护模式
  • ✅ 内存限制和淘汰策略

七、安全配置建议

7.1 密码安全

强密码要求

  • 长度至少 16 位
  • 包含大小写字母、数字、特殊字符
  • 避免使用字典词汇
  • 定期更换密码

设置强密码示例

conf 复制代码
requirepass R3d!s_Str0ng_P@ssw0rd_2024

密码管理

bash 复制代码
# 查看当前密码配置(不会显示密码值)
CONFIG GET requirepass

# 修改密码
CONFIG SET requirepass new_strong_password

# 保存到配置文件
CONFIG REWRITE

7.2 网络安全

限制访问 IP

conf 复制代码
# 仅允许特定 IP
bind 127.0.0.1 192.168.1.100 192.168.1.101

使用防火墙

即使 bind 0.0.0.0,也可以通过防火墙限制访问:

bash 复制代码
# 仅允许特定 IP 访问 6379 端口
netsh advfirewall firewall add rule name="Redis 6379" dir=in action=allow protocol=TCP localport=6379 remoteip=192.168.1.100

修改默认端口

conf 复制代码
port 6380  # 改为非默认端口

7.3 命令安全

禁用危险命令

conf 复制代码
# 禁用 FLUSHALL(清空所有数据库)
rename-command FLUSHALL ""

# 禁用 FLUSHDB(清空当前数据库)
rename-command FLUSHDB ""

# 禁用 CONFIG(防止配置被修改)
rename-command CONFIG ""

# 禁用 SHUTDOWN(防止服务被关闭)
rename-command SHUTDOWN ""

重命名命令

conf 复制代码
# 重命名为复杂名称
rename-command FLUSHALL "FLUSHALL_SECRET_KEY_123"
rename-command CONFIG "CONFIG_SECRET_KEY_456"

7.4 其他安全建议

1. 启用 AOF 持久化

conf 复制代码
appendonly yes
appendfsync everysec

2. 设置内存限制

conf 复制代码
maxmemory 2gb
maxmemory-policy allkeys-lru

3. 限制客户端连接数

conf 复制代码
maxclients 1000

4. 启用 TLS/SSL(Redis 6.0+)

conf 复制代码
# 需要证书文件
port 0
tls-port 6380
tls-cert-file redis.crt
tls-key-file redis.key
tls-ca-cert-file ca.crt

5. 定期备份

bash 复制代码
# 手动备份 RDB
redis-cli --rdb /path/to/backup.rdb

# 或复制 RDB 文件
copy dump.rdb backup_20240101.rdb

7.5 用户访问控制建议

使用 ACL 用户系统(推荐)

生产环境建议:

  • ✅ 使用 ACL 替代单一 requirepass
  • ✅ 为不同应用创建独立用户
  • ✅ 遵循最小权限原则
  • ✅ 定期审查用户权限

用户角色建议:

  • 管理员用户+@all(仅用于管理)
  • 应用用户+@all -@dangerous(读写权限,禁止危险命令)
  • 只读用户+@read +@keyspace(仅查询)
  • 受限用户 :限制键访问模式(如 ~api:*

示例配置:

conf 复制代码
# 在 memurai.conf 中定义用户
user admin on >admin_strong_pass ~* &* +@all
user app_user on >app_pass ~* &* +@all -@dangerous
user readonly_user on >readonly_pass ~* &* +@read +@keyspace

7.6 安全配置检查清单

  • 已设置强密码或启用 ACL 用户系统
  • bind 配置合理(生产环境不推荐 0.0.0.0
  • protected-mode 已启用(生产环境)
  • 已创建 ACL 用户并设置最小权限(推荐)
  • 已禁用或重命名危险命令
  • 已设置内存限制
  • 已启用持久化(AOF 或 RDB)
  • 防火墙规则已配置
  • 使用非默认端口(可选)
  • 定期更新 Memurai 版本
  • 监控和日志已配置
  • 定期审查用户权限

八、扩展内容

8.1 Memurai 配置文件查找顺序

Memurai 启动时按以下顺序查找配置文件:

  1. 命令行参数memurai-server --config-file /path/to/memurai.conf
  2. 服务配置:Windows 服务中指定的配置文件路径
  3. 默认位置 :安装目录下的 memurai.conf

查看当前使用的配置文件:

bash 复制代码
# 启动 Memurai 时的日志会显示配置文件路径
# 或查看服务配置
sc qc Memurai

8.2 Windows 下 Memurai 安装方式

方式 1:Memurai 官方安装

  • 下载地址:www.memurai.com/
  • 配置文件:memurai.conf
  • 服务名:Memurai
  • 特点:Windows 原生 Redis 兼容实现,性能优化

方式 2:查看 Memurai 安装位置

bash 复制代码
# 查看服务配置
sc qc Memurai

# 查看安装目录
dir "C:\Program Files\Memurai\"

8.3 常见问题 FAQ

Q1: 为什么修改了配置文件但配置不生效?

A: 最常见原因是忘记重启 Memurai 服务。修改配置文件后必须重启服务:

bash 复制代码
net stop Memurai
net start Memurai

Q2: bind 0.0.0.0 后仍然无法远程连接?

A: 检查以下 3 项:

  1. protected-mode 是否为 no 或已设置密码
  2. Windows 防火墙是否放行 6379 端口
  3. Memurai 服务是否已重启

Q3: protected-mode 的作用是什么?

A: protected-mode 是 Memurai(兼容 Redis)的安全机制:

  • yes:未设置密码时只允许本地连接
  • no:允许远程连接(建议配合密码使用)

Q4: 如何查看 Memurai 当前配置?

A: 使用以下命令:

bash 复制代码
memurai-cli
# 或
redis-cli
CONFIG GET "*"  # 查看所有配置
CONFIG GET bind  # 查看特定配置

Q5: 如何在不重启的情况下修改配置?

A: 使用 CONFIG SET 命令:

bash 复制代码
CONFIG SET bind 0.0.0.0
CONFIG SET protected-mode no

注意 :这种方式修改的是运行时配置,重启后会恢复配置文件中的值。要永久生效,需要修改配置文件并执行 CONFIG REWRITE

Q6: Memurai 密码包含特殊字符怎么办?

A: 避免在密码中使用以下字符:

  • #(注释符号)
  • 空格
  • 引号

如果必须使用,可以在配置文件中用引号包裹:

conf 复制代码
requirepass "password with spaces"

Q7: 如何限制 Memurai 只能特定 IP 访问?

A: 有两种方法:

  1. bind 配置 (推荐):

    conf 复制代码
    bind 127.0.0.1 192.168.1.100
  2. 防火墙规则

    bash 复制代码
    netsh advfirewall firewall add rule name="Memurai" dir=in action=allow protocol=TCP localport=6379 remoteip=192.168.1.100

Q8: Memurai 默认端口可以修改吗?

A: 可以,修改配置文件 memurai.conf 中的 port 项:

conf 复制代码
port 6380

然后重启服务,连接时指定新端口:

bash 复制代码
memurai-cli -p 6380
# 或
redis-cli -p 6380

Q9: 如何创建多个用户并设置不同权限?

A: 使用 ACL 用户系统(Memurai 兼容 Redis 6.0+):

bash 复制代码
# 创建管理员用户
ACL SETUSER admin on >admin_pass ~* &* +@all

# 创建应用用户(禁止危险命令)
ACL SETUSER app_user on >app_pass ~* &* +@all -@dangerous

# 创建只读用户
ACL SETUSER readonly_user on >readonly_pass ~* &* +@read +@keyspace

# 查看所有用户
ACL LIST

# 在配置文件中定义用户
user app_user on >app_pass ~* &* +@all -@dangerous

Q10: requirepass 和 ACL 用户系统有什么区别?

A:

  • requirepass:单一密码,所有连接使用同一个密码,所有用户权限相同
  • ACL 用户系统:多用户系统,每个用户有独立的密码和权限,更灵活、更安全

建议:

  • 开发/测试环境:可以使用 requirepass(简单)
  • 生产环境:推荐使用 ACL 用户系统(更安全、更灵活)

8.4 性能优化建议

1. 内存优化

conf 复制代码
# 设置最大内存
maxmemory 2gb

# 设置淘汰策略
maxmemory-policy allkeys-lru

2. 持久化优化

conf 复制代码
# AOF 持久化
appendonly yes
appendfsync everysec  # 平衡性能和数据安全

3. 网络优化

conf 复制代码
# TCP 保活
tcp-keepalive 300

# 客户端超时
timeout 0  # 0 表示不超时

8.5 监控和日志

启用日志

conf 复制代码
# 日志级别
loglevel notice  # debug, verbose, notice, warning

# 日志文件
logfile "C:/redis/logs/redis.log"

查看 Memurai 信息

bash 复制代码
# 服务器信息
INFO server

# 内存信息
INFO memory

# 客户端信息
INFO clients

# 所有信息
INFO

总结

快速参考

允许远程访问(不限制 IP):

conf 复制代码
bind 0.0.0.0
protected-mode no
requirepass your_password
port 6379

仅本地访问:

conf 复制代码
bind 127.0.0.1
protected-mode yes
port 6379

允许特定 IP 访问:

conf 复制代码
bind 127.0.0.1 192.168.1.100
protected-mode yes
requirepass your_password
port 6379

验证配置生效:

bash 复制代码
memurai-cli
# 或
redis-cli
CONFIG GET bind  # 应显示 0.0.0.0 或配置的 IP
CONFIG GET protected-mode

用户访问控制(ACL):

bash 复制代码
# 创建用户
ACL SETUSER app_user on >app_password ~* &* +@all -@dangerous

# 查看用户
ACL GETUSER app_user

# 使用用户连接
memurai-cli --user app_user --pass app_password

# 在配置文件中定义用户
user app_user on >app_password ~* &* +@all -@dangerous

远程连接检查:

  1. bind = 0.0.0.0 或包含目标 IP ✅
  2. protected-mode = no 或已设置密码 ✅
  3. 防火墙放行 6379 ✅
  4. 密码正确或 ACL 用户已配置 ✅

用户访问检查:

  1. 已创建 ACL 用户(推荐)或已设置 requirepass ✅
  2. 用户权限符合最小权限原则 ✅
  3. 已禁用危险命令或限制用户权限 ✅

本文档基于 Windows Memurai 实际配置经验整理,Memurai 是 Redis 兼容的 Windows 原生实现。

相关推荐
BullSmall2 小时前
Redis 安全加固终极指南
redis·安全
挺6的还2 小时前
1.Redis初识
redis
挺6的还3 小时前
2.Redis背景和使用场景
redis
czlczl200209253 小时前
Spring Boot + Redis :如何设计“登出”功能
spring boot·redis·后端
算法与双吉汉堡16 小时前
【短链接项目笔记】Day2 用户注册
java·redis·笔记·后端·spring
rocksun1 天前
Tigris对象存储正式开源MCP OIDC身份提供商
redis·安全·微服务
摇滚侠1 天前
Redis 零基础到进阶,Spring Boot 整合 Redis,笔记93-99
spring boot·redis·笔记
ChristXlx1 天前
Linux安装redis(虚拟机适用)
linux·运维·redis
此生只爱蛋1 天前
【Redis】列表List类型
数据库·redis·缓存