05-redis数据库基础管理

redis数据库基础管理

1. 配置管理

1.1 创建配置文件
创建 Redis 配置文件并设置相关参数:

mkdir -p /data/6379
cat >/data/6379/redis.conf<<EOF
daemonize yes
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
EOF

配置文件详解:

cat >/data/6379/redis.conf<<EOF   
daemonize yes
-- 表示定义服务程序在后台以守护进程方式运行
port 6379
-- 表示定义服务的默认端口
logfile /data/6379/redis.log
-- 表示服务运行日志存放路径
dir /data/6379
-- 表示定义数据目录路径,用于持久化应用时存储数据
dbfilename dump.rdb
-- 表示持久化存储的数据文件名称
EOF

1.2 启动 Redis 服务
根据配置文件启动 Redis 服务:

redis-server /data/6379/redis.conf

1.3 验证服务状态
连接到 Redis 服务:

redis-cli
127.0.0.1:6379>

2. 安全管理

给redis设置密码/实现远程登录redis

2.1 默认保护模式

在没有进行安全管理设置时,会有以下数据库操作提示(远程登录时)

默认情况下,Redis 会运行在保护模式下,限制远程连接:

DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients.

2.2 解决远程连接问题
有以下几种解决方案:

系统提示:

If you want to connect from external computers to Redis you may adopt one of the following solutions: 
解决远程登录无法进行redis管理问题
1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, 
   however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 
   利用本地方式登录,执行 CONFIG SET protected-mode no 此命令,表示可以关闭redis保护模式

2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 
   停止redis服务,在配置文件中,添加 protected mode no,再次运行redis服务 等价关闭redis保护模式

3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 
   启动运行redis时,可以在启动命令后 --protected-mode no 等价关闭redis保护模式

4) Setup a bind address or an authentication password. 
   NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
   可以在配置文件中 设置bind address(绑定地址)或 设置认证密码信息,可以实现在保护模式开启状态,远程管理redis
  1. 关闭保护模式(不推荐,不安全)

    • 通过命令行:
      redis-cli CONFIG SET protected-mode no
      
    • 修改配置文件:
      echo "protected-mode no" >> /data/6379/redis.conf
      
    • 重启 Redis 服务:
      redis-cli shutdown
      redis-server /data/6379/redis.conf
      
  2. 设置绑定地址

    • 修改配置文件:
      echo "bind 10.0.0.51 127.0.0.1" >> /data/6379/redis.conf
      
  3. 设置密码认证

    • 修改配置文件:
      echo "requirepass 123456" >> /data/6379/redis.conf
      
    • 重启 Redis 服务:
      redis-cli shutdown
      redis-server /data/6379/redis.conf
      

2.3 远程连接测试
连接到 Redis 服务并验证密码认证:

redis-cli -h 10.0.0.51 -p 6379 -a 123456

2.4 本地登录密码验证

  • 方式一:本地密码认证

    redis-cli -a 123456

  • 方式二:登录redis后,在redis中进行密码认证

    127.0.0.1:6379> auth 123456

​ redis-cli -h 10.0.0.51 -p 6379

​ 10.0.0.51:6379> set xiaoC 12112

3. 功能设置

3.1 配置方式

  • 永久配置:通过修改配置文件 /data/6379/redis.conf
  • 临时配置:通过命令行动态修改:
      10.0.0.51:6379> config set requirepass 123123
      OK
      10.0.0.51:6379> config get requirepass
      1) "requirepass"
      2) "123123
     
    config get *  -- 查看所有redis配置项
    

4. 持久化存储

4.1 RDB 持久化
Redis 的 RDB 持久化会在指定时间间隔内生成数据快照,类似于虚拟化的快照功能。

  • 优点
    • 存储速度快,适合于用作备份,缓存主从复制也是基于RDB持久化功能实现的;
  • 缺点
    • 由于全部缓存都做持久化,可能出现持久化不及时情况,并且持久化快照会覆盖上一次的,会存在数据丢失情况;

4.1.1 手工保存 RDB 文件

  • SAVE:阻塞 Redis 服务器进程,直到快照保存完成。
  • BGSAVE:在后台进程保存快照,不会阻塞主进程。

4.1.2 自动保存 RDB 文件
在配置文件中设置自动保存规则:

save 900 1       # 900秒内至少有1个更改
save 300 10      # 300秒内至少有10个更改
save 60 10000    # 60秒内至少有10000个更改

4.2 AOF 持久化
Redis 的 AOF 持久化会记录所有写操作命令,并在启动时重新执行这些命令以恢复数据。

  • 优点
    • 可以最大程度保证数据不丢;
  • 缺点
    • 日志记录量级比较大,恢复加载数据慢;

