五分鐘教學妹學會redis實戰-這篇文章讓我輕松拿下阿里offer,建議收藏
簡介: CSDN博客專家,一線互聯網從業人員,架構師,云計算運維講師,互聯網連續創業者,從16年開始做直播教學,幾年來,陸續幫助近3000+小伙伴高薪就業。歡迎各位小伙伴加我咨詢相關問題,帶你走出迷茫;
座右銘: 我不認為自己是最優秀的,但我可以是最努力的
正文
Redis概述和安裝Redis
Redis 是完全開源的,遵守 BSD 協議,是一個高性能的 key-value 數據庫。
Redis 與其他 key - value 緩存產品有以下三個特點:
Redis支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。
Redis不僅僅支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
Redis支持數據的備份,即master-slave模式的數據備份。
目前官網上推薦下載的版本是:6.2.3
支持存儲的數據類型有:
String(字符串,包含整數),
List(列表),
Hash(關聯數組),
Sets(集合),
Sorted Sets(有序集合)
Bitmaps(位圖), HyperLoglog。
100萬較小的鍵存儲字符串,大概消耗100M內存
由于Redis是單線程,如果服務器主機上有多個CPU,只有一個能夠使用,但并不意味著CPU會成為瓶頸,因為Redis是一個比較簡單的K-V數據存儲,CPU通常不會成為瓶頸的
在常見的linux服務器上,500K(50萬)的并發,只需要一秒鐘處理,如果主機硬件較好的情況下,每秒鐘可以達到上百萬的并發
面試題: redis和memcache的區別
關于reids和memcache的區別,我在專欄《運維面試寶典》里有些可以跳轉閱讀。
這里可以列舉兩條:
(1)【持久化能力】Redis支持持久化,memcache也支持但一般不做持久化(重啟丟失數據)
(2)【數據類型支持】Redis類型較多(5種數據類型,string、list、hash、set、sorted set),memcache只能是字符串
在安裝Remi repository源時,需要依賴epel源,因此先安裝epel源
[root@itlaoxin17 ~]# yum -y install epel-release
安裝remi repository源
[root@itlaoxin~]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
使用remi repository源安裝Redis
[root@itlaoxin ~]# yum --enablerepo=remi install -y redis #選用remi源進行安裝redis
啟動Redis
[root@itlaoxin ~]# systemctl start redis [root@itlaoxin-17 ~]# netstat -antup | grep redis tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 68199/redis-server tcp6 0 0 ::1:6379 :::* LISTEN 68199/redis-server 注:redis默認監聽6379端口
redis基本操作
基本操作
[root@itlaoxin ~]# redis-cli 選項: -h
舉例1:設置鍵system的值為centos
[root@itlaoxin ~]# redis-cli -h 127.0.0.1 127.0.0.1:6379> set system centos #set用于創建鍵值 OK 127.0.0.1:6379> get system #get 后加鍵,可以查看鍵中的值 "centos"
舉例2: 定義一個鍵name值為zhangsan,并設置過期時間為60秒。
127.0.0.1:6379> set name itlaoxin EX 60 OK 127.0.0.1:6379> get name "itlaoxin"
舉例3,開啟redis用戶認證服務
[root@itlaoxin ~]# vim /etc/redis.conf 改:901 # requirepass foobared #啟用此項,并指定密碼即可。 為:901 requirepass jfvip123 #指定密碼為jfvip123 [root@itlaoxin ~]# systemctl restart redis #重啟服務 [root@itlaoxin ~]# iptables -F #關閉防火墻 測試用戶認證功能: [root@itlaoxin ~]# redis-cli #登陸測試 127.0.0.1:6379> get system (error) NOAUTH Authentication required. #發現報錯, 需要用戶密碼認證 127.0.0.1:6379> auth jfvip123 #輸入密碼 OK 127.0.0.1:6379> get system "centos"
配置reids持久化
1. redis持久化介紹
redis持久化概述
redis持久化主要有兩種 ROD和AOF,也可以把兩種混合起來,從reids4.0后引入的方式。
RDB實現原理:
RDB類似于快照,在某個時間點,將 Redis 在內存中的數據庫狀態(數據庫的鍵值對等信息)保存到磁盤里面。RDB 持久化功能生成的 RDB 文件是經過壓縮的二進制文件。
AOF:
保存 Redis 服務器所執行的所有寫操作命令來記錄數據庫狀態,并在服務器啟動時,通過重新執行這些命令來還原數據集。
AOF默認是關閉的,可以通過appendonley yes 開啟
AOF 持久化功能的實現可以分為三個步驟:命令追加、文件寫入、文件同步。
2. 配置文件中配置與RDB相關的參數
[root@itlaoxin ~]# vim /etc/redis.conf #默認參數就夠用了 235 stop-writes-on-bgsave-error yes #在進行快照備份時,一旦發生錯誤的話是否停止。 241 rdbcompression yes #RDB文件是否使用壓縮,壓縮會消耗CPU。 250 rdbchecksum yes #是否對RDB文件做校驗碼檢測,此項定義在redis啟動時加載RDB文件是否對文件檢查校驗碼,在redis生成RDB文件是會生成校驗信息,在redis再次啟動或裝載RDB文件時,是否檢測校驗信息。 253 dbfilename dump.rdb #定義RDB文件的名稱。 263 dir /var/lib/redis #定義RDB文件存放的目錄路徑。
實戰 搭建redis主從架構
原理:
Redis的主從復制是自動進行的,并不需要用戶的介入,slave端會自動連接master并進行數據同步。如果同步連接時slave端短暫的與master端斷開了連接,那連接恢復后slave端會與master端進行一次同步。從而保證數據一致。
拓撲圖:
配置itlaoxin17為redis主
[root@itlaoxin-17 ~]# rm -rf /var/run/yum.pid [root@itlaoxin ~]# yum -y install epel-release #安裝epel源。 [root@itlaoxin ~]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安裝remi源。 [root@itlaoxin ~]# yum --enablerepo=remi install -y redis #安裝Redis。
[root@itlaoxin-17 ~]# vim /etc/redis.conf: 改:75 bind 127.0.0.1 為:75 bind 0.0.0.0 #redis監聽的地址,默認監聽在127.0.0.1地址上,改為0.0.0.0地址或192.168.1.17 改:507 # requirepass foobared #啟用此項,并指定密碼即可。 為:507 requirepass jfxinvip123 #指定密碼為jfxinvip123
重啟服務
[root@itlaoxin ~]# systemctl restart redis #重啟服務 [root@itlaoxin ~]# iptables -F
[root@itlaoxin ~]# yum -y install epel-release #安裝epel源。 [root@itlaoxin ~]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm #安裝remi源。 [root@itlaoxin ~]# yum --enablerepo=remi install -y redis #安裝Redis。
[root@itlaoxin ~]# vim /etc/redis.conf #修改第286行。 改: 478# replicaof
[root@itlaoxin ~]# redis-cli #登錄redis。 127.0.0.1:6379> info replication # Replication role:slave #角色: slave master_host:192.168.1.17 #主服務器IP。 master_port:6379 #主服務器端口 master_link_status:up ##主服務器連接狀態為up,說明已經主從同步上了 master_last_io_seconds_ago:8 master_sync_in_progress:0 slave_repl_offset:112 slave_priority:100 slave_read_only:1 #成為從服務以后,1表示該服務器為只讀。
[
root@itlaoxin ~]# redis-cli #登錄Redis。 127.0.0.1:6379>AUTH jfxinvip123 OK 127.0.0.1:6379> info replication # Replication role:master #角色:master。 connected_slaves:1 #從服務器數量。 slave0:ip=192.168.1.18,port=6379,state=online,offset=476,lag=0 #從服務器信息。 ...
登錄Redis主服務,并創建一個user鍵。 [root@itlaoxin-17 ~]# redis-cli 127.0.0.1:6379> AUTH jfxinvip123 OK 127.0.0.1:6379> set user itlaoxin OK 8、登錄Redis從服務,獲取在主服務上創建的user鍵。 [root@itlaoxin ~]# redis-cli 127.0.0.1:6379> get user #可以查看到鍵值,說明主從數據同步成功。 "itlaoxin"
實戰二: 使用sentinel實現redis集群高可用
實驗拓撲:
重新開啟3臺全新服務器,一定是全新的3臺服務器,如果之前的實驗環境上做,會出現配置混亂。每臺服務器上分別配置redis和sentinel。其中1個master和2個slave。如下圖所示:
[root@itlaoxin ~]# yum -y install epel-release [root@itlaoxin ~]# yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm [root@itlaoxin ~]# yum --enablerepo=remi install -y redis #安裝Redis
[root@itlaoxin17 ~]# vim /etc/redis.conf 改:675 bind 127.0.0.1 為:75 bind 0.0.0.0 #redis監聽的地址,改為0.0.0.0表示在所有網卡接口上進行監聽 改:94 protected-mode yes 為:94 protected-mode no #關閉允protected-mode,許外網訪問redis服務器 [root@itlaoxin17 ~]# systemctl restart redis #重啟服務 [root@itlaoxin17 ~]# iptables -F
[root@itlaoxin18 ~]# vim /etc/redis.conf #修改第286行。 改:75 bind 127.0.0.1 為:75 bind 0.0.0.0 #redis監聽的地址,改為0.0.0.0表示在所有網卡接口上進行監聽 改:94 protected-mode yes 為: 94 protected-mode no 改: 477 # replicaof
[root@itlaoxin19 ~]# redis-cli #登錄redis。 127.0.0.1:6379> info replication # Replication role:slave #角色:slave。 master_host:192.168.1.17 #主服務器IP。 master_port:6379 #主服務端口。 master_link_status:up #主服務器連接狀態為up,說明已經主從同步上了 到此,1主2從的redis主從復制架構已經搭建成功,下面開始配置sentinel架構構。
[root@itlaoxin17 ~]# vim /etc/redis-sentinel.conf 改:17 # protected-mode no 為:17 protected-mode no 改:26 daemonize no :26 daemonize yes 改:84 sentinel monitor mymaster 127.0.0.1 6379 2 為:84 sentinel monitor mymaster 192.168.1.17 6379 2 改:113 sentinel down-after-milliseconds mymaster 30000 #默認單位是毫秒,配成10秒 為:113 sentinel down-after-milliseconds mymaster 10000 改:146 sentinel failover-timeout mymaster 180000 為:146 sentinel failover-timeout mymaster 60000 如果在該時間(ms)內未能完成failover操作,則認為該failover失敗
[root@itlaoxin17 ~]# scp /etc/redis-sentinel.conf 192.168.1.18:/etc/redis-sentinel.conf [root@itlaoxin17 ~]# scp /etc/redis-sentinel.conf 192.168.1.19:/etc/redis-sentinel.conf 11111111111111111111111111111
[root@itlaoxin17 ~]# systemctl start redis && systemctl start redis-sentinel [root@itlaoxin18 ~]# systemctl start redis && systemctl start redis-sentinel [root@itlaoxin19 ~]# systemctl start redis && systemctl start redis-sentinel 一定要關閉selinux
查看當前主從狀態 [root@itlaoxin17 ~]# redis-cli -h 192.168.1.18 192.168.1.18:6379> info replication # Replication role:slave master_host:192.168.1.17 master_port:6379 [root@itlaoxin17 ~]# systemctl stop redis #在itlaoxin17上關閉master [root@itlaoxin-17 ~]# redis-cli -h 192.168.1.19 192.168.1.19:6379>info replication # Replication role:slave master_host:192.168.1.8 #master已經轉移到itlaoxin18上了 master_port:6379
[root@itlaoxin17 ~]# systemctl start redis [root@itlaoxin17 ~]# redis-cli -h 192.168.1.17 192.168.1.17:6379> info replication # Replication role:slave master_host:192.168.1.18 #主redis還是itlaoxin18,并不會因為itlaoxin17恢復成功后,就主動讓出權限。 這樣可以避免再次回切時,發生服務中斷。 #登錄主redis上查看從節點信息 [root@itlaoxin-19 etc]# redis-cli 127.0.0.1:6379> info replication # Replication role:slave master_host:192.168.1.18 master_port:6379 master_link_status:up master_last_io_seconds_ago:1 master_sync_in_progress:0 slave_repl_offset:33537 slave_priority:100 slave_read_only:1 replica_announced:1 connected_slaves:0 master_failover_state:no-failover master_replid:49a65486e84936ed563d6796f253945b492660a8 master_replid2:7514fbacc143345f567dd8e93a081592b24e0c9a master_repl_offset:33537 second_repl_offset:2702 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:163 repl_backlog_histlen:33375 127.0.0.1:6379>
[root@itlaoxin17 ~]# redis-cli -h 192.168.1.17 -p 26379 #查看Sentinel信息。 [root@itlaoxin18 ~]# redis-cli -h 192.168.1.17 -p 26379 192.168.1.17:26379> info sentinel # Sentinel sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=mymaster,status=sdown,address=192.168.1.17:6379,slaves=0,sentinels=1 192.168.1.17:26379> exit 14
互聯網老辛,2021年立下個flag,每天直播分享技術5小時,持續10000小時,也就是2000天
今天是持續直播教學的第 110 / 2000天。
求、求評論、求。
有任何疑問都可以在評論區詢問,有問必答~
本文,以后沒準能用到哦~
5G教育 Redis
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。