Top
NSD DBA DAY10
- 案例1:配置主從復制
- 案例2:配置帶驗證的主從復制
- 案例3:哨兵服務
- 案例4:使用RDB文件恢復數據
- 案例5:AOF
- 案例6:字符類型
- 案例7:列表類型
- 案例8:散列類型
- 案例9:集合類型
1 案例1:配置主從復制
1.1 問題
- 配置一主一從結構
- 配置一主多從結構
- 配置主從從結構
1.2 方案
準備3臺新虛擬機,具體配置如表-1所示。
1.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:配置一主一從結構
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>
2 案例2:配置帶驗證的主從復制
2.1 問題
1)基于案例1做如下配置:
- 配置主機host61,redis服務連接密碼為123456
- 主機host62設置連接host61的redis服務密碼
2.2 方案
給host61主機的Redis服務設置連接密碼,如果從服務器不指定連接密碼無法同步數據。
2.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:配置主機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 案例3:哨兵服務
3.1 問題
- 配置主機Host67為master服務器
- 配置主機host68為Host67的slave服務器
- 配置主機host69運行哨兵服務
- 測試配置
3.2 方案
準備3臺新的虛擬機,具體配置如表-2所示。
說明:
?
1)可以使用一主一從或 一主多從 或 主從從 + 哨兵服務 做服務的高可用 和 數據自動備份
2)如果主從結構中的redis服務設置連接密碼的話必須全每臺數據庫都要設置密碼且密碼要一樣,要么全都不設置密碼。
3)如果Redis服務有密碼宕機的服務器啟動服務后,要人為指定主服務器的連接密碼。
3.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:配置主機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>
4 案例4:使用RDB文件恢復數據
4.1 問題
- 設置存盤間隔為120秒且10個key改變數據自動存盤
- 使用RDB文件恢復數據
4.2 方案
創建1臺虛擬機,運行redis服務完成持久化練習,具體配置如表-3所示。
?
4.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"
- ……
- ……
5 案例5:AOF
5.1 問題
- 啟用AOF
- 使用AOF文件恢復數據
5.2 步驟
實現此案例需要按照如下步驟進行。
步驟一:啟用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"
- 。。。。。。
- 。。。。。。
6 案例6:字符類型
6.1 問題
練習命令的使用,具體命令如下:
- set getrange strlen append
- decr decrby incr incrby incrbyfloat
6.2 方案
在redis70主機做字符類型命令的練習。
6.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:命令操作如下所示:
存儲變量時 設置變量的有效期 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>
7 案例7:列表類型
7.1 問題
練習命令使用,具體如下:
- lpush llen lrange lpop
- lindex lset rpush rpop linsert
7.2 方案
在redis70主機做練習。
7.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:命令操作如下所示:
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>
8 案例8:散列類型
8.1 問題
練習命令使用,具體如下:
- hset hmset hgetall hkeys hvals
- hget hmget hdel
8.2 方案
在redis70主機做練習。
8.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:命令操作如下所示:
賦值與取值
- 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
9 案例9:集合類型
9.1 問題
練習命令使用,具體如下:
- 練習無序集合類型命令
- 練習有序集合類型命令
9.2 方案
在redis70主機做練習。
9.3 步驟
實現此案例需要按照如下步驟進行。
步驟一:練習無序集合類型命令
無序集合中的每個元素都是不同的,且沒有順序
創建/追加/刪除/查看
- 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開始計數