4.2.1 配置 AOF 持久化
在配置文件中启用 AOF:

vim /data/6379/redis.conf
dir /data/6379 #表示定义数据目录路径,用于持久化应用时存储数据
appendonly yes #是否打开aof日志功能
appendfsync always #表示每1个命令,都立即同步到AOF
appendfsync everysec #表示每秒写1次
appendfsync no #写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到AOF

企业面试题目:

Redis持久化方式有哪些?有什么区别?**
RDB:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于RDB持久化功能;
AOF:以追加的方式记录redis操作日志的文件,可以最大程度的保证redis数据安全,类似于mysql的binlog;

2.redis日常语句管理:

创建数据 修改数据 删除数据 查看数据 (key-values)

创建数据: key名称=values值
set key values 
修改数据:
set key values(修改内容)
查看数据:
get key名称 
127.0.0.1:6379> keys xia*   -- 业务层面进行缓存数据扫描    登录操作-验证  name=dezyan  pass=xxx

1) "xiaoA"
2) "xiaoB"
127.0.0.1:6379> keys *  
1) "xiaoA"
2) "xiaoB"
删除数据: 
del key名称  
expire a 60  -- 设置倒计时 删除缓存记录
persist a    -- 取消缓存倒计时删除设置

方式一:字符类型结构

session(会话共享),常规计数(微博数、粉丝数、订阅数、礼物数)

创建:
set xiaoA 1234567
127.0.0.1:6379> type xiaoA
string

mset id 101 name xiaoQ age 20 gender m

修改:
set xiaoA 1234567
127.0.0.1:6379> type xiaoA
string

mset id 101 name xiaoQ age 20 gender m

查看: 
get key名称 
127.0.0.1:6379> mget id name age gender
1) "101"
2) "xiaoQ"
3) "20"
4) "m"

删除数据: 
del key名称  
expire a 60  -- 设置倒计时 删除缓存记录
persist a    -- 取消缓存倒计时删除设置

方式二:hash类型存储结构

可以用于将MySQL表的数据行信息进行转存到redis

存储数据
hmset stu01 id 101 name xiaoQ age 20 gender m
       key        value(key value)
读取数据
hmget city_1 id

1) "1"
127.0.0.1:6379> hmget city_1 name
1) "Kabul"

方式三:List数据类型(列表类型)

可以使用redis作为消息队列服务

存储数据 
LPUSH userinfo "xiaoA"
LPUSH userinfo "xiaoB"
LPUSH userinfo "xiaoC"
读取数据 
127.0.0.1:6379> lrange userinfo  0 -1
1) "xiaoC"
2) "xiaoB"
3) "xiaoA"
127.0.0.1:6379> lrange userinfo  0 0
1) "xiaoC"
127.0.0.1:6379> lrange userinfo  2 2
1) "xiaoA"

方式四:set数据类型(集合类型)

应用共同关注 共同喜好 以及二度交友功能
可以实现多key值之间进行交集 并集 差集处理

存储数据 
sadd xiaoQ xiaoA xiaoB dezyan1 dezyan2 tom
      key            values 
sadd dezyan dezyan1 dezyan2 oldli Lucy tom
      key            values 
	  
并集处理
127.0.0.1:6379> SUNION xiaoQ dezyan
1) "xiaoA"
2) "oldli"
3) "dezyan2"
4) "xiaoB"
5) "tom"
6) "dezyan1"
7) "Lucy"
交集处理
127.0.0.1:6379> SINTER xiaoQ dezyan
1) "dezyan2"
2) "dezyan1"
3) "tom"
差集处理: 
127.0.0.1:6379> SDIFF xiaoQ dezyan
1) "xiaoA"
2) "xiaoB"
127.0.0.1:6379> SDIFF dezyan xiaoQ
1) "oldli"
2) "Lucy"

方式五:SortedSet数据类型(有序集合类型)

主要可以对相同类型的某些数据信息做排序  order by 成绩
存储数据
zadd U盘 0 jinshidun 0 shandi 0 aiguozhe 0 lianxiang 0 sanxing 0 xiaomi
     key    values  
修改数据 
ZINCRBY U盘 1000 jinshidun	
ZINCRBY U盘  100 shandi
ZINCRBY U盘  200 aiguozhe
ZINCRBY U盘  300 lianxiang
ZINCRBY U盘  200 sanxing
ZINCRBY U盘  500 xiaomi
查看数据
ZREVRANGE U盘 0 2

3.redis服务架构搭建

1)架构应用-实现主从同步

  • 实现数据备份保存
  • 可以实现搭建高可用和负载均衡架构(读负载)

