Redis 與其他 key - value 快取產品有以下三個特點:
- Redis支援資料的持久化,可以將記憶體中的資料儲存在磁碟中,重啟的時候可以再次載入進行使用。
- Redis不僅僅支援簡單的key-value型別的資料,同時還提供list,set,zset,hash等資料結構的儲存。
- Redis支援資料的備份,即master-slave模式的資料備份。
redis-cli
複製程式碼
- 設定遠端訪問
##2.linux安裝
- 下載安裝包解壓,解壓完畢在資料夾內開啟命令視窗
#輸入命令
make
#完畢之後在當前視窗輸入新的命令
sudo make install
複製程式碼
- 設定redis在後臺執行
- 啟動和關閉redis服務
#啟動redis服務
./redis-server redis.conf
#檢視redis服務程式 是否啟動成功
ps -ef | grep redis
ps -A | grep redis
#redis客戶端啟動
redis-cli
#關閉redis服務
ps -A | grep redis
複製程式碼
#3.redis常見配置
- 配置檔案redis.conf
- 常見配置項
- bind 127.0.0.1 [繫結ip地址,遠端訪問請註釋]
- port 6379 [預設訪問地址 6379]
- daemonize yes [是否以後臺程式<守護程式>執行]
- dbfilename dump.rdb [儲存資料的檔案]
- dir ./. [儲存資料的檔案所在路徑]
- redis中的資料型別
- **redis的資料儲存:**key=value 鍵值對
- **key<鍵>的資料型別:**字串
- value<值的型別>:
- string字串
- hash雜湊
- list列表
- set集合
- zset有序集合
#4.redis資料操作
- string:字串操作
**set key value :**給一個key賦值value **setex key seconds value:**給一個key設定值value,過期時間seconds **mset key value [key value]:**設定多個鍵值對
**get key:**根據key獲取一個值 **mget key [key]:**根據多個key獲取多個值
**incr key :**將key對應的值+1 **incrby key increment:**將key對應的值+increment **decr key:**將key對應的值-1 **decrby key increment:**將key對應的值-increment
**append key value:**將value的值拼接到x後面 **strlen key:**獲取key對應的值的長度
- key操作
**keys pattern:**查詢鍵,支援正則 **exists key:**查詢鍵是否存在,存在返回1,否則返回0 **type key:**檢視鍵對應的值的型別 **del key:**根據key刪除鍵值對 **expire key seconds:**給key設定過期時間 **ttl key:**檢視鍵的有效時間(顯示結果為-2 的話表示過期,-1表示永不過期)
- hash:用於儲存物件,物件的格式為鍵值對
**hset key field value:**設定單個屬性 **hmset key field value [field value]:**設定多個屬性
**hget key field :**獲取key對應的值 **hmget key field [field]:**獲取多個key對應的value值 **hgetall key:**獲取所有屬性和值 **hkeys key:**獲取所有的屬性 **hlen key:**獲取包含屬性的個數 **hvals key:**獲取所有的值 **hexists key field:**判斷屬性是否存在 **hdel key field [field]:**根據屬性名稱刪除屬性及值 **hstrlen key field:**返回值的字串長度
- list列表:有序儲存多個資料
**lpush key value [value]:**列表頭部增加多個資料 **rpush key value [value]:**列表尾部增加多個資料 **linsert key before | after privot value:**在一個元素錢/後插入資料 **lset key index value:**設定指定索引的元素的值
**lpop key:**刪除並且獲取key對應的list第一個元素 **rpop key:**刪除並且獲取key對應的list最後一個元素 **lrange key start stop:**返回存在在key的list中指定範圍的資料
**llen key:**獲取列表的長度 **lindex key index:**獲取列表中索引對應的元素 **ltrim key start stop:**獲取列表中start~stop組成的新的列表
- set集合:無序儲存多個資料
**sadd key value [value]:**新增多個資料到key集合中 **smembers key:**獲取key集合中所有的資料 **sismember key value:**判斷value是否在key集合中存在 **scard key:**獲取key集合中元素的個數
**sinter key [key]:**獲取多個集合 交集 **sdiff key [key]:**獲取多個集合的差集 **sunion key [key]:**獲取多個集合的並集
- zset集合:有序儲存多個資料
- sorted set,有序集合
- 元素為string型別
- 元素具有唯一性,不重複
- 每個元素都會關聯一個double型別的score,表示權重,通過權重將元素從小到大排序
- 元素的score可以相同
**zadd key score value [ score value]:**新增多個帶權重的資料到key集合中 **zrange key start stop:**獲取指定範圍中所有的元素 **zcard key:**返回元素的個數 **zcount key min max :**返回score值在min和max之間的資料 **zscore key member:**返回集合中member元素的score值
#5.redis釋出訂閱
- 釋出者不是計劃傳送訊息給特定的接收者(訂閱者),而是釋出的訊息分到不同的頻道,不需要知道什麼樣的訂閱者訂閱
- 訂閱者對一個或多個頻道感興趣,只需接收感興趣的訊息,不需要知道什麼樣的釋出者釋出的
- 釋出者和訂閱者的解耦合可以帶來更大的擴充套件性和更加動態的網路拓撲
- 客戶端發到頻道的訊息,將會被推送到所有訂閱此頻道的客戶端
- 客戶端不需要主動去獲取訊息,只需要訂閱頻道,這個頻道的內容就會被推送過來
- 訊息的格式
推送訊息的格式包含三部分
part1:訊息型別,包含三種型別
- subscribe,表示訂閱成功
- unsubscribe,表示取消訂閱成功
- message,表示其它終端釋出訊息
如果第一部分的值為subscribe,則第二部分是頻道,第三部分是現在訂閱的頻道的數量
如果第一部分的值為unsubscribe,則第二部分是頻道,第三部分是現在訂閱的頻道的數量,如果為0則表示當前沒有訂閱任何頻道,當在Pub/Sub以外狀態,客戶端可以發出任何redis命令
如果第一部分的值為message,則第二部分是來源頻道的名稱,第三部分是訊息的內容
subscribe 頻道名稱 [頻道名稱]:訂閱多個頻道
unsubscribe 頻道名稱 [頻道名稱]:取消多個頻道的訂閱
publish 頻道 訊息:向指定的頻道推送訊息
複製程式碼
###開啟多個命令視窗:
- 第一個視窗當做訂閱者
輸入命令:
#啟動redis redis-cli #選擇資料庫 select 0 #訂閱頻道 subscribe zhiji 複製程式碼
- 第二個視窗當做客戶端
輸入命令
#啟動redis redis-cli #選擇資料庫 select 1 #釋出訊息 publish zhiji 'hellow' 複製程式碼
#6.主從雙備
-
主從配置 一個master可以擁有多個slave,一個slave又可以擁有多個slave,如此下去,形成了強大的多級伺服器叢集架構 比如,將ip為192.168.1.10的機器作為主伺服器,將ip為192.168.1.11的機器作為從伺服器
-
設定主伺服器的配置 bind 192.168.1.10 設定從伺服器的配置 注意:在slaveof後面寫主機ip,再寫埠,而且埠必須寫
通過redis.**.conf配置完成主從雙備
bind配置主資料庫伺服器
slaveof配置從資料庫伺服器
bind 192.168.1.11 slaveof 192.168.1.10 6379 在master和slave分別執行info命令,檢視輸出資訊
在master上寫資料
set hello world 在slave上讀資料
get hello
複製程式碼