redis安裝與安全設定 centos下redis安全相關
redis
Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體
yum安裝redis
1.yum安裝
#前提得配置好阿里雲yum源,epel源 #檢視是否有redis包 yum list redis
#安裝redis
yum install redis -y
#安裝好,啟動redis
systemctl start redis
2.檢測redis是否工作
redis-cli #redis 客戶端工具 #進入互動式環境後,執行ping,返回pong表示安裝成功 127.0.0.1:6379> ping PONG
原始碼安裝redis,編譯安裝
大家用過yum,是相當省事好用吧,為什麼還要學習原始碼安裝?
有人說編譯安裝效能好?錯
編譯安裝的優勢是:
- 編譯安裝時可以指定擴充套件的module(模組),php、apache、nginx都是一樣有很多第三方擴充套件模組,如mysql,編譯安裝時候,如果需要就定製儲存引擎(innodb,還是MyIASM)
- 編譯安裝可以統一安裝路徑,linux軟體約定安裝目錄在/opt/下面
- 軟體倉庫版本一般比較低,編譯原始碼安裝可以根據需求,安裝最新的版本
1.下載redis原始碼 wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2.解壓縮
tar -zxf redis-4.0.10.tar.gz
3.切換redis原始碼目錄
cd redis-4.0.10.tar.gz
4.編譯原始檔
make
5.編譯好後,src/目錄下有編譯好的redis指令
6.make install 安裝到指定目錄,預設在/usr/local/bin
redis可執行檔案
./redis-benchmark //用於進行redis效能測試的工具 ./redis-check-dump //用於修復出問題的dump.rdb檔案 ./redis-cli //redis的客戶端 ./redis-server //redis的服務端 ./redis-check-aof //用於修復出問題的AOF檔案 ./redis-sentinel //用於叢集管理
啟動redis服務端
啟動redis非常簡單,直接./redis-server就可以啟動服務端了,還可以用下面的方法指定要載入的配置檔案: ./redis-server ../redis.conf
預設情況下,redis-server會以非daemon的方式來執行,且預設服務埠為6379。
將redis.conf中的daemonize 改為yes,就可以後臺執行
使用redis客戶端
#執行客戶端命令即可進入 ./redis-cli #測試是否連線上redis 127.0.0.1:6379 > ping 返回pong代表連線上了 //用set來設定key、value 127.0.0.1:6379 > set name "chaoge" OK //get獲取name的值 127.0.0.1:6379 > get name "chaoge"
redis資料結構
redis是一種高階的key:value儲存系統,其中value支援五種資料型別 字串(strings) 雜湊(hashes) 列表(lists) 集合(sets) 有序集合(sorted sets)
資料結構示例
1.strings型別
set name "chaoge66" //設定name get name //讀取name strings型別支援數值操作 set age "17" //設定key age get age //讀取age incr age //數值+1,遇見數值操作時,redis會將字串型別轉成數值 get age //此時age是18,value仍然是字串
type age //檢視鍵的型別
2.list型別
redis的另外一個數據結構叫做lists,中文叫列表 lists常用操作包括 LPUSH 在lists左側插入一個新元素 RPUSH 在lists右側插入一個新元素 LRANGE 在lists指定範圍提取元素
LPOP 左側刪除
RPOP 右側刪除
示例:
lpush mylist "1" //新建一個mylist,在頭部插入元素"1"
(integer) 1 //返回mylist元素個數
rpush mylist "2" //在mylist右側插入元素"2"
(INTEGER) 2 //返回mylist元素個數
127.0.0.1:6379> lpush mylist "0" //在mylist左側插入元素"0"
(integer) 3 //返回mylist元素個數
//列出mylist中從編號0到編號1的元素
127.0.0.1:6379> lrange mylist 0 -1
1) "0"
2) "1"
3) "2"
lists型別常用在,訊息佇列、實現分頁功能、儲存文章評論
3.sets集合型別
redis的集合,是一種無序的集合,集合中的元素沒有先後順序。
集合相關的操作也很豐富,如新增新元素、刪除已有元素、取交集、取並集、取差集等。我們來看例子:
//向集合myset中加入一個新元素"one" 127.0.0.1:6379> sadd myset "one" (integer) 1 127.0.0.1:6379> sadd myset "two" (integer) 1 //列出集合myset中的所有元素 127.0.0.1:6379> smembers myset 1) "one" 2) "two" //判斷元素1是否在集合myset中,返回1表示存在 127.0.0.1:6379> sismember myset "one" (integer) 1 //判斷元素3是否在集合myset中,返回0表示不存在 127.0.0.1:6379> sismember myset "three" (integer) 0 //新建一個新的集合yourset 127.0.0.1:6379> sadd yourset "1" (integer) 1 127.0.0.1:6379> sadd yourset "2" (integer) 1 127.0.0.1:6379> smembers yourset 1) "1" 2) "2" //對兩個集合求並集 127.0.0.1:6379> sunion myset yourset 1) "1" 2) "one" 3) "2" 4) "two"
集合的使用比如QQ社交功能中的“好友標籤”,朋友給你的好友標籤“sb”,“dsb”等等,就可以吧每一個使用者的標籤儲存在集合裡
4.sorted sets有序集合
redis不但提供了無需集合(sets),還很體貼的提供了有序集合(sorted sets)。有序集合中的每個元素都關聯一個序號(score),這便是排序的依據。
很多時候,我們都將redis中的有序集合叫做zsets,這是因為在redis中,有序集合相關的操作指令都是以z開頭的,比如zrange、zadd、zrevrange、zrangebyscore等等
127.0.0.1:6379> zadd myzset 1 baidu.com (integer) 1 //向myzset中新增一個元素360.com,賦予它的序號是3 127.0.0.1:6379> zadd myzset 3 360.com (integer) 1 //向myzset中新增一個元素google.com,賦予它的序號是2 127.0.0.1:6379> zadd myzset 2 google.com (integer) 1 //列出myzset的所有元素,同時列出其序號,可以看出myzset已經是有序的了。 127.0.0.1:6379> zrange myzset 0 -1 withscores 1) "baidu.com" 2) "1" 3) "google.com" 4) "2" 5) "360.com" 6) "3" //只列出myzset的元素 127.0.0.1:6379> zrange myzset 0 -1 1) "baidu.com" 2) "google.com" 3) "360.com"
5.雜湊資料結構
hashes即雜湊。雜湊是從redis-2.0.0版本之後才有的資料結構。
hashes存的是字串和字串值之間的對映,比如一個使用者要儲存其全名、姓氏、年齡等等,就很適合使用雜湊。
//建立雜湊,並賦值 127.0.0.1:6379> HMSET user:001 username antirez password P1pp0 age 34 OK //列出雜湊的內容 127.0.0.1:6379> HGETALL user:001 1) "username" 2) "antirez" 3) "password" 4) "P1pp0" 5) "age" 6) "34" //更改雜湊中的某一個值 127.0.0.1:6379> HSET user:001 password 12345 (integer) 0 //再次列出雜湊的內容 127.0.0.1:6379> HGETALL user:001 1) "username" 2) "antirez" 3) "password" 4) "12345" 5) "age" 6) "34"
redis安全
redis-sentinel實戰
redis主從同步
1.安裝好master、slave兩個節點的redis
2.檢查master配置檔案
#檢視配置檔案有用資訊行 egrep -v '#|^$' /etc/redis.conf #主要修改的幾行 bind 192.168.119.10 #填寫本機ip地址 daemonize yes #設定後臺程序方式執行
3.檢查設定slave配置檔案
bind 192.168.119.11 daemonize yes slaveof 192.168.119.10 6379 #填寫master的ip埠
4.在master、slave皆啟動redis服務,指定配置檔案
redis-server /etc/redis.conf
5.在master上設定key,去slave上檢查資料,完成簡單的主從複製配置
centos下redis安全相關
在使用雲伺服器時,安裝的redis3.0+版本都關閉了protected-mode,因而都遭遇了挖礦病毒的攻擊,使得伺服器99%的佔用率!!
因此我們在使用redis時候,最好更改預設埠,並且使用redis密碼登入。
redis.conf設定
protected-mode yes #開啟保護模式 port 6380 #更改預設啟動埠 requirepass xxxxxx #設定redis啟動密碼,xxxx是自定義的密碼
啟動redis服務端
redis-server /opt/redis-4.0.10/redis.conf & #指定配置檔案啟動redis,且後臺啟動
使用密碼登入redis,使用6380埠
方法1,使用這個
[[email protected]_python ~ 09:48:41]#redis-cli -p 6380 127.0.0.1:6380> auth xxxx OK
方法2,此方案不安全,容易暴露密碼
[[email protected]_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx Warning: Using a password with '-a' option on the command line interface may not be safe. 127.0.0.1:6380> ping PONG
補充
檢查redis是否設定了密碼
127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"
2) "xxxxxx"
如果沒有,也可以給redis設定密碼(命令方式)
CONFIG set requirepass "xxxxxx"
因此你的redis就不容易被黑客入侵了。
在使用雲伺服器時,安裝的redis3.0+版本都關閉了protected-mode,因而都遭遇了挖礦病毒的攻擊,使得伺服器99%的佔用率!!
因此我們在使用redis時候,最好更改預設埠,並且使用redis密碼登入。
redis.conf設定
protected-mode yes #開啟保護模式 port 6380 #更改預設啟動埠 requirepass xxxxxx #設定redis啟動密碼,xxxx是自定義的密碼
啟動redis服務端
redis-server /opt/redis-4.0.10/redis.conf & #指定配置檔案啟動redis,且後臺啟動
使用密碼登入redis,使用6380埠
方法1,使用這個
[[email protected]_python ~ 09:48:41]#redis-cli -p 6380 127.0.0.1:6380> auth xxxx OK
方法2,此方案不安全,容易暴露密碼
[[email protected]_python ~ 09:49:46]#redis-cli -p 6380 -a xxxx Warning: Using a password with '-a' option on the command line interface may not be safe. 127.0.0.1:6380> ping PONG
補充
檢查redis是否設定了密碼
127.0.0.1:6380> CONFIG get requirepass
1) "requirepass"
2) "xxxxxx"
如果沒有,也可以給redis設定密碼(命令方式)
CONFIG set requirepass "xxxxxx"
因此你的redis就不容易被黑客入侵了。