搭建主从同步
6380 实例 主节点
6381 实例 从节点
6382 实例 从节点

步骤一:创建主从实例

mkdir -p /data/{6380..6382}
cat >/data/6380/redis.conf<<EOF
daemonize yes
port 6380
logfile /data/6380/redis.log
dir /data/6380
dbfilename dump.rdb
bind 10.0.0.51 127.0.0.1
requirepass 123456
EOF 

cat >/data/6381/redis.conf<<EOF
daemonize yes
port 6381
logfile /data/6381/redis.log
dir /data/6381
dbfilename dump.rdb
bind 10.0.0.51 127.0.0.1
requirepass 123456
EOF

cat >/data/6382/redis.conf<<EOF
daemonize yes
port 6382
logfile /data/6382/redis.log
dir /data/6382
dbfilename dump.rdb
bind 10.0.0.51 127.0.0.1
requirepass 123456
EOF 

redis-server /data/6380/redis.conf
redis-server /data/6381/redis.conf
redis-server /data/6382/redis.conf

步骤二:启用主从同步功能

在从库进行主库验证配置
/data/6381/redis.conf
masterauth 123456     -- 和主库密码对应,实现连接主库密码验证
/data/6382/redis.conf
masterauth 123456

redis-cli -p 6381 -a 123456 shutdown
redis-cli -p 6382 -a 123456 shutdown
redis-server /data/6381/redis.conf
redis-server /data/6382/redis.conf
-- 以上配置修改后,重启redis从节点实例

激活主从同步功能
redis-cli -p 6381 -a 123456  slaveof 127.0.0.1 6380
redis-cli -p 6382 -a 123456  slaveof 127.0.0.1 6380

步骤三:验证主从同步功能

主库创建数据
redis-cli -a 123456 -p 6380
127.0.0.1:6380> keys xiaoAA
(empty array)
127.0.0.1:6380> set xiaoAA dezyan
OK
127.0.0.1:6380> get xiaoAA
"dezyan"
从库检查数据
redis-cli -p 6381 -a 123456 
127.0.0.1:6381> keys xiaoAA
(empty array)
127.0.0.1:6381> keys xiaoAA
1) "xiaoAA"
127.0.0.1:6381> get xiaoAA
"dezyan"

主库检查主从状态
>  info replication
\# Replication

role:master
connected_slaves:2
slave0:ip=10.0.0.51,port=6381,state=online,offset=480,lag=1
slave1:ip=10.0.0.51,port=6382,state=online,offset=480,lag=1

>slaveof no one
>-- 取消主从同步功能

从库检查主从状态
info replication

\# Replication

role:slave
master_host:127.0.0.1
master_port:6380
master_link_status:up

127.0.0.1:6381> info replication    -- 主从同步异常(从节点没有开启同步功能)

\# Replication

role:master
connected_slaves:0
master_failover_state:no-failover

2)架构应用-高可用架构

步骤一:创建主从节点实例

....

步骤二:创建高可用监控节点(哨兵节点)

mkdir /data/26380
cd /data/26380/
vim sentinel.conf
port 26380
dir "/data/26380"
daemonize yes
-- 实现哨兵服务可以守护进程方式运行
sentinel monitor mymaster 127.0.0.1 6380 1
-- 监控集群架构中主库服务状态(数值1表示发现主库异常的票数,当发现有1票提出主库宕机,就立刻切换)
sentinel down-after-milliseconds mymaster 5000
-- 当主库进行监控心跳检测时,如果5s内没有反馈,就认为主库服务已经宕机
sentinel auth-pass mymaster 123456
-- 设置连接主库服务的认证密码信息

cat >sentinel.conf<<EOF
port 26380
dir "/data/26380"
daemonize yes
sentinel monitor mymaster 127.0.0.1 6380 1
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster 123456
EOF

redis-sentinel /data/26380/sentinel.conf &>/tmp/sentinel.log &

步骤三:模拟主节点故障

127.0.0.1:6380> shutdown   -- 关闭redis主节点服务

[root@db-01 6379 11:36]# redis-cli -p 6381 -a 123456    -- 新的主节点被选举出来
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6381> info replication

\# Replication

role:master
connected_slaves:1
slave0:ip=10.0.0.51,port=6382,state=online,offset=9738,lag=1
master_failover_state:no-failover

3)架构应用-集群架构=分布式存储(负载均衡)

mkdir -p /data/{7000..7005}/

步骤一:创建集群节点实例

