redis6安裝注意點
我們課程里忽略了,就不去安裝了,僅僅只提供安裝文檔,redis6的安裝其實和redis5安裝差不多,只是需要注意gcc的版本需要提高,不然編譯會出錯。
參考慕課網(wǎng)手記地址:https://www.imooc.com/article/313200
acl權(quán)限策略
基礎(chǔ)概念
不知道大家有沒有聽過acl,zookeeper中也有,acl就是access control list,權(quán)限控制列表,和平時接觸的管理系統(tǒng)的權(quán)限是一樣的,可以限制不同角色的操作權(quán)。
在redis6中,我們可以設(shè)置不同的用戶,對他們進(jìn)行授權(quán)命令,控制可讀可寫,限制訪問緩存key的前綴等。這樣可以更加提高redis6的數(shù)據(jù)安全性。由于是對于一些公司的生產(chǎn)庫,可以讓很多人去連接查看,就特別有用。但是一般來說都是只有運維或者redis工程師才能訪問的。
大家想一想,早期版本通過requirepass設(shè)置密碼,這個不去設(shè)置,你的服務(wù)器很有可能被攻擊,這個我們架構(gòu)班的同學(xué)有遇到過,被勒索比特幣,或者成為肉雞挖礦。所以這個密碼肯定要設(shè)置。
ACL 存儲模式
acl的權(quán)限的存儲模式可以配置到redis.conf中,也可以外部文件aclfile,我個人偏好后者,這也是官方推薦的方式。(因為aclfile文件發(fā)生修改只需要重載acl即可,而conf方式需要重啟redis)
我們可以直接在命令行中創(chuàng)建用戶去權(quán)限,然后再把用戶保存到conf或者aclfile中。命令如下:
# 將ACL權(quán)限持久化到redis.conf
config rewrite
# 將ACL權(quán)限持久化到users.acl
acl save
實操演練
-
開啟aclfile,指定路徑
-w1117 -
創(chuàng)建權(quán)限acl文件(注意:需要他前創(chuàng)建acl空文件,否則重啟redis會報錯)
touch /usr/local/redis/users.acl
-w948
重啟redis并且進(jìn)入客戶端
查看進(jìn)程
./redis-cli shutdown
./redis-server redis.conf
./redis-cli
auth default # 默認(rèn)用戶無密碼
或者
./redis-cli # 可以直接進(jìn)入
ACL的使用
- 查看acl命令幫助(學(xué)習(xí)一個新東西,基本上他們都會有幫助文檔的。像在linux中,大多都是help,就有一大堆的命令提示,后面還有英文的解釋,這是最直接的學(xué)習(xí)方式)
acl help
相信但凡有一些經(jīng)驗的,這些其實都應(yīng)該看得懂
1)ACL:命令參數(shù),要以 ACL 開頭
2)LOAD:重新加載acl文件,手動修改acl文件后,需要讓redis服務(wù)重新加載,才能生效
3)SAVE:保存當(dāng)前用戶權(quán)限配置到acl文件
4)LIST:展示用戶權(quán)限的詳細(xì)信息
5)USERS:展示所有用戶名
6)SETUSER:設(shè)置或者修改用戶
7)GETUSER:獲得用戶全新信息
8)DELUSER:刪除用戶以及權(quán)限
9)CAT:展示所有權(quán)限分類,不同的操作歸類不同
10)CAT <某分類名>:展示某分類具體包含哪些操作
11)GENPASS:生成密碼
12)WHOAMI:當(dāng)前登錄者
13)LOG:日志
-
默認(rèn)沒有配置的時候,會有一個default用戶,
on
代表開啟,off
代表禁用。default
為用戶名,后面的內(nèi)容為ACL規(guī)則描述,~*
表示所有key,+@all
表示所有命令。所以這個表示用戶default開啟狀態(tài),并且,沒有密碼而且可以訪問所有命令以及所有數(shù)據(jù)。
-w568 -
獲得所有的用戶名
-w425 -
當(dāng)前登錄用戶是誰
-w420 -
查看命令的分類:
-
acl cat
:顯示所有的命令類別-w381 -
查某個類別下有哪些操作,就比如如下危險操作,這些命令都是危險的,對當(dāng)前redis庫可能會造成影響 -w564
-
創(chuàng)建用戶
現(xiàn)在我們來創(chuàng)建一下用戶
-
創(chuàng)建或者修改用戶,用戶名區(qū)分大小寫,但是不建議把同樣的用戶名分為大小寫不同的兩個
# 新增默認(rèn)所有權(quán)限的用戶 ACL SETUSER imooc on >123456 ~* +@all # 新增用戶itzixi,密碼123456,只能允許訪問order前綴的key,可以使用set和get和acl命令 ACL SETUSER itzixi on >123456 ~order* +get +set +acl
這個時候打開acl文件是空的,需要執(zhí)行保存命令
-
保存命令到aclfile
acl save
-w1546
切換用戶進(jìn)行測試
-
切換到itzixi用戶,并且測試,他只能set和get,order前綴的key -w1284
-
mget不可用 -w1276
-
mget不可用
為用戶增加類別權(quán)限訪問
-
為用戶itzixi新增某一個類別下的所有操作,比如這個類別就是read類別的所有讀操作:
ACL SETUSER itzixi +@read
-w624-
多了一個read類別
-w1652 -
這個時候可以使用mget操作了:
-w423
-
附
ACL LOAD:我們也可以直接在aclfile中修改或新增ACL權(quán)限,修改之后不會立刻生效,我們可以在redis命令行中執(zhí)行acl load將該aclfile中的權(quán)限加載至redis服務(wù)中。
客戶端緩存 Client Side Cache
這是他的官網(wǎng)地址,有興趣可以看看:
https://redis.io/topics/client-side-caching
我們應(yīng)該都知道,redis作為緩存中間件,目的是為了減少熱點數(shù)據(jù)對數(shù)據(jù)庫的壓力,并且提供更快的訪問速度,redis的性能要比普通數(shù)據(jù)庫快很多。
但是redis也有瓶頸上線,因為請求到redis一定會有網(wǎng)絡(luò)io的損耗,并且也有數(shù)據(jù)的序列化以及反序列化的等等的一些開銷,所以如果在本地把熱數(shù)據(jù)再做一次緩存的話(Guava Cache 進(jìn)程緩存,可能會有不一致的情況),那么可以使得請求性能更好,加速訪問,提升客戶端的響應(yīng)速度了,因為數(shù)據(jù)延遲就降低并且減少了很多嘛。
大家可以想一下,什么場景下可以使用?
其實只要滿足大量的請求,不怎么更改的數(shù)據(jù),都可以。比如數(shù)據(jù)字典,我們的項目中涉及到一些超大型物流車的參數(shù)信息,這些基本上不會變動的,除非有相關(guān)的一些政策改變,那么有些參數(shù)信息就要變更,要不然直接存本地緩存是非常舒服的。
可以看一下這圖,他本質(zhì)上就是基于redis-server服務(wù)端來維系和應(yīng)用后端的關(guān)系,用的pub/sub發(fā)布訂閱的通知機制,如果服務(wù)端緩存發(fā)生更改,那么可以向應(yīng)用后端來推送,讓其更新本地緩存。
其中應(yīng)用是指的我們的部署的項目,調(diào)用端。
了解一下:在Reds6之前的版本,使用的是RESP2協(xié)議,現(xiàn)在是RESP3,這個是REdisSerializationProtocol,是 Redis 服務(wù)端與客戶端之間通信的協(xié)議。
實現(xiàn)客戶端緩存的方式 - 默認(rèn)模式
Redis-server 服務(wù)端會記錄客戶端訪問了哪些key,這客戶端id與key有唯一的映射關(guān)系,當(dāng)其中的key發(fā)生變更時給客戶端發(fā)送失效信息。這種模式會占用服務(wù)端所在服務(wù)器的內(nèi)存。
實現(xiàn)客戶端緩存的方式 - 廣播機制
客戶端訂閱訪問過的key的前綴,當(dāng)符合的key發(fā)生變更就會被redis-server通知(如果變更的key沒有被客戶端緩存,也會通知),由于服務(wù)器端不記錄客戶端訪問的key,所以不會過多占用redis-server端的服務(wù)器內(nèi)存;
在這種模式下,服務(wù)端維護(hù)的是前綴key,而不是默認(rèn)模式的所有key,所以這樣對于內(nèi)存的占用不會很高,只要修改匹配的前綴key,那么訂閱的客戶端都會收到失效key的通知。只不過由于定訂閱的是前綴,他會收到很多的無效通知。
在廣播模式下,只要符合客戶端設(shè)置的key前綴的key發(fā)生新增、修改、刪除、還有過期、淘汰等動作,即使該key沒有被該客戶端緩存,也會收到key的失效消息;
多級緩存
直播過程中提到了多級緩存架構(gòu),可以通過這圖了解一下,更具體的可以做到4層,nginx可以做兩層: