日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

NoSQL(三):主从复制

發布時間:2025/3/21 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NoSQL(三):主从复制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主從復制

主從復制概述

主從復制結構模式

主從復制工作原理
  • slave向master發送sync命令
  • master啟動后臺存盤進程,并收集所有數據命令
  • master完成后臺存盤后,傳送整個數據文件到slave
  • slave接收數據文件,加載到內存中完成首次完全同步
  • 后續有新數據產生時,master繼續收集數據修改命令依次傳給slave,完成同步

配置主從復制

拓撲結構

redis主從復制
  • redis服務運行后,默認都是master服務器
命令行配置(直接生效,重啟失效)>info replication ##查看復制信息,默認所有的主機創建完成后即為master主機>slaveof 主服務器IP 端口號 ##指定主服務器>slaveof no one 永久配置(/etc/redis/6379.cnf)將51主機配置為主服務器,52為從服務器第一步,將虛擬機還原成獨立的redis服務器的狀態 [root@host51 ~]# ss -nutlp | grep redis-server #首先查看主機是否處于集群中的狀態 tcp LISTEN 0 128 192.168.4.51:6351 *:* users:(("redis-server",pid=1121,fd=6))[root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 192.168.4.51:6351> info replication ##查看復制信息 # Replication role:master #角色 connected_slaves:0 #從服務器個數0臺 master_replid:d5d3288a6a2101dc58a4c68004744316222bdfcb 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第二步,連接52主機,將52主機作為51主機的從服務器 [root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> info replication #先查看一下復制信息,此時52主機是主服務器 # Replication role:master connected_slaves:0 master_replid:f0f81003d86728f35ab94da3d416c285df8e5a3e 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.4.52:6352> set aa 456 #可以先寫一點數據 OK 192.168.4.52:6352> keys * 1) "aa" 192.168.4.52:6352> slaveof 192.168.4.51 6351 #指定主服務器,slaveof 主庫的IP地址 端口號(臨時配置) OK 192.168.4.52:6352> info replication #再次查看信息,此時,52主機的角色變為從 # Replication role:slave #角色,從服務器 master_host:192.168.4.51 #主庫IP地址 master_port:6351 #主庫端口號 master_link_status:up #與主庫連接狀態開啟 master_last_io_seconds_ago:9 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:cae73fe71d7dd25494e540cc9d90776efbf321f5 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:14192.168.4.52:6352> keys * #原本52主機的數據也會被51主機的數據覆蓋 (empty list or set) 192.168.4.51:6351> mset a ddd b sss #此時我們可以回到51主機上寫一點數據,在52主機上面查看,數據自動同步 OK 192.168.4.52:6352> keys * #在52主機上可以看得到51主機上剛寫入的數據,說明主從結構成功 1) "b" 2) "a"192.168.4.51:6351> info replication #再次在51主機上查看狀態信息,發現有一個從,IP地址為192.168.4.52,端口號為6352 # Replication role:master #角色,主服務器 connected_slaves:1 #從服務器個數,1臺 slave0:ip=192.168.4.52,port=6352,state=online,offset=181,lag=1 #從服務器信息 master_replid:cae73fe71d7dd25494e540cc9d90776efbf321f5 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:195 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:195 192.168.4.52:6352> slaveof no one #在52主機上將從庫還原成主庫 OK 192.168.4.52:6352> info replication # Replication role:master connected_slaves:0 master_replid:7dd2f582d1ae36b2d88a6cd859cc8dc70f5afb9b master_replid2:cae73fe71d7dd25494e540cc9d90776efbf321f5 master_repl_offset:265 second_repl_offset:266 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:265192.168.4.51:6351> set hhh kkkk #再次向51主機寫入數據,在52主機上查看 OK 192.168.4.51:6351> set bbb ddd OK 192.168.4.51:6351> keys * 1) "bbb" 2) "hhh" 3) "b" 4) "a" 192.168.4.52:6352> keys * #此時52主機沒有同步新的數據 1) "b" 2) "a"192.168.4.52:6352> slaveof 192.168.4.51 6351 #再次將52主機配置為51主機的從 OK 192.168.4.52:6352> keys * 1) "bbb" 2) "hhh" 3) "b" 4) "a"[root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 shutdown #將從庫重啟 [root@host52 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> info replication #查看復制信息,52主機已經不再是51主機的從庫 # Replication role:master connected_slaves:0 master_replid:f4cc998d850e680fbbb4bdc4e1a9ff3d04bafbba 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.4.52:6352> keys * #但主機中還有剛剛同步過的數據,重啟時會自動將內存里的數據保存到硬盤 1) "b" 2) "hhh" 3) "a" 4) "bbb"********************************* 永久配置: [root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 shutdown [root@host52 ~]# vim /etc/redis/6379.conf #配置52主機永久為51主機的從服務器282 slaveof 192.168.4.51 6351 [root@host52 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> info replication #查看主從復制信息 # Replication role:slave #角色,從服務器 master_host:192.168.4.51 #主庫IP地址 master_port:6351 #主庫端口 master_link_status:up #與主庫連接狀態開啟 master_last_io_seconds_ago:8 master_sync_in_progress:0 slave_repl_offset:1658 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:cae73fe71d7dd25494e540cc9d90776efbf321f5 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:1658 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1645 repl_backlog_histlen:14ps:主庫執行flushall,從庫也會自動清空所有數據 192.168.4.52:6352> keys * 1) "a" 2) "hhh" 3) "b" 4) "bbb" 192.168.4.51:6351> flushall OK 192.168.4.51:6351> keys * (empty list or set) 192.168.4.52:6352> keys * (empty list or set)
添加一臺新的從庫服務器
[root@host53 ~]# redis-cli -h 192.168.4.53 -p 6353 shutdown [root@host53 ~]# vim +282 /etc/redis/6379.conf 282 slaveof 192.168.4.51 6351 [root@host53 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> info replication # Replication role:slave master_host:192.168.4.51 master_port:6351 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:2119 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:cae73fe71d7dd25494e540cc9d90776efbf321f5 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:2119 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2106 repl_backlog_histlen:14192.168.4.51:6351> info replication #在51主機上查看,有兩個從服務器 # Replication role:master connected_slaves:2 slave0:ip=192.168.4.52,port=6352,state=online,offset=2231,lag=0 slave1:ip=192.168.4.53,port=6353,state=online,offset=2231,lag=0 master_replid:cae73fe71d7dd25494e540cc9d90776efbf321f5 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:2245 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:2245
配置帶驗證的主從復制
- 配置 master,設置連接密碼,重啟密碼 [root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 shutdown [root@host51 ~]# vim +501 /etc/redis/6379.conf #把51主機配置密碼501 requirepass 123456 [root@host51 ~]# /etc/init.d/redis_6379 start #啟動服務 Starting Redis server... [root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 -a 123456 192.168.4.51:6351> info replication #此時查看主從復制信息,發現51主機沒有從服務器,因為在設置的時候,從服務器不知道主服務需要密碼 # Replication role:master connected_slaves:0 master_replid:f1e42fe68a0d21458128290c548e7fe87a44ea66 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- 配置slave,設置連接密碼,重啟服務 [root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 shutdown #將52主機服務關閉[root@host52 ~]# vim +289 /etc/redis/6379.conf #修改配置文件,讓52主機知道主服務器的驗證密碼289 masterauth 123456[root@host52 ~]# /etc/init.d/redis_6379 start #再次重啟 Starting Redis server... [root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> info replication #查看主從復制信息,此時可以看到51主的信息了 # Replication role:slave #角色,從服務器 master_host:192.168.4.51 #主庫IP地址 master_port:6351 #主庫端口 master_link_status:up #連接狀態開啟 master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:8ea70d98c6e9e80b7e334544a4ef3ea2bb0b2ec6 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:1453主機也做同樣的操作[root@host53 ~]# redis-cli -h 192.168.4.53 -p 6353 shutdown #關閉53主機的服務 [root@host53 ~]# vim +289 /etc/redis/6379.conf #設置密碼289 masterauth 123456 [root@host53 ~]# /etc/init.d/redis_6379 start #啟動服務 Starting Redis server... [root@host53 ~]# redis-cli -h 192.168.4.53 -p 6353 192.168.4.53:6353> info replication #查看復制信息 # Replication role:slave #角色,從服務器 master_host:192.168.4.51 #主庫IP地址 master_port:6351 #主庫端口號 master_link_status:up #與主庫連接狀態開啟 master_last_io_seconds_ago:8 master_sync_in_progress:0 slave_repl_offset:140 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:8ea70d98c6e9e80b7e334544a4ef3ea2bb0b2ec6 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:140 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:127 repl_backlog_histlen:14此時再回到51主機查看主從信息,就會發現,兩個從服務器的信息又回來了192.168.4.51:6351> info replication # Replication role:master #角色,主服務器 connected_slaves:2 #從服務器,2臺 slave0:ip=192.168.4.52,port=6352,state=online,offset=154,lag=0 #從服務器52信息 slave1:ip=192.168.4.53,port=6353,state=online,offset=154,lag=0 #從服務器53信息 master_replid:8ea70d98c6e9e80b7e334544a4ef3ea2bb0b2ec6 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:154 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:154

哨兵服務

哨兵服務介紹
  • 節省運維成本
  • 監視master服務器
  • 發現master宕機后,將從服務器升級為主服務器
  • 主配置文件 sentinel.conf
  • 模板文件:redis-4.0.8/sentinel.conf
sentinel monitor 主機名 ip地址 端口 票數 - 主機名:自定義 - IP地址:master主機的IP地址 - 端口:master主機redis服務使用的端口 - 票數:發現主機宕機的哨兵服務器臺數
拓撲結構

配置哨兵服務
54主機: [root@host54 ~]# redis-cli -h 192.168.4.54 -p 6354 192.168.4.54:6354> info replication #查看當前主從信息,此時是一個獨立的服務器,默認為主服務器 # Replication role:master connected_slaves:0 master_replid:109967e8e7e63cc0a7bb33c4dd92177496dced3f 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:055主機:[root@host55 ~]# redis-cli -h 192.168.4.55 -p 6355 shutdown [root@host55 ~]# vim +282 /etc/redis/6379.conf #修改配置文件,讓55主機作為54主機的從服務器282 slaveof 192.168.4.54 6354 [root@host55 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host55 ~]# redis-cli -h 192.168.4.55 -p 6355 192.168.4.55:6355> info replication #在55主機查看主從信息狀態,此時55主機是從的狀態 # Replication role:slave master_host:192.168.4.54 master_port:6354 master_link_status:up master_last_io_seconds_ago:5 master_sync_in_progress:0 slave_repl_offset:14 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:2f89b8c40607cad01757fce504a876f5fc27e488 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:14192.168.4.54:6354> info replication #在54主機再次查看主從信息狀態,發現54主機多了一個從服務器 # Replication role:master connected_slaves:1 slave0:ip=192.168.4.55,port=6355,state=online,offset=336,lag=1 master_replid:2f89b8c40607cad01757fce504a876f5fc27e488 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:336 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:33656主機: [root@host56 ~]# redis-cli -h 192.168.4.56 -p 6356 shutdown [root@host56 ~]# vim +282 /etc/redis/6379.conf #修改配置文件,讓56主機作為55主機的從服務器282 slaveof 192.168.4.55 6355 [root@host56 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host56 ~]# redis-cli -h 192.168.4.56 -p 6356 192.168.4.56:6356> info replication #查看主從信息,56主機為從服務器 # Replication role:slave master_host:192.168.4.55 master_port:6355 master_link_status:up master_last_io_seconds_ago:6 master_sync_in_progress:0 slave_repl_offset:140 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:2f89b8c40607cad01757fce504a876f5fc27e488 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:140 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:127 repl_backlog_histlen:14192.168.4.55:6355> info replication #在55主機查看狀態,發現55主機多了一個從服務器IP為192.168.4.56 # Replication role:slave master_host:192.168.4.54 master_port:6354 master_link_status:up master_last_io_seconds_ago:3 master_sync_in_progress:0 slave_repl_offset:154 slave_priority:100 slave_read_only:1 connected_slaves:1 slave0:ip=192.168.4.56,port=6356,state=online,offset=154,lag=1 master_replid:2f89b8c40607cad01757fce504a876f5fc27e488 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:154 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:154測試: 在54主機上寫入數據,則55 56主機都可以看到相應的數據54主機: 192.168.4.54:6354> set tian 111222 OK 192.168.4.54:6354> set haha 555 OK 192.168.4.54:6354> keys * 1) "haha" 2) "tian"55主機: 192.168.4.55:6355> keys * 1) "haha" 2) "tian" 192.168.4.55:6355> get tian "111222" 192.168.4.55:6355> get haha "555"56主機: 192.168.4.56:6356> keys * 1) "tian" 2) "haha" 192.168.4.56:6356> get tian "111222" 192.168.4.56:6356> get haha "555"--------------------------------------------- 配置哨兵服務器192.168.4.57- 安裝哨兵服務 - 創建主配置文件 - 啟動哨兵服務[root@host57 ~]# cd /opt [root@host57 opt]# ls mha redis-3.2.1.gem redis-4.0.8 redis-4.0.8.tar.gz [root@host57 opt]# rpm -q gcc 未安裝軟件包 gcc [root@host57 opt]# yum -y install gcc [root@host57 opt]# tar -zvxf redis-4.0.8.tar.gz [root@host57 opt]# cd redis-4.0.8/ [root@host57 redis-4.0.8]# make && make install [root@host57 redis-4.0.8]# ls 00-RELEASENOTES COPYING Makefile redis.conf runtest-sentinel tests BUGS deps MANIFESTO runtest sentinel.conf utils CONTRIBUTING INSTALL README.md runtest-cluster src創建哨兵服務的主配置文件并編輯[root@host57 redis-4.0.8]# vim /etc/sentinel.conf #創建主配置文件 bind 192.168.4.57 #哨兵服務地址,表示監聽本機地址(0.0.0.0代表本機所有網絡接口) sentinel monitor host54 192.168.4.54 6354 1 #監視主服務器啟動哨兵服務,會占用一個終端 [root@host57 redis-4.0.8]# redis-sentinel /etc/sentinel.conf #啟動哨兵服務 4711:X 29 Feb 19:23:51.779 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 4711:X 29 Feb 19:23:51.779 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=4711, just started 4711:X 29 Feb 19:23:51.779 # Configuration loaded 4711:X 29 Feb 19:23:51.780 * Increased maximum number of open files to 10032 (it was originally set to 1024)._._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 4.0.8 (00000000/0) 64 bit.-`` .-```. ```\/ _.,_ ''-._ ( ' , .-` | `, ) Running in sentinel mode|`-._`-...-` __...-.``-._|'` _.-'| Port: 26379| `-._ `._ / _.-' | PID: 4711`-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 4711:X 29 Feb 19:23:51.785 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 4711:X 29 Feb 19:23:51.787 # Sentinel ID is 714d4a5b97456538f19d3d822bd020ebc046d7ea 4711:X 29 Feb 19:23:51.787 # +monitor master host54 192.168.4.54 6354 quorum 1 4711:X 29 Feb 19:23:51.793 * +slave slave 192.168.4.55:6355 192.168.4.55 6355 @ host54 192.168.4.54 6354 ##提示54主機是master主服務器,55主機是slave從服務器------------------------------------------------- 測試哨兵服務的配置1.停止54主機的redis服務 192.168.4.54:6354> shutdown not connected> exit2.在55主機查看復制信息 [root@host55 ~]# redis-cli -h 192.168.4.55 -p 6355 192.168.4.55:6355> info replication # Replication role:master #角色是master connected_slaves:1 slave0:ip=192.168.4.56,port=6356,state=online,offset=19475,lag=1 master_replid:0172cc9b61ee406e8539bf6b6a23f1614a321099 master_replid2:2f89b8c40607cad01757fce504a876f5fc27e488 master_repl_offset:19475 second_repl_offset:18891 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:19475在管理主機查看哨兵服務的狀態 [root@host57 ~]# cat /etc/sentinel.conf bind 192.168.4.57 sentinel myid 714d4a5b97456538f19d3d822bd020ebc046d7ea # Generated by CONFIG REWRITE port 26379 dir "/opt/redis-4.0.8" sentinel monitor host54 192.168.4.55 6355 1 #此時,監控的主機依舊是自定義主機名host54,但監視的主服務器已經變成了55主機 sentinel config-epoch host54 1 sentinel leader-epoch host54 1 sentinel known-slave host54 192.168.4.54 6354 sentinel known-slave host54 192.168.4.56 6356 sentinel current-epoch 1此時,如果再次將54主機服務開啟,則54主機自動變為55主機的從服務器 [root@host54 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host54 ~]# redis-cli -h 192.168.4.54 -p 6354 192.168.4.54:6354> info replication # Replication role:slave master_host:192.168.4.55 master_port:6355 master_link_status:up master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:51529 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:0172cc9b61ee406e8539bf6b6a23f1614a321099 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:51529 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:48985 repl_backlog_histlen:2545[root@host55 ~]# redis-cli -h 192.168.4.55 -p 6355 192.168.4.55:6355> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.4.56,port=6356,state=online,offset=57957,lag=1 slave1:ip=192.168.4.54,port=6354,state=online,offset=57957,lag=1 master_replid:0172cc9b61ee406e8539bf6b6a23f1614a321099 master_replid2:2f89b8c40607cad01757fce504a876f5fc27e488 master_repl_offset:57957 second_repl_offset:18891 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:57957模擬55主機宕機,查看是54主機還是56主機作為主 192.168.4.55:6355> shutdown #將55主機服務關閉 not connected> exit [root@host54 ~]# redis-cli -h 192.168.4.54 -p 6354 192.168.4.54:6354> info replication #54主機變成新的主服務器,56主機就自動變成54主機的從服務器,誰的數據最新,誰就成為新的主 # Replication role:master connected_slaves:1 slave0:ip=192.168.4.56,port=6356,state=online,offset=94588,lag=0 master_replid:e24bbd33ce00c4194baeb5c26e773e4fb7b32a6b master_replid2:0172cc9b61ee406e8539bf6b6a23f1614a321099 master_repl_offset:94588 second_repl_offset:94141 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:48985 repl_backlog_histlen:45604192.168.4.56:6356> info replication # Replication role:slave master_host:192.168.4.54 master_port:6354 master_link_status:up master_last_io_seconds_ago:2 master_sync_in_progress:0 slave_repl_offset:105073 slave_priority:100 slave_read_only:1 connected_slaves:0 master_replid:e24bbd33ce00c4194baeb5c26e773e4fb7b32a6b master_replid2:0172cc9b61ee406e8539bf6b6a23f1614a321099 master_repl_offset:105073 second_repl_offset:94141 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:127 repl_backlog_histlen:104947[root@host57 ~]# cat /etc/sentinel.conf bind 192.168.4.57 sentinel myid 714d4a5b97456538f19d3d822bd020ebc046d7ea # Generated by CONFIG REWRITE port 26379 dir "/opt/redis-4.0.8" sentinel monitor host54 192.168.4.54 6354 1 #查看監控情況,此時又重新監控54主機 sentinel config-epoch host54 2 sentinel leader-epoch host54 2 sentinel known-slave host54 192.168.4.55 6355 sentinel known-slave host54 192.168.4.56 6356 sentinel current-epoch 2

持久化

RDB
  • RDB介紹
  • 數據庫文件,全稱Redis DataBase
  • 數據持久化方式之一
  • 數據持久化默認方式
  • 按照指定時間間隔,將內存中的數據集快照寫入硬盤
  • 定義RDB文件名
  • dbfilename “dump.rdb” #文件名
使用RDB文件恢復數據
  • 備份數據
  • 備份dump.rdb文件到其他位置
  • [root@localhost ~]# cp 數據庫目錄/dump.rdb 備份目錄
  • 恢復數據
  • 拷貝備份文件到數據庫目錄,啟動redis服務
[root@localhost ~]# cp 備份目錄/dump.rdb 數據庫目錄
  • RDB的優點與缺點
  • RDB的優點
  • 高性能的持久化實現——創建一個子進程來執行持久化,先將數據寫入臨時文件,持久化過程結束后,再用這個臨時文件替換上次持久化好的文件;過程中主進程不作任何IO操作
  • 比較適合大規模數據恢復,且對數據完整性要求不是非常高的場合
  • RDB的缺點
  • 意外宕機時,丟失最后一次持久化的所有數據
  • 優化設置
  • 數據從內存保存到硬盤的頻率
- save 900 1 #15分鐘且有一個key改變即存盤 - save 300 10 #5分鐘且有10個key改變即存盤 - save 60 10000 #1分鐘且有10000個key改變即存盤
  • 手動存盤
- save #阻塞寫存盤 - bgsave #不阻塞寫存盤
使用RDB文件恢復數據
  • 要求:
  • 啟用RDB
  • 設置存盤間隔為120秒且10個key改變數據自動存盤
  • 備份RDB文件
  • 刪除數據
  • 使用RDB文件恢復數據
  • 使用51主機備份數據,用52主機恢復數據 [root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 192.168.4.51:6351> set a nnn #在51主機寫入數據 OK 192.168.4.51:6351> set b aaa OK 192.168.4.51:6351> set c kkk OK 192.168.4.51:6351> keys * #查看所有的變量 1) "c" 2) "a" 3) "b" 192.168.4.51:6351> save #確保內存里的數據存到硬盤 OK[root@host51 ~]# ls /var/lib/redis/6379/ dump.rdb [root@host51 ~]# cp /var/lib/redis/6379/dump.rdb /root/ #將rdb文件做備份 [root@host51 ~]# ls dump.rdb用52主機進行恢復[root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> keys * #在進行查看一下52主機當前的數據 (empty list or set) [root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 shutdown [root@host52 ~]# cd /var/lib/redis/6379/ [root@host52 6379]# rm -rf dump.rdb #刪除52主機原有的rdb文件 [root@host51 ~]# scp /root/dump.rdb root@192.168.4.52:/var/lib/redis/6379/ #把51主機的rdb文件傳給52主機 [root@host52 6379]# ls dump.rdb [root@host52 6379]# ll 總用量 4 -rw-r--r--. 1 root root 118 2月 29 22:24 dump.rdb [root@host52 6379]# /etc/init.d/redis_6379 start #重啟服務 Starting Redis server... [root@host52 6379]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> keys * #再次查看數據,與51主機的數據相同 1) "a" 2) "b" 3) "c"設置存盤間隔時間為120秒10個key改變數據自動存盤 [root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 shutdown [root@host51 ~]# rm -rf /var/lib/redis/6379/* [root@host51 ~]# ls /var/lib/redis/6379/ [root@host51 ~]# vim /etc/redis/6379.conf219 save 900 1220 save 120 10 #120秒內存入10個變量就存入硬盤221 save 60 10000[root@host51 ~]# /etc/init.d/redis_6379 start Starting Redis server... [root@host51 ~]# redis-cli -h 192.168.4.51 -p 6351 192.168.4.51:6351> keys * (empty list or set) 192.168.4.51:6351> set a 1 OK 192.168.4.51:6351> set z 1 OK 192.168.4.51:6351> set x 1 OK 192.168.4.51:6351> set c 1 OK 192.168.4.51:6351> set v 1 OK 192.168.4.51:6351> set b 1 OK 192.168.4.51:6351> set n 1 OK 192.168.4.51:6351> set d 1 OK 192.168.4.51:6351> set s 1 OK 192.168.4.51:6351> set f 1 OK [root@host51 ~]# cd /var/lib/redis/6379/ [root@host51 6379]# ls dump.rdb [root@host51 6379]# ll 總用量 4 -rw-r--r--. 1 root root 147 2月 29 22:13 dump.rdb在52主機恢復數據 [root@host52 ~]# cd /var/lib/redis/6379/ [root@host52 6379]# redis-cli -h 192.168.4.52 -p 6352 shutdown [root@host52 6379]# rm -rf /var/lib/redis/6379/* [root@host52 6379]# ls /var/lib/redis/6379/ [root@host52 6379]# ls /var/lib/redis/6379/ dump.rdb [root@host52 6379]# /etc/init.d/redis_6379 start Starting Redis server... [root@host52 6379]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> keys *1) "d"2) "c"3) "z"4) "x"5) "a"6) "v"7) "n"8) "s"9) "f" 10) "b"(ps:恢復數據失敗的原因: 1.51主機的dump.rbd沒有數據,51主機keys *查看沒有任何數據,如果此時將沒有任何數據的dump.rdb傳給任何主機,恢復數據也會沒有任何數據,停服務時會將當前內存的數據寫入硬盤,關服務會存盤 即使以前有數據也會被覆蓋為空 2.52主機恢復數據之前沒有停掉服務,先拷貝了文件后停了服務 3.沒到存盤時間就直接拷貝數據 )
    AOF
    • AOF介紹
    • Append Only File
    • 追加方式記錄寫操作的文件
    • 記錄redis服務所有寫操作
    • 不斷的將新的寫操作,追加到文件的末尾
    • 默認沒有啟動
    • 使用cat命令可以查看文件內容
    • AOF的優點與缺點
    • AOF的優點
    • 可以靈活設置持久化方式
    • 出現意外宕機時,僅可能丟失一秒的數據
    • AOF的缺點
    • 持久化文件的體積通常會大于RDB方式
    • 執行fsync策略時的速度可能會比RDB方式慢
    • 啟用AOF
    > config set appendonly yes #啟用 > config rewrite #寫進配置文件
    • 備份數據
    • 備份appendonly.aof文件到其他位置
    [root@localhost ~]# cp 數據庫目錄/appendonly.aof 備份目錄
    • 恢復數據
    • 拷貝備份文件到數據庫目錄
    • 啟動redis服務
    [root@localhost ~]# cp 備份目錄/appendonly.aof 數據庫目錄 [root@localhost ~]# /etc/redis/redis_端口 start
    • 優化配置
    • 定義文件名
    appendonly yes #啟用aof,默認no appendfilename "appendonly.aof" #指定文件名
    • AOF文件記錄寫操作的方式
    appendfsync always #實時記錄,并完成磁盤同步 appendfsync everysec #每秒記錄一次,并完成磁盤同步 appendfsync no #寫入aof,不執行磁盤同步
    • 日志文件會不斷增大,何時出發日志重寫?
    - auto-aof-rewrite-min-size 64mb #首次重寫觸發值 - auto-aof-rewrite-percentage 100 #再次重寫,增長百分比
    • 修復AOF文件
    • 把文件恢復到最后一次的正確操作
    [root@localhost ~]# redis-check-aof --fix appendonly.aof #修復aof文件 0x 20d: Expected prefix '*', got: 'k' AOF analyzed: size=543, ok_up_to=525, diff=18 This will shrink the AOF from 543 bytes, with 18 bytes, to 525 bytes Continue? [y/N]: y Successfully truncated AOF #修復成功
    使用AOF文件恢復數據
    • 要求:
  • 啟用AOF
  • 備份AOF文件
  • 刪除數據
  • 使用AOF文件恢復數據
  • 啟用AOF:192.168.4.51:6351> keys * #看查看當前變量1) "s"2) "n"3) "d"4) "z"5) "a"6) "x"7) "b"8) "c"9) "v" 10) "f" 192.168.4.51:6351> save #將數據存到硬盤 OK 192.168.4.51:6351> exit [root@host51 ~]# cd /var/lib/redis/6379/ [root@host51 6379]# ls #查看數據庫目錄下的文件 dump.rdb [root@host51 6379]# redis-cli -h 192.168.4.51 -p 6351 192.168.4.51:6351> config set appendonly yes #啟用AOF OK 192.168.4.51:6351> config rewrite #寫進配置文件 OK 192.168.4.51:6351> exit [root@host51 6379]# ls #再次查看數據庫目錄 appendonly.aof dump.rdb [root@host51 6379]# wc -l appendonly.aof #查看aof文件的行數,記錄的是寫操作的記錄 75 appendonly.aof [root@host51 6379]# cat appendonly.aof #查看文件內容備份AOF文件 51主機: 192.168.4.51:6351> keys *1) "s"2) "n"3) "d"4) "z"5) "a"6) "x"7) "b"8) "c"9) "v" 10) "f" 192.168.4.51:6351> set k 333 #新存入數據 OK 192.168.4.51:6351> set k1 333 OK 192.168.4.51:6351> set k2 333 OK 192.168.4.51:6351> set k3 333 OK 192.168.4.51:6351> set k4 333 OK 192.168.4.51:6351> set k5 333 OK 192.168.4.51:6351> set k6 333 OK 192.168.4.51:6351> keys *1) "s"2) "n"3) "a"4) "k6"5) "k"6) "c"7) "v"8) "d"9) "k3" 10) "k1" 11) "z" 12) "x" 13) "k2" 14) "b" 15) "k4" 16) "k5" 17) "f" [root@host51 ~]# cd /var/lib/redis/6379/ [root@host51 6379]# ls appendonly.aof dump.rdb [root@host51 6379]# cp appendonly.aof /root [root@host51 6379]# ls /root appendonly.aof [root@host51 6379]# scp /root/appendonly.aof root@192.168.4.52:/root52主機:[root@host52 ~]# redis-cli -h 192.168.4.52 -p 6352 shutdown [root@host52 ~]# cd /var/lib/redis/6379/ [root@host52 6379]# ls dump.rdb [root@host52 6379]# rm -rf * #為了讓實驗看的更加清晰,可以先刪除rdb文件,清空數據庫目錄 [root@host52 6379]# ls [root@host52 6379]# vim /etc/redis/6379.conf 673 appendonly yes677 appendfilename "appendonly.aof" AOF文件默認名稱 [root@host52 6379]# cp /root/appendonly.aof ./ [root@host52 6379]# ls appendonly.aof [root@host52 6379]# /etc/init.d/redis_6379 start Starting Redis server... [root@host52 6379]# redis-cli -h 192.168.4.52 -p 6352 192.168.4.52:6352> keys *1) "c"2) "k"3) "s"4) "b"5) "z"6) "k2"7) "k1"8) "v"9) "x" 10) "f" 11) "k5" 12) "a" 13) "k6" 14) "d" 15) "n" 16) "k4" 17) "k3" 192.168.4.52:6352> save OK[root@host52 6379]# ls appendonly.aof(記錄寫操作) dump.rdb(實現數據永久存儲)使用aof文件恢復數據[root@host51 6379]# vim appendonly.aof #手動在aof文件結尾添加幾行 ks 1111 [root@host51 6379]# redis-cli -h 192.168.4.51 -p 6351 shutdown #重啟 [root@host51 6379]# /etc/init.d/redis_6379 start Starting Redis server... [root@host51 6379]# redis-cli -h 192.168.4.51 -p 6351 #進入數據庫失敗 Could not connect to Redis at 192.168.4.51:6351: Connection refused Could not connect to Redis at 192.168.4.51:6351: Connection refused not connected> exit [root@host51 6379]# ss -nutlp | grep redis-server #此時查看端口也失敗 [root@host51 6379]# redis-check-aof --fix appendonly.aof #修復aof文件 0x 20d: Expected prefix '*', got: 'k' AOF analyzed: size=543, ok_up_to=525, diff=18 This will shrink the AOF from 543 bytes, with 18 bytes, to 525 bytes Continue? [y/N]: y Successfully truncated AOF #修復成功 [root@host51 6379]# cat appendonly.aof #再次查看aof文件,發現手寫的幾行被刪除 [root@host51 6379]# /etc/init.d/redis_6379 start #再次啟動服務,此時可能會報錯,已經存在了pid文件,只要刪除再重新啟動即可 /var/run/redis_6379.pid exists, process is already running or crashed [root@host51 6379]# rm -rf /var/run/redis_6379.pid [root@host51 6379]# /etc/init.d/redis_6379 start Starting Redis server... [root@host51 6379]# redis-cli -h 192.168.4.51 -p 6351 192.168.4.51:6351> keys *1) "z"2) "d"3) "n"4) "k"5) "k5"6) "c"7) "k4"8) "k3"9) "v" 10) "k2" 11) "b" 12) "x" 13) "s" 14) "k6" 15) "f" 16) "a" 17) "k1"

    數據類型

    string字符串

    • 字符串操作

    設置key及值,過期時間可以使用秒或毫秒為單位

    - set key value [ex seconds] [px milliseconds] [nx|xx]

    從偏移量開始復寫key的特定位的值

    - setrange key offset value - >set first "hello world" - >setrange first 6 "Redis" #改寫為hello Redis

    統計字串長度

    - strlen key - >strlen first

    存在則追加,不存在則創建key以及value,返回key長度

    - append key value - >append myname tian

    對key所存儲字串,設置或清除特定偏移量上的位(bit)
    value值可以為1或者0,offset為0~2^32之間
    key不存在,則創建新key

    - setbit key offset value - >setbit bit 0 1 #設置bit第0位為1 - >setbit bit 1 0 #設置bit第1位為0

    統計字串中被設置為1的比特位數量

    - bitcount key - >setbit bits 0 1 #0001 - >setbit bits 3 1 #1001 - >bitcount bits #結果為2- >setbit peter 100 1 #網站上線100天用戶登錄了一次 - >setbit peter 105 1 #網站上線105天用戶登錄了一次 - >bitcount peter
    • 場景說明
    • 記錄網站用戶上線頻率,例如用戶A上線了多少天等類似的數據
    • 如用戶在某天上線,則使用setbit,以用戶名為key,將網站上線日為offset,并在該offset上設置為1,最后計算用戶總上線次數時,使用bitcount用戶名即可。
    • 這樣,即使網站運行10年,每個用戶僅占用10*365比特位即456字節。

    將key中的值減1,key不存在則先初始化為0,再減1

    - decr key - >set test 10 - >decr test

    將key中的值,減去decrement

    - decrby key decrement - >set count 100 - >decrby count 20

    返回key存儲的字符串值,若key不存在則返回null
    若key的值不是字串,則返回錯誤,get只能處理字串

    - get key

    返回字串值中的子字串,截取范圍為start和end
    負數偏移量表示從末尾開始計數,-1表示最后一個字符,-2表示倒數第二個字符

    - >set first "hello,the world" - >getrange first -5 -1 - >getrange first 0 4

    將key的值加1,如果key不存在,則初始化為0后再加1
    主要應用為計數器

    - >set page 20 - >incr page

    將key的值增加increment

    - incrby key increment

    為key中所存儲的值加上浮點數增量increment

    - incrbyfloat key increment - >set num 16.1 - >incrbyfloat num 1.1

    獲取一個或者多個key的值,空格分隔,具有原子性

    - mget key [key...]

    設置多個key及值,空格分隔,具有原子性

    - mset key value [key value...] 字符類型string相關命令對存入的數據進行修改例: 192.168.4.51:6351> set x 11 OK 192.168.4.51:6351> ttl x (integer) -1 192.168.4.51:6351> set y 99 ex 10 #ex秒 OK 192.168.4.51:6351> ttl y (integer) 5 192.168.4.51:6351> ttl y (integer) -2 192.168.4.51:6351> set y 99 px 10 #px毫秒 OK 192.168.4.51:6351> ttl y (integer) -2 192.168.4.51:6351> set x 33 OK 192.168.4.51:6351> get x "33" 192.168.4.51:6351> set x 22 nx #新存入的變量不存在就賦值 (nil) 192.168.4.51:6351> set x 22 xx #變量存在就賦新的值,不存在就不賦值 OK 192.168.4.51:6351> get x "22"修改變量的值 192.168.4.51:6351> set tel ascdef OK 192.168.4.51:6351> get tel "ascdef" 192.168.4.51:6351> SETRANGE tel 0 ABC #從第一個字符開始替換 (integer) 6 192.168.4.51:6351> get tel "ABCdef" 192.168.4.51:6351> SETRANGE tel 1 ** (integer) 6 192.168.4.51:6351> get tel "A**def"統計變量值的個數 192.168.4.51:6351> STRLEN tel (integer) 6 192.168.4.51:6351> get tel "A**def"添加新值 192.168.4.51:6351> get tel "A**def" 192.168.4.51:6351> APPEND tel cc (integer) 8 192.168.4.51:6351> get tel "A**defcc" 192.168.4.51:6351> APPEND telb cc #沒有該變量就創建新的變量并賦值 (integer) 2 192.168.4.51:6351> get telb "cc"位存儲方式存儲數據,目的節省存儲空間 1G=1024M 1M=1024K 1K=1024bytes 1byte=8位 1位=0或1192.168.4.51:6351> setbit tian 1 1 (integer) 0 192.168.4.51:6351> setbit tian 2 0 (integer) 0 192.168.4.51:6351> setbit tian 3 1 (integer) 0 192.168.4.51:6351> setbit tian 4 1 (integer) 0 192.168.4.51:6351> setbit tian 5 0 (integer) 0 192.168.4.51:6351> setbit tian 6 1 (integer) 0 192.168.4.51:6351> setbit tian 7 1 (integer) 0 192.168.4.51:6351> setbit tian 8 0 (integer) 0 192.168.4.51:6351> setbit tian 9 0 (integer) 0 192.168.4.51:6351> bitcount tian (integer) 5自減 192.168.4.51:6351> get x "22" 192.168.4.51:6351> type x string 192.168.4.51:6351> DECR x (integer) 21 192.168.4.51:6351> DECR x (integer) 20 192.168.4.51:6351> DECR x (integer) 19 192.168.4.51:6351> DECR x (integer) 18 192.168.4.51:6351> get x "18"自加 192.168.4.51:6351> get x "18" 192.168.4.51:6351> INCR x (integer) 19 192.168.4.51:6351> INCR x (integer) 20 192.168.4.51:6351> INCR x (integer) 21 192.168.4.51:6351> incrby x 11 (integer) 32 192.168.4.51:6351> INCRBYFLOAT x 5.2 "37.2"獲取變量值的部分數據 192.168.4.51:6351> get tel "A**defcc" 192.168.4.51:6351> GETRANGE tel -2 -1 "cc" 192.168.4.51:6351> GETRANGE tel 0 2 "A**"

    list列表

    • list列表簡介
    • Redis的list是一個字符隊列
    • 先進后出
    • 一個key可以有多個值
    • list列表操作
      將一個或多個值value插入到列表key的表頭
      key不存在,則創建key
    - lpush key value [value...] - >lpush list a b c #list值依次為c、b、a

    從開始位置讀取key的值到stop結束

    - lrange key start stop - >lrange list 0 2 #從0位開始,讀到2位為止 - >lrange list 0 -1 #從開始讀到結束為止 - >lrange list 0 -2 #從開始讀到倒數第2位為止

    移除并返回列表頭元素數據,key不存在則返回nil

    - lpop key - >lpop list #刪除表頭元素,可以多次執行

    返回列表key的長度

    - llen key

    返回列表中第index個值

    - lindex key index - >lindex key 0; lindex key 2; lindex key -2

    將key中index位置的值修改為value

    - lset key index value - >lset list 3 test #將list中第3個值修改為test

    將value插入到key的末尾

    - rpush key value [value...] - >rpush list3 a b c #list3值為a b c - >rpush list3 d #末尾插入d

    刪除并返回key末尾的值

    - rpop key - >rpush list4 a b c #list4值為a b c - >rpop list4 #刪除末尾的c,并返回刪除的值 lpush:192.168.4.51:6351> lpush hostname tian haha aaa heihei (integer) 4 192.168.4.51:6351> keys * 1) "hostname" 192.168.4.51:6351> type hostname list 192.168.4.51:6351> get hostname (error) WRONGTYPE Operation against a key holding the wrong kind of value 192.168.4.51:6351> LRANGE hostname 0 -1 1) "heihei" 2) "aaa" 3) "haha" 4) "tian" 192.168.4.51:6351> LRANGE hostname 0 2 #輸出前三個 1) "heihei" 2) "aaa" 3) "haha" 192.168.4.51:6351> LRANGE hostname -2 -1 #輸出后兩個 1) "haha" 2) "tian"lpop:192.168.4.51:6351> lpop hostname #刪除變量,默認刪除當前第一個,不能指定移除的變量 "heihei" 192.168.4.51:6351> LRANGE hostname 0 -1 1) "aaa" 2) "haha" 3) "tian"llen: 192.168.4.51:6351> llen hostname #查看變量長度 (integer) 3 192.168.4.51:6351> LRANGE hostname 0 -1 #查看list的變量,0代表第一個變量值,-1代表最后一個變量值,-2代表倒數第二個變量值,0 -1代表所有的變量值 1) "aaa" 2) "haha" 3) "tian" 192.168.4.51:6351> lpush hostname AAA BBB (integer) 5 192.168.4.51:6351> LRANGE hostname 0 -1 1) "BBB" 2) "AAA" 3) "aaa" 4) "haha" 5) "tian"lset:192.168.4.51:6351> lset hostname 0 ZZZ OK 192.168.4.51:6351> LRANGE hostname 0 -1 1) "ZZZ" 2) "AAA" 3) "aaa" 4) "haha" 5) "tian" 192.168.4.51:6351> lset hostname -1 XXX OK 192.168.4.51:6351> LRANGE hostname 0 -1 1) "ZZZ" 2) "AAA" 3) "aaa" 4) "haha" 5) "XXX"lindex:192.168.4.51:6351> lindex hostname 2 "aaa" 192.168.4.51:6351> lindex hostname -2 "haha"rpush:192.168.4.51:6351> LRANGE hostname 0 -1 1) "ZZZ" 2) "AAA" 3) "aaa" 4) "haha" 5) "XXX" 192.168.4.51:6351> rpush hostname 111 444 333 (integer) 8 192.168.4.51:6351> LRANGE hostname 0 -1 1) "ZZZ" 2) "AAA" 3) "aaa" 4) "haha" 5) "XXX" 6) "111" 7) "444" 8) "333"rpop:192.168.4.51:6351> rpop hostname #默認刪除最后一個變量 "333" 192.168.4.51:6351> LRANGE hostname 0 -1 1) "ZZZ" 2) "AAA" 3) "aaa" 4) "haha" 5) "XXX" 6) "111" 7) "444" 192.168.4.51:6351> lpop hostname "ZZZ" 192.168.4.51:6351> LRANGE hostname 0 -1 1) "AAA" 2) "aaa" 3) "haha" 4) "XXX" 5) "111" 6) "444"

    hash表

    • hash表簡介
    • 是一個string類型的filed和value的映射表
    • 一個key可以對應多個filed,一個filed對應一個value
    • 將一個對象存儲為hash類型,較于每個字段都存儲成string類型更能節省內存
    • hash表操作
      將hash表中filed值設置為value
    - hset key filed value - >hset site google 'www.g.cn' - >hset site baidu 'www.baidu.com'

    獲取hash表中filed的值

    - hget key filed - >hget site google

    同時給hash表中的多個filed賦值

    - hmset key filed value [filed value...] - >hmset site google www.g.cn baidu www.baidu.cn

    返回hash表中多個filed的值

    - hmget key filed [filed...] - >hmget site google baidu

    返回hash表中所有filed名稱

    - hkeys key - >hmset site google www.g.cn baidu www.baidu.com - >hkeys site

    返回hash表中所有key名和對應的值列表

    - hgetall key

    返回hash表中所有key的值

    - hvals site

    刪除hash表中多個filed的值,不存在則忽略

    - hdel key filed [filed...] - >hdel site google baidu hset,hget,hkeys:192.168.4.51:6351> hset site tian www.tian.com (integer) 1 192.168.4.51:6351> keys * 1) "site" 192.168.4.51:6351> type site hash 192.168.4.51:6351> hkeys site 1) "tian" 192.168.4.51:6351> hget site tian "www.tian.com"hmset,hmget:192.168.4.51:6351> hmset site aa www.aaa.com qq www.qq.com ss www.ss.com OK 192.168.4.51:6351> hkeys site 1) "tian" 2) "aa" 3) "qq" 4) "ss" 192.168.4.51:6351> hget site qq "www.qq.com" 192.168.4.51:6351> hmget site tian aa 1) "www.tian.com" 2) "www.aaa.com"hvals:192.168.4.51:6351> hvals site 1) "www.tian.com" 2) "www.aaa.com" 3) "www.qq.com" 4) "www.ss.com"hgetall:192.168.4.51:6351> hgetall site 1) "tian" 2) "www.tian.com" 3) "aa" 4) "www.aaa.com" 5) "qq" 6) "www.qq.com" 7) "ss" 8) "www.ss.com"hdel:192.168.4.51:6351> hdel site qq (integer) 1 192.168.4.51:6351> hkeys site 1) "tian" 2) "aa" 3) "ss"

    總結

    以上是生活随笔為你收集整理的NoSQL(三):主从复制的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲一区二区免费视频 | 中日韩av电影 | 国产视频91在线 | 亚洲成人av一区二区 | 欧美少妇喷水 | 亚洲av成人一区二区国产精品 | 国产精品网站在线观看 | 亚洲综合图色 | 成年人看的黄色片 | 国产激情在线看 | 性欧美videossex精品 | 欧美视频亚洲视频 | 中文精品在线观看 | 日韩福利视频在线观看 | 在线成人免费电影 | 天天摸天天操 | 91午夜免费视频 | 吃瓜网今日吃瓜 热门大瓜 色婷在线 | 久久综合中文字幕 | www国产无套内射com | 最新地址av| 亚洲国产精品激情在线观看 | 精品一区二区三区免费看 | 国产秋霞| 国产精品视频 | 黄色靠逼视频 | 亚洲喷水 | 欧美另类视频 | 久久久久亚洲av无码专区体验 | 色综合久久88色综合天天6 | 欧美囗交做爰视频 | 高清一区二区三区四区 | a国产在线 | 91射| 国产无码精品在线观看 | 鲁鲁狠狠狠7777一区二区 | 一级片高清| 超碰国产91 | 国产专区欧美专区 | 男人天堂网在线视频 | 无套在线观看 | 天堂在线观看视频 | 500部大龄熟乱视频 亚洲乱码精品 | 伊人黄色片 | 亚洲精品白虎 | 97超碰精品 | 美女的诞生免费观看在线高清 | 波多野结衣av中文字幕 | 国产成人在线视频观看 | 美女毛毛片| 亚洲18在线看污www麻豆 | 91在线网址 | 夫の上司に犯波多野结衣853 | 久久99精品久久久久久三级 | www成人免费| 美美女高清毛片视频免费观看 | 日韩视频免费在线 | 欧美丝袜视频 | av大全网站 | 中国毛片在线观看 | 亚日韩| 狠狠爱视频| 亚洲人 女学生 打屁股 得到 | 久操国产视频 | 欧美日本一区 | 日本变态折磨凌虐bdsm在线 | 欧美在线一级视频 | 日本大尺度电影免费观看全集中文版 | 欧美一区二区三区视频在线观看 | 看黄色a级片 | 天堂欧美城网站网址 | 日本一区二区三区视频在线播放 | 国产精品成人国产乱 | 日韩av资源网| 欧美一级淫片 | 18男女无套免费视频 | 亚洲成年人网 | 精品久久免费视频 | 亚洲欧美日本一区 | 肉感丰满的av演员 | 日韩一级片中文字幕 | 国产伦精品一区二区三区四区视频 | 色呦呦在线观看视频 | 深爱综合网 | 欧美成人片在线观看 | 国产成a人亚洲精v品无码 | 99久视频| 男人与雌性宠物交啪啪 | 国产精品久久久久久99 | 丝袜老师办公室里做好紧好爽 | 91色视频| 亚洲不卡电影 | 欧美专区在线播放 | 亚洲成a人在线观看 | 天天网综合 | 国产伦精品一区二区三区免费 | 国产精品自拍偷拍 | av久色| a√国产|