cat >/data/7000/redis.conf <<EOF
port 7000
daemonize yes
pidfile /data/7000/redis.pid
loglevel notice
logfile "/data/7000/redis.log"
dbfilename dump.rdb
dir /data/7000
protected-mode no   
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
-- 实例01节点配置信息(主库)

cat >/data/7001/redis.conf <<EOF
port 7001
daemonize yes
pidfile /data/7001/redis.pid
loglevel notice
logfile "/data/7001/redis.log"
dbfilename dump.rdb
dir /data/7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
-- 实例02节点配置信息(主库)

cat >/data/7002/redis.conf <<EOF
port 7002
daemonize yes
pidfile /data/7002/redis.pid
loglevel notice
logfile "/data/7002/redis.log"
dbfilename dump.rdb
dir /data/7002
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
-- 实例03节点配置信息(主库)

cat >/data/7003/redis.conf <<EOF
port 7003
daemonize yes
pidfile /data/7003/redis.pid
loglevel notice
logfile "/data/7003/redis.log"
dbfilename dump.rdb
dir /data/7003
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
-- 实例04节点配置信息(从库)

cat >/data/7004/redis.conf <<EOF
port 7004
daemonize yes
pidfile /data/7004/redis.pid
loglevel notice
logfile "/data/7004/redis.log"
dbfilename dump.rdb
dir /data/7004
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
-- 实例05节点配置信息(从库)

cat >/data/7005/redis.conf <<EOF
port 7005
daemonize yes
pidfile /data/7005/redis.pid
loglevel notice
logfile "/data/7005/redis.log"
dbfilename dump.rdb
dir /data/7005
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
-- 实例06节点配置信息(从库)

redis-server /data/7000/redis.conf
redis-server /data/7001/redis.conf
redis-server /data/7002/redis.conf
redis-server /data/7003/redis.conf
redis-server /data/7004/redis.conf
redis-server /data/7005/redis.conf

步骤二:构建集群环境

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 --cluster-replicas 1

步骤三:检查集群环境

检查主节点信息:
redis-cli -p 7000 cluster nodes|grep master
bb4de65f47ac0bafb30b4bff472495b8b3e68d5c 127.0.0.1:7000@17000 myself,master - 0 1741580436000 1 connected 0-5460
4cab676026914f003940979e44e0d5dc5d76d242 127.0.0.1:7001@17001 master - 0 1741580436000 2 connected 5461-10922
b7444c20600ef7a3dbe0fdb1aa4d2f76d1ffb316 127.0.0.1:7002@17002 master - 0 1741580436186 3 connected 10923-16383

redis-cli -p 7000 cluster nodes|grep slave
8eda635f9ff2591ffda1781b04129621832974d3 127.0.0.1:7004@17004 slave b7444c20600ef7a3dbe0fdb1aa4d2f76d1ffb316 0 1741580495000 3 connected
b158a104b255ac4170dbf450d31add661b1b84a6 127.0.0.1:7003@17003 slave 4cab676026914f003940979e44e0d5dc5d76d242 0 1741580496050 2 connected
fc91771fab4be1fc7915412fe2d3a9600297018f 127.0.0.1:7005@17005 slave bb4de65f47ac0bafb30b4bff472495b8b3e68d5c 0 1741580495045 1 connected

4)如何管理集群环境:

添加新的集群节点:

步骤一:创建新的节点实例

mkdir -p /data/{7006,7007}

cat >/data/7006/redis.conf <<EOF
port 7006
daemonize yes
pidfile /data/7006/redis.pid
loglevel notice
logfile "/data/7006/redis.log"
dbfilename dump.rdb
dir /data/7006
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

cat >/data/7007/redis.conf <<EOF
port 7007
daemonize yes
pidfile /data/7007/redis.pid
loglevel notice
logfile "/data/7007/redis.log"
dbfilename dump.rdb
dir /data/7007
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF

redis-server /data/7006/redis.conf
redis-server /data/7007/redis.conf

步骤二:添加新的主节点

redis-cli --cluster add-node 127.0.0.1:7006 127.0.0.1:7000

redis-cli -p 7000 cluster nodes|grep master
7083bf0d6ba9b095c1a19c15ed2d61b3a0ef3230 127.0.0.1:7006@17006 master - 0 1741590606328 0 connected 
bb4de65f47ac0bafb30b4bff472495b8b3e68d5c 127.0.0.1:7000@17000 myself,master - 0 1741590606000 1 connected 0-5460
4cab676026914f003940979e44e0d5dc5d76d242 127.0.0.1:7001@17001 master - 0 1741590605000 2 connected 5461-10922
b7444c20600ef7a3dbe0fdb1aa4d2f76d1ffb316 127.0.0.1:7002@17002 master - 0 1741590605000 3 connected 10923-16383

