Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

Redis一鍵安裝並啟動的指令碼(root使用者)

試過用其他許可權使用者安裝會出錯,可能是因為命令中沒有寫 sudo

切換到root,直接執行即可。

#!/bin/bashcd /usr/local/ && wget http://download。redis。io/releases/redis-5。0。5。tar。gz && tar -zxvf redis-5。0。5。tar。gz && cd /usr/local/redis-5。0。5 && make MALLOC=libc && cd /usr/local/redis-5。0。5/src && make install && cp /usr/local/redis-5。0。5/redis。conf /usr/local/redis-5。0。5/redis。conf。backup && sed -i ‘s/daemonize no$/daemonize yes/g’ /usr/local/redis-5。0。5/redis。conf && redis-server /usr/local/redis-5。0。5/redis。conf

如果想要生產環境使用,根據README的提示,建議執行:

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

架構演進過程

剛開始,資料存在檔案。

必須知道的常識:

磁碟,兩個指標:磁碟定址是ms級別,頻寬是每秒G/M級別

記憶體:定址是ns級別

在定址上,磁碟比記憶體慢了10W倍

I/O buffer成本問題:

磁碟與磁軌,扇區,一個扇區512Byte小格子,帶來索引的成本變大

所以在格式化磁碟的時候,會有一個4K對齊。

無論你讀多少資料,作業系統都是從磁碟中一次拿4K的資料量。

隨著檔案變大,速度變慢,為什麼?

因為IO成為瓶頸。

資料庫的出現

DataPage:大小為4K,正好符合作業系統的一次IO的資料量。

資料、索引、B+樹(減少大的IO)

小常識:資料在磁碟和記憶體體積不一樣

在磁碟當中沒有指標的概念,資料不能像物件一樣出現,沒有指標,如果一個東西存了兩遍,就是實打實的兩遍。

磁碟和記憶體的折中:使用快取

memcached,redis

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

速度的提升,受限於2個基礎設施的限制

1、馮諾依曼體系的硬體(磁碟IO,慢)

2、乙太網,TCP/IP的網路(不穩定,資料一致性等問題)

也是因此出現了memcached,redis

官網描述

Redis 是一個開源(BSD許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體。

它支援多種型別的資料結構,如 字串(strings), 雜湊(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 與範圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內建了 複製(replication),LUA指令碼(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁碟持久化(persistence), 並透過 Redis哨兵(Sentinel)和自動分割槽(Cluster)提供高可用性(high availability)。

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

Memcached沒有Redis那麼多資料型別,資料都是以字串(可以用JSON轉換)的形式表示。

那麼,Redis存在那麼多資料型別的意義是什麼?

如果客戶端想要獲得JSON中的某一小部分元素,可以只取其一小部分,直接返回給客戶端。

而Memcached需要全量地返回整個JSON而不能去解析它的一部分,需要客戶端自己去解析。Memcached的效能損耗會在IO以及客戶端資料的解析上。

因此,重要的不是型別,重要的是Redis Server對每種資料型別都實現了自己的方法(函式)。

本質上是一種解耦,計算向資料移動。

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

Redis安裝

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

安裝之後就可以在任何位置用service啟動redis了

檢視redis狀態:

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

安裝完成~

插曲:關於 epoll

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

(續上圖)下圖右側是零複製的過程

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

Redis使用的epoll

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹

nginx也是用了epoll

Redis實戰(一):Redis一鍵安裝指令碼,Redis 介紹及 NIO 原理介紹