准备3台新虚拟机,具体配置如表-1所示。
实现此案例需要按照如下步骤进行。
步骤一:配置一主一从结构
1)配置host61为主服务器
[root@host61 ~]# yum -y install redis
[root@host61 ~]# vim /etc/redis.conf
69 bind 192.168.88.61 设置服务使用的Ip地址
92 port 6379 设置服务使用的端口号 使用默认端口即可
:wq
[root@host61 ~]# systemctl start redis
[root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
192.168.88.61:6379> info replication 查看复制信息
# Replication
role:master 默认就是主服务器
connected_slaves:0 没有从服务器
master_replid:0aebff37df915061ddf157cc33d8742f14e8773f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.88.61:6379>
2)配置host62为host61的从服务器
[root@host62 ~]# yum -y install redis 安装软件
[root@host62 ~]# vim /etc/redis.conf 修改配置文件
69 bind 192.162.88.62 设置服务的ip地址
92 port 6379 设置服务的端口号 默认即可
:wq
[root@host62 ~]# systemctl start redis 启动服务
[root@host62 ~]# redis-cli -h 192.162.88.62 -p 6379 连接服务
192.162.88.62.:6379> replicaof 192.162.88.61 6379 指定主服务器ip和端口
OK
192.162.88.62.:6379> config rewrite 永久保存配置
OK
192.162.88.62.:6379> exit 退出服务
[root@host62 ~]# tail -1 /etc/redis.conf 查看文件末尾
replicaof 192.162.88.61 6379
[root@host62 ~]# redis-cli -h 192.162.88.62 -p 6379 连接服务
192.162.88.62.:6379> info replication 查看复制信息
# Replication
role:slave 角色
master_host:192.162.88.61 主服务器ip地址
master_port:6379 主服务器端口号
master_link_status:up 与主服务器连接状态 (up 正常 down 连接失败)
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
192.162.88.62.:6379>
3)在主服务器host61查看复制信息
[root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
192.168.88.61:6379> info replication
# Replication
role:master 角色
connected_slaves:1 一个从
slave0:ip=192.168.88.62,port=6379,state=online,offset=322,lag=0 从服务器信息
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:322
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:322
192.168.88.61:6379> mset x 1 y 2 z 3 存储数据
OK
192.168.88.61:6379> keys * 查看变量
1) "z"
2) "y"
3) "x"
4)在从服务器查看是否同步数据
[root@host62 ~]# redis-cli -h 192.168.88.62 -p 6379
192.168.88.62.:6379> keys *
1) "y"
2) "x"
3) "z"
192.168.88.62.:6379>
步骤二:配置一主多从结构
要求:把host63也配置为host61的从服务器
1)配置host63为host61的从服务器
[root@host63 ~]# yum -y install redis 安装软件
[root@host63 ~]# vim /etc/redis.conf 修改配置文件
69 bind 192.168.88.63
92 port 6379
:wq
[root@host63 ~]# systemctl start redis 启动服务
[root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379 连接服务
192.168.88.63:6379> replicaof 192.168.88.61 6379 指定主服务器ip和端口
OK
192.168.88.63:6379> config rewrite 永久保存配置
OK
192.168.88.63:6379> exit
[root@host63 ~]# tail -1 /etc/redis.conf 保存到文件末尾
replicaof 192.168.88.61 6379
[root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379 连接服务
192.168.88.63:6379> info replication 查看复制信息
# Replication
role:slave 角色
master_host:192.168.88.61 主服务器IP
master_port:6379 主服务器端口
master_link_status:up 与主服务器连接状态 up 正常连接状态
master_last_io_seconds_ago:9
master_sync_in_progress:0
slave_repl_offset:1171
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:1171
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1158
repl_backlog_histlen:14
192.168.88.63:6379> keys * 查看是否同步数据
1) "x"
2) "z"
3) "y"
192.168.88.63:6379>
在host61 查看到有2台从服务器
[root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
192.168.88.61:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.88.62,port=6379,state=online,offset=3027,lag=0
slave1:ip=192.168.88.63,port=6379,state=online,offset=3013,lag=1
master_replid:209b3b7ce20c708ab1b6b95a5d1becb2454b0941
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:3027
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:3027
192.168.88.61:6379>
步骤三:配置主从从结构
要求: 把host63恢复为独立的redis服务器,然后配置为host62的从服务器
1)配置host63
[root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379
192.168.88.63:6379> replicaof no one 恢复为独立的数据库服务器
OK
192.168.88.63:6379> replicaof 192.168.88.62 6379 指定主服务器为62
OK
192.168.88.63:6379> config rewrite 保存配置
OK
192.168.88.63:6379> exit 断开连接
[root@host63 ~]# tail -1 /etc/redis.conf 查看是否保存
replicaof 192.168.88.62 6379
[root@host63 ~]# redis-cli -h 192.168.88.63 -p 6379 连接服务
192.168.88.63:6379> info replication 查看复制信息
# Replication
role:slave 角色
master_host:192.168.88.62 主服务器IP
master_port:6379 主服务端口
master_link_status:up 与主服务器连接状态
master_last_io_seconds_ago:0
master_sync_in_progress:0
slave_repl_offset:4545
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4545
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:4420
repl_backlog_histlen:126
192.168.88.63:6379>
2)在host62查看复制信息
[root@host62 ~]# redis-cli -h 192.168.88.62 -p 6379
192.168.88.62.:6379> info replication 查看复制信息
# Replication
role:slave 本身是从服务器
master_host:192.168.88.61 主服务器ip
master_port:6379 主服务器redis服务端口
master_link_status:up 与主服务器连接状态
master_last_io_seconds_ago:4
master_sync_in_progress:0
slave_repl_offset:4769
slave_priority:100
slave_read_only:1
connected_slaves:1 本身有一个从服务器
slave0:ip=192.168.88.63,port=6379,state=online,offset=4769,lag=0 从服务器信息
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:4769
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:4769
192.168.88.68.:6379>
1)基于案例1做如下配置:
给host61主机的Redis服务设置连接密码,如果从服务器不指定连接密码无法同步数据。
实现此案例需要按照如下步骤进行。
步骤一:配置主机host61,redis服务连接密码为123456
命令操作如下所示:
[root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379
192.168.88.61:6379> config get requirepass 查看密码,默认服务没有密码
1) "requirepass"
2) ""
192.168.88.61:6379> config set requirepass 123456 设置密码
OK
192.168.88.61:6379> auth 123456 输入密码
OK
192.168.88.61:6379> config rewrite 保存配置
OK
192.168.88.61:6379> exit 退出
[root@host61 ~]# tail -1 /etc/redis.conf 保存到文件的末尾
requirepass "123456"
[root@host61 ~]# redis-cli -h 192.168.88.61 -p 6379 连接服务
192.168.88.61:6379> auth 123456 输入密码
OK
192.168.88.61:6379> info replication 查看复制信息
# Replication
role:master
connected_slaves:0 没有从服务器了 因为从没有输入连接密码连接不上主服务器
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:5763
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:5763
192.168.88.61:6379>
步骤二:主机host62设置连接host61的redis服务密码
命令操作如下所示:
[root@host62 ~]# redis-cli -h 192.168.88.62 -p 6379 连接服务
192.168.88.62.:6379> info replication 查看复制信息
# Replication
role:slave
master_host:192.168.88.61
master_port:6379
master_link_status:down 没设置密码 与master主机是断开状态
master_last_io_seconds_ago:-1
master_sync_in_progress:0
slave_repl_offset:1
master_link_down_since_seconds:274
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:7803
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:7803
192.168.88.62:6379> config set masterauth 123456 指定主服务器密码
OK
192.168.88.62:6379> config rewrite 保存配置
OK
192.168.88.62:6379> info replication 查看复制信息
# Replication
role:slave
master_host:192.168.88.61
master_port:6379
master_link_status:up 设置连接密码后 状态为up
master_last_io_seconds_ago:10
master_sync_in_progress:0
slave_repl_offset:5847
slave_priority:100
slave_read_only:1
connected_slaves:1
slave0:ip=192.168.88.63,port=6379,state=online,offset=5847,lag=1
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:5847
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:5764
repl_backlog_histlen:84
192.168.88.62.:6379>
准备3台新的虚拟机,具体配置如表-2所示。
说明:
1)可以使用一主一从或 一主多从 或 主从从 + 哨兵服务 做服务的高可用 和 数据自动备份
2)如果主从结构中的redis服务设置连接密码的话必须全每台数据库都要设置密码且密码要一样,要么全都不设置密码。
3)如果Redis服务有密码宕机的服务器启动服务后,要人为指定主服务器的连接密码。
实现此案例需要按照如下步骤进行。
步骤一:配置主机Host67为master服务器
命令操作如下所示:
1)配置host67为主服务器
[root@host67 ~]# yum -y install redis 安装redis服务软件
[root@host67 ~]# vim /etc/redis.conf 修改配置文件
69 bind 192.168.88.67 设置redis服务使用IP地址
92 port 6379 设置redis服务使用端口
:wq
[root@host67 ~]# systemctl start redis 启动服务
[root@host67 ~]# redis-cli -h 192.168.88.67 -p 6379 连接服务
192.168.88.67:6379> info replication 查看角色
# Replication
role:master 默认是master角色
connected_slaves:0 没有从服务器
master_replid:0aebff37df915061ddf157cc33d8742f14e8773f
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
192.168.88.67:6379>
步骤二:配置主机host68为Host67的slave服务器
命令操作如下所示:
2)配置host68为host67的从服务器
[root@host68 ~]# yum -y install redis 安装软件
[root@host68 ~]# vim /etc/redis.conf 修改配置文件
69 bind 192.168.88.68 设置服务使用Ip地址
92 port 6379 设置服务监听端口 默认即可
:wq
[root@host68 ~]# systemctl start redis 启动服务
[root@host68 ~]# redis-cli -h 192.168.88.68 -p 6379 连接服务
192.168.88.68:6379> replicaof 192.168.88.67 6379 指定主服务器ip和端口
OK
192.168.88.68:6379> config rewrite 永久保存配置
OK
192.168.88.68:6379> exit 断开
[root@host68 ~]# tail -1 /etc/redis.conf 保存到文件末尾
replicaof 192.168.88.67 6379
[root@host68 ~]# redis-cli -h 192.168.88.68 -p 6379 连接服务
192.168.88.68:6379> info replication 查看复制信息
# Replication
role:slave 角色 从服务器
master_host:192.168.88.67 主服务器Ip
master_port:6379 主服务端口
master_link_status:up 与主连接状态
master_last_io_seconds_ago:8
master_sync_in_progress:0
slave_repl_offset:14
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:476ae25abdb72c60a4ada0dcc73910a7455ecac1
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:14
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:14
192.168.88.68:6379>
步骤三:配置主机host69运行哨兵服务
命令操作如下所示:
]# yum -y install redis 安装软件
]# vim /etc/redis-sentinel.conf 创建并编辑主配置文件
15 bind 192.168.88.69 指定哨兵服务使用ip地址
21 port 26379 指定哨兵服务监听端口
26 daemonize yes 以守护进程方式运行服务
84 sentinel monitor mymaster 192.168.88.67 6379 1 监视master服务器Host67
:wq
[root@host69 ~]# systemctl start redis-sentinel 启动哨兵服务
[root@host69 ~]# netstat -utnlp | grep 26379 查看端口号
tcp 0 0 192.168.88.69:26379 0.0.0.0:* LISTEN 1651/redis-sentinel
[root@host69 ~]#
?查看日志获取监视信息
[root@host69 ~]# tail -f /var/log/redis/sentinel.log
1651:X 03 Jun 2023 21:42:49.523 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1651:X 03 Jun 2023 21:42:49.523 # Redis version=5.0.3, bits=64, commit=00000000, modified=0, pid=1651, just started
1651:X 03 Jun 2023 21:42:49.523 # Configuration loaded
1651:X 03 Jun 2023 21:42:49.523 * supervised by systemd, will signal readiness
1651:X 03 Jun 2023 21:42:49.525 * Running mode=sentinel, port=26379.
1651:X 03 Jun 2023 21:42:49.525 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1651:X 03 Jun 2023 21:42:49.530 # Sentinel ID is f9475074a53444ee81765646c105e04e73ac9ec8
1651:X 03 Jun 2023 21:42:49.530 # +monitor master mymaster 192.168.88.67 6379 quorum 1
1651:X 03 Jun 2023 21:42:49.533 * +slave slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
步骤四:测试配置
思路:停止master主机的redis 服务,原slave角色会升级为主,哨兵服务会自动监视新的master服务,宕机的master 主机恢复后自动配置为当前主的从服务器。
停止master主机的redis 服务
[root@host67 ~]# systemctl stop redis
原slave角色会升级为主
[root@host68 ~]# redis-cli -h 192.168.88.68 -p 6379
192.168.88.68:6379> info replication
# Replication
role:master 角色
connected_slaves:0 没从服务器
master_replid:e4d9399cdf19c724b032859e77316019735d391e
master_replid2:bd1b8d193de170bedd8b40780ee3fb45f9590a5b
master_repl_offset:35343
second_repl_offset:32642
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:183
repl_backlog_histlen:35161
192.168.88.68:6379>
?哨兵服务会自动监视新的master服务
[root@host69 ~]# tail -f /var/log/redis/sentinel.log 查看日志文件
1651:X 03 Jun 2023 21:50:23.603 # +failover-state-select-slave master mymaster 192.168.88.67 6379
1651:X 03 Jun 2023 21:50:23.694 # +selected-slave slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
1651:X 03 Jun 2023 21:50:23.695 * +failover-state-send-slaveof-noone slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
1651:X 03 Jun 2023 21:50:23.796 * +failover-state-wait-promotion slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
1651:X 03 Jun 2023 21:50:24.452 # +promoted-slave slave 192.168.88.68:6379 192.168.88.68 6379 @ mymaster 192.168.88.67 6379
1651:X 03 Jun 2023 21:50:24.452 # +failover-state-reconf-slaves master mymaster 192.168.88.67 6379
1651:X 03 Jun 2023 21:50:24.502 # +failover-end master mymaster 192.168.88.67 6379
1651:X 03 Jun 2023 21:50:24.502 # +switch-master mymaster 192.168.88.67 6379 192.168.88.68 6379
1651:X 03 Jun 2023 21:50:24.502 * +slave slave 192.168.88.67:6379 192.168.88.67 6379 @ mymaster 192.168.88.68 6379
1651:X 03 Jun 2023 21:50:54.586 # +sdown slave 192.168.88.67:6379 192.168.88.67 6379 @ mymaster 192.168.88.68 6379
?宕机的master 主机恢复后自动配置为当前主的从服务器。
[root@host67 ~]# systemctl start redis 启动服务
[root@host67 ~]# redis-cli -h 192.168.88.67 -p 6379 连接服务
192.168.88.67:6379> info replication 查看角色
# Replication
role:slave 从服务器
master_host:192.168.88.68 主服务器ip
master_port:6379 主服务器端口
master_link_status:up 连通状态
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:54542
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:e4d9399cdf19c724b032859e77316019735d391e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:54542
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:54379
repl_backlog_histlen:164
192.168.88.67:6379>
创建1台虚拟机,运行redis服务完成持久化练习,具体配置如表-3所示。
实现此案例需要按照如下步骤进行。
步骤一:设置存盘间隔为120秒且10个key改变数据自动存盘
查看 redis服务存储数据到硬盘的存盘频率
[root@redis70 ~]# vim /etc/redis.conf
save 秒 变量个数
save 900 1
save 300 10
save 60 10000
?验证配置文件里定义的存储频率
[root@redis70 ~]#systemctl stop redis
[root@redis70 ~]# rm -rf /var/lib/redis/*
[root@redis70 ~]# vim +219 /etc/redis.conf
save 900 1
#save 300 10
save 120 10 # 2分钟内且有>=10个变量改变 就把内存里的数据复制到dump.rdb文件里
save 60 10000
:wq
[root@redis70 ~]# systemctl start redis
Starting Redis server...
[root@redis70 ~]# ls /var/lib/redis/dump.rdb
ls: 无法访问/var/lib/redis/6379/dump.rdb: 没有那个文件或目录
[root@redis70 ~]#
在服务启动后,要在2分钟内存储大于等10个变量
[root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> mset a 1 b 2 c 3 d 4
OK
192.168.88.70:6379> mset x 1 y 2 z 3 k 6 i 7 z 9 f 22 zz 99 cc 66
192.168.88.70:6379> exit
[root@redis70 ~]# ls /var/lib/redis/
dump.rdb
[root@redis70 ~]# ls /var/lib/redis/ -l 显示文件创建的时间
总用量 4
-rw-r--r-- 1 root root 159 10月 26 16:30 dump.rdb
[root@redis70 ~]#
?步骤二:使用RDB文件恢复数据
第1步:拷贝 dump.rdb 文件就是对数据的备份
[root@redis70 ~]# cp /var/lib/redis/dump.rdb /opt/
[root@redis70 ~]# ls /opt/*.rdb
/opt/dump.rdb
[root@redis70 ~]#
第2步:把备份的 dump.rdb 文件 再次拷贝回数据库目录就是恢复
#误删除数据
192.168.88.70:6379> FLUSHALL
OK
192.168.88.70:6379> keys *
(empty list or set)
192.168.88.70:6379>
使用备份的dump.rdb文件恢复
第1步 停止内存没有数据的redis服务
第2步 把没有数据的dump.rdb文件删除
第3步 把备份dump.rdb文件拷贝到数据库目录下
第4步 启动redis服务 并连接服务查看数据
[root@redis70 ~]# systemctl stop redis
[root@redis70 ~]# rm -rf /var/lib/redis/dump.rdb
[root@redis70 ~]# cp /opt/dump.rdb /var/lib/redis/
[root@redis70 ~]# systemctl start redis
Starting Redis server...
[root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> keys *
1) "i"
2) "d"
3) "x"
……
……
实现此案例需要按照如下步骤进行。
步骤一:启用AOF
命令操作如下所示:
[root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> config set appendonly yes 启用aof文件
OK
192.168.88.70:6379> config get appendonly 查看是否启用
1) "appendonly"
2) "yes"
192.168.88.70:6379>
192.168.88.70:6379> config rewrite 保存配置
OK
192.168.88.70:6379> exit 断开连接
数据库目录多了.aof文件
[root@redis70 ~]# ls /var/lib/redis/
appendonly.aof dump.rdb
[root@redis70 ~]#wc –l /var/lib/redis/appendonly.aof 查看文件行数
[root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> set x 1 存储变量x
OK
192.168.88.70:6379> set y 2 存储变量y
OK
192.168.88.70:6379> set z 3 存储变量z
OK
192.168.88.70:6379>keys * 查看变量
1) "x"
2) "z"
3) "y"
192.168.88.70:6379> exit 断开连接
[root@redis70 ~]#wc –l /var/lib/redis/ appendonly.aof 查看文件行数
步骤二:使用AOF文件恢复数据
1)备份aof文件
[root@redis70 ~]# cp /var/lib/redis/appendonly.aof /opt/
[root@redis70 ~]# ls /opt/*.aof
/opt/appendonly.aof
[root@redis70 ~]#
2)使用备份的aof文件恢复数据
#删除数据
[root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> flushall
192.168.88.70:6379> exit
3)恢复数据?
第1步: 把没有数据的服务停止
[root@redis70 ~]# systemctl stop redis
第2步: 删除没有数据的aof文件和rdb文件
[root@redis70 ~]# rm -rf /var/lib/redis/*
第3步:把备份的aof文件拷贝到数据库目录
[root@redis70 ~]# cp /opt/appendonly.aof /var/lib/redis/
第4步:启动redis服务并查看数据
[root@redis70 ~]# systemctl start redis
[root@redis70 ~]# redis-cli -h 192.168.88.70 -p 6379
192.168.88.70:6379> keys *
1) "v4"
2) "v3"
。。。。。。
。。。。。。
练习命令的使用,具体命令如下:
在redis70主机做字符类型命令的练习。
实现此案例需要按照如下步骤进行。
步骤一:命令操作如下所示:
存储变量时 设置变量的有效期 px(毫秒) ex (秒)
192.168.88.70:6379> set name plj ex 10 //变量10秒过期
OK
192.168.88.70:6379>
192.168.88.70:6379> type name //查看类型
string
192.168.88.70:6379>
192.168.88.70:6379> set class nsd px 10 //变量10毫秒过期
OK
192.168.88.70:6379>
NX 不覆盖赋值
192.168.88.70:6379> set name plj NX
OK
192.168.88.70:6379> get name
"plj"
XX 覆盖赋值
192.168.88.70:6379> set name yaya XX
OK
192.168.88.70:6379> get name
"yaya"
192.168.88.70:6379>
?set 命令完整格式演示
192.168.88.70:6379> set gender girl ex 20 NX
OK
192.168.88.70:6379>
- 递增数字:字符串类型可以存储任何形式的字符串,当存储的字符串是整数形式时,
Redis 提供了一个实用的命令 INCR,其作用是让当前键值递增,并返回递增后的值。
# 当要操作的键不存在时会默认键值为0,所以第一次递增后的结果是1。
192.168.88.70:6379> set num 1 //创建变量
192.168.88.70:6379> INCR num //+1
(integer) 2
192.168.88.70:6379> INCR num //+1
(integer) 3
192.168.88.70:6379> GET num
"3"
?- 增加指定的整数
192.168.88.70:6379> INCRBY num 2 //+2
(integer) 5
192.168.88.70:6379> INCRBY num 3 //+3
(integer) 8
- 递减数字
192.168.88.70:6379> DECR num //-1
(integer) 7
192.168.88.70:6379> DECRBY num 3 //
(integer) 4
?- 向尾部追加值
192.168.88.70:6379> SET hi Hello //创建变量hi
OK
192.168.88.70:6379> APPEND hi " World" # 因为字符串包含空格,需要使用引号
(integer) 11 # 返回值为hi的总长度
192.168.88.70:6379> GET hi
"Hello World"
?- 获取字符串长度
192.168.88.70:6379> STRLEN hi
(integer) 11
- 中文字符返回字节数
192.168.88.70:6379> SET name 张三
OK
192.168.88.70:6379> STRLEN name
(integer) 6 # UTF-8编码的中文,由于“张”和“三”两个字的UTF-8编码的长度都是3,所以此例中会返回6。
?获取变量部分数据
192.168.88.70:6379> set zfc ABCEF //创建变量
OK
192.168.88.70:6379> GET zfc //输出变量值
"ABCEF"
192.168.88.70:6379> GETRANGE zfc 0 1 //输出第1个到第2个字符
"AB"
192.168.88.70:6379> GETRANGE zfc 2 4 //输出第3个到第5个字符
"CEF"
192.168.88.70:6379> GETRANGE zfc -2 -1 //输出倒数第2个到第1个字符
"EF"
192.168.88.70:6379>
练习命令使用,具体如下:
在redis70主机做练习。
实现此案例需要按照如下步骤进行。
步骤一:命令操作如下所示:
LPUSH命令用来向列表左边增加元素,返回值表示增加元素后列表的长度
//创建变量
192.168.88.70:6379> lpush letter A B C
(integer) 3
192.168.88.70:6379> type letter 查看类型
list
192.168.88.70:6379>
//头部追加元素
192.168.88.70:6379> lpush letter d e
(integer) 5
?取出列表所有元素
# 起始下标为0,结束下标为-1
192.168.88.70:6379> lrange letter 0 -1
1) "e"
2) "d"
3) "C"
4) "B"
5) "A"
?统计元素个数
192.168.88.70:6379> llen letter
(integer) 5
通过下标输出单个元素 第1个元素下标用0表示 第2个元素下标用1表示
最后一个元素下标用-1表示
192.168.88.70:6379> lindex letter 0
"e"
192.168.88.70:6379> lindex letter 2
"C"
192.168.88.70:6379>
192.168.88.70:6379> lindex letter -1 //最后1个
"A"
192.168.88.70:6379> lindex letter -2 //倒数第2个
"B"
192.168.88.70:6379>
?lset修改元素
192.168.88.70:6379> lrange letter 0 -1 修改前查看
1) "e"
2) "d"
3) "C"
4) "B"
5) "A"
192.168.88.70:6379> lset letter 0 E 修改第1元素
OK
192.168.88.70:6379> lset letter -1 a 修改最后1个元素
OK
192.168.88.70:6379> lrange letter 0 -1 修改后查看
1) "E"
2) "d"
3) "C"
4) "B"
5) "a"
192.168.88.70:6379>
?弹出元素(删除元素)
192.168.88.70:6379> lrange letter 0 -1 修改前查看
1) "E"
2) "d"
3) "C"
4) "B"
5) "a"
192.168.88.70:6379> lpop letter 弹出头部元素
"E"
192.168.88.70:6379> rpop letter 弹出尾部元素
"a"
192.168.88.70:6379> lrange letter 0 -1 修改后查看
1) "d"
2) "C"
3) "B"
192.168.88.70:6379>
?尾部追加元素
192.168.88.70:6379> rpush letter e f 尾部追加元素
(integer) 5
192.168.88.70:6379> lrange letter 0 -1 追加后查看
1) "d"
2) "C"
3) "B"
4) "e"
5) "f"
192.168.88.70:6379>
?插入元素
192.168.88.70:6379> lrange letter 0 -1 插入前查看
1) "d"
2) "C"
3) "B"
4) "e"
5) "f"
192.168.88.70:6379>
192.168.88.70:6379> linsert letter before C C2 值C前插入C2
(integer) 6
192.168.88.70:6379> lrange letter 0 -1 插入后查看
1) "d"
2) "C2"
3) "C"
4) "B"
5) "e"
6) "f"
192.168.88.70:6379>
192.168.88.70:6379> linsert letter after C C3 值C后插入C3
(integer) 7
192.168.88.70:6379> lrange letter 0 -1 插入后查看
1) "d"
2) "C2"
3) "C"
4) "C3"
5) "B"
6) "e"
7) "f"
192.168.88.70:6379>
练习命令使用,具体如下:
在redis70主机做练习。
实现此案例需要按照如下步骤进行。
步骤一:命令操作如下所示:
赋值与取值
192.168.88.70:6379> HSET user1 name bob 创建变量
(integer) 1
192.168.88.70:6379> type user1 查看类型
hash
192.168.88.70:6379>
192.168.88.70:6379> HSET user1 gender man 赋新值
(integer) 1
192.168.88.70:6379> HGET user1 name 查看name列的值
"bob"
?设置多个字段
192.168.88.70:6379> HMSET user1 email bob@tedu.cn phone 13412345678
OK
192.168.88.70:6379> HMGET user1 email phone
1) "bob@tedu.cn"
2) "13412345678"
获取所有列名及对应的值
192.168.88.70:6379> HGETALL user1
1) "name"
2) "bob"
3) "gender"
4) "male"
5) "email"
6) "bob@tedu.cn"
7) "phone"
8) "13412345678"
?删除列
192.168.88.70:6379> HDEL user1 age
(integer) 1
?只获取列名
192.168.88.70:6379> HKEYS user1
1) "name"
2) "gender"
3) "email"
4) "phone"
5) "address"
?只获取值
192.168.88.70:6379> HVALS user1
1) "bob"
2) "male"
3) "bob@tedu.cn"
4) "13412345678"
5) "beijing"
?获得列数量
192.168.88.70:6379> HLEN user1
(integer) 5
练习命令使用,具体如下:
在redis70主机做练习。
实现此案例需要按照如下步骤进行。
步骤一:练习无序集合类型命令
无序集合中的每个元素都是不同的,且没有顺序
创建/追加/删除/查看
192.168.88.70:6379> sadd mylike film muisc game 创建
(integer) 3
192.168.88.70:6379> type mylike 查看数据类型
set
192.168.88.70:6379> sadd mylike sleep game it 追加,自动删除重复的值
(integer) 2
192.168.88.70:6379> srem mylike sleep game 删除成员
(integer) 2
192.168.88.70:6379> SMEMBERS mylike 查看成员
1) "film"
2) "it"
3) "muisc"
192.168.88.70:6379>
判断元素是否在集合中
192.168.88.70:6379> SISMEMBER mylike game 输出0表示不存在
(integer) 0
192.168.88.70:6379> SISMEMBER mylike music 输出1表示存在
(integer) 1
192.168.88.70:6379>
?输出成员个数
192.168.88.70:6379> SCARD mylike
(integer) 3
192.168.88.70:6379>
?集合运算
192.168.88.70:6379> SMEMBERS mylike
1) "film"
2) "it"
3) "muisc"
192.168.88.70:6379> sadd helike film music game sleep
(integer) 4
192.168.88.70:6379>
合集 重复的只显示一次
192.168.88.70:6379> SUNION mylike helike
1) "game"
2) "it"
3) "muisc"
4) "film"
5) "sleep"
6) "music"
192.168.88.70:6379>
交集
192.168.88.70:6379> SINTER mylike helike
1) "film"
192.168.88.70:6379>
差集: 用第1列的变量和第2列的变量比
192.168.88.70:6379> SDIFF mylike helike
1) "it"
2) "muisc"
192.168.88.70:6379> SDIFF helike mylike
1) "game"
2) "sleep"
3) "music"
192.168.88.70:6379>
?随机获得集合中的元素
# 在集合helike中随机取出两个不同元素。
192.168.88.70:6379> SRANDMEMBER helike 2
1) "sleep"
2) "music"
192.168.88.70:6379> SRANDMEMBER helike 2
1) "game"
2) "music"
192.168.88.70:6379>
# 在集合helike中随机取出两个有可能相同元素。
192.168.88.70:6379> SRANDMEMBER helike -2
1) "film"
2) "music"
192.168.88.70:6379> SRANDMEMBER helike -2
1) "music"
2) "music"
192.168.88.70:6379>
集合中随机弹出一个元素
192.168.88.70:6379> spop helike 第1次弹出
"music"
192.168.88.70:6379> spop helike 第2次弹出
"game"
192.168.88.70:6379> SMEMBERS helike 查看
1) "film"
2) "sleep"
192.168.88.70:6379>
步骤二:练习有序集合类型命令
ZADD命令的返回值是新加入到集合中的元素个数
192.168.88.70:6379> ZADD scores 88 tom 90 jerry 75 bob 92 alice 创建变量
(integer) 4
192.168.88.70:6379> type scores 查看类型
zset
192.168.88.70:6379> ZCARD scores 统计成员个数
(integer) 4
192.168.88.70:6379> ZRANGE scores 0 -1 输出成员名称
1) "bob"
2) "tom"
3) "jerry"
4) "alice"
192.168.88.70:6379> ZRANGE scores 0 -1 withscores 输出成员名称及对应的值
1) "bob"
2) "75"
3) "tom"
4) "88"
5) "jerry"
6) "90"
7) "alice"
8) "92"
192.168.88.70:6379>
获得某个成员的值
192.168.88.70:6379> ZSCORE scores tom
"88"
?- 获得指定分数范围的元素
192.168.88.70:6379> ZRANGEBYSCORE scores 80 90 WITHSCORES
1) "jerry"
2) "85"
3) "tom"
4) "88"
?- 增加某个元素的分数
192.168.88.70:6379> ZINCRBY scores 3 bob
"78"
192.168.88.70:6379> ZSCORE scores bob
"78"
?- 获得指定分数范围内的元素个数
192.168.88.70:6379> ZCOUNT scores 80 90
(integer) 2
?- 删除元素
192.168.88.70:6379> ZREM scores bob
(integer) 1
- 获得元素的排名
192.168.88.70:6379> ZRANK scores tom # 获取tom的排名
(integer) 1 # 升序排列,从0开始计数
192.168.88.70:6379> ZREVRANK scores alice # 获取alice的排名
(integer) 0 # 降序排列,从0开始计数
?