调整存储槽位信息
redis-cli --cluster reshard 127.0.0.1:7000   -- 对现有集群节点存储数据,进行重新分片(重新划分每个节点存储情况)
How many slots do you want to move (from 1 to 16384)? 200
-- 从已有节点中转移多少个槽位给新的集群节点
What is the receiving node ID?   7083bf0d6ba9b095c1a19c15ed2d61b3a0ef3230
-- 转移走的槽位信息,给哪个节点接收
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: 
-- 从哪个原有节点,把200个槽位移到新的集群节点
all          -- 将所有节点中 200槽位, 都转移到新节点
指定源节点ID -- 将之地昂节点中 200槽位,转移到新节点

config set maxmemory 102400000  -- 设置redis实例最大使用内存容量

[root@db-01 ~ 15:31]# redis-cli -p 7000 cluster nodes|grep master
7083bf0d6ba9b095c1a19c15ed2d61b3a0ef3230 127.0.0.1:7006@17006 master - 0 1741591895000 7 connected 0-199 5461-5760
bb4de65f47ac0bafb30b4bff472495b8b3e68d5c 127.0.0.1:7000@17000 myself,master - 0 1741591895000 1 connected 200-5460
4cab676026914f003940979e44e0d5dc5d76d242 127.0.0.1:7001@17001 master - 0 1741591895086 2 connected 5761-10922
b7444c20600ef7a3dbe0fdb1aa4d2f76d1ffb316 127.0.0.1:7002@17002 master - 0 1741591896091 3 connected 10923-16383

步骤三:添加新的从节点

redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7000 --cluster-slave --cluster-master-id 7083bf0d6ba9b095c1a19c15ed2d61b3a0ef3230

redis-cli -p 7000 cluster nodes|grep slave
ec6067e4c3e37f494384f1a85dff923225a1e18a 127.0.0.1:7007@17007 slave 7083bf0d6ba9b095c1a19c15ed2d61b3a0ef3230 0 1741592124000 7 connected   ****
8eda635f9ff2591ffda1781b04129621832974d3 127.0.0.1:7004@17004 slave b7444c20600ef7a3dbe0fdb1aa4d2f76d1ffb316 0 1741592123537 3 connected
b158a104b255ac4170dbf450d31add661b1b84a6 127.0.0.1:7003@17003 slave 4cab676026914f003940979e44e0d5dc5d76d242 0 1741592125248 2 connected
fc91771fab4be1fc7915412fe2d3a9600297018f 127.0.0.1:7005@17005 slave bb4de65f47ac0bafb30b4bff472495b8b3e68d5c 0 1741592124745 1 connected


- 删除已有集群节点:(做节点下线维护操作)
删除主节点信息
redis-cli --cluster reshard 127.0.0.1:7000
-- 交互过程省略,将下线维护节点数据迁移给其他集群主节点

redis-cli --cluster del-node 127.0.0.1:7006 7083bf0d6ba9b095c1a19c15ed2d61b3a0ef3230
-- 删除指定主节点
[root@db-01 ~ 15:46]# redis-cli -p 7000 cluster nodes|grep master
bb4de65f47ac0bafb30b4bff472495b8b3e68d5c 127.0.0.1:7000@17000 myself,master - 0 1741592786000 9 connected 200-5460 5561-5760
4cab676026914f003940979e44e0d5dc5d76d242 127.0.0.1:7001@17001 master - 0 1741592787222 8 connected 0-199 5461-5560 5761-10922
b7444c20600ef7a3dbe0fdb1aa4d2f76d1ffb316 127.0.0.1:7002@17002 master - 0 1741592786213 3 connected 10923-16383

删除从节点信息
redis-cli --cluster del-node 127.0.0.1:7007 ec6067e4c3e37f494384f1a85dff923225a1e18a

redis-cli -p 7000 cluster nodes|grep slave
8eda635f9ff2591ffda1781b04129621832974d3 127.0.0.1:7004@17004 slave b7444c20600ef7a3dbe0fdb1aa4d2f76d1ffb316 0 1741592915783 3 connected
b158a104b255ac4170dbf450d31add661b1b84a6 127.0.0.1:7003@17003 slave 4cab676026914f003940979e44e0d5dc5d76d242 0 1741592916588 8 connected
fc91771fab4be1fc7915412fe2d3a9600297018f 127.0.0.1:7005@17005 slave bb4de65f47ac0bafb30b4bff472495b8b3e68d5c 0 1741592916286 9 connected
posted @ 2025-05-20 19:32  丁志岩  阅读(15)  评论(0)    收藏  举报