1. 程式人生 > 其它 >Redis專題(一)——Redis基本概述與安裝配置

Redis專題(一)——Redis基本概述與安裝配置

Redis專題(一)

——Redis基本概述與安裝配置

(原創內容,轉載請註明來源,謝謝)

一、特性

1、儲存方式

Redis採用Key-Value型別進行儲存,資料儲存在記憶體中,不存在硬碟中,由於避開了I/O,因此讀寫速度比關係型資料庫快很多,普通的筆記本每秒可以讀寫超過10萬個鍵值。

2、永續性

為了避免存在記憶體中導致的程式退出後資料丟失問題,Redis提供將資料非同步寫入硬碟,不影響繼續提供服務。

3、靈活性

Redis可以為每個鍵設定生存時間,到期後自動刪除。就此而言可以將其用作快取,和Memcached相似,Redis幾乎涵蓋Memcached的全部功能,效能強大且又支援叢集,因此目前而言Redis更勝一籌。

另外,Redis可以限定佔用的記憶體大小,在資料達到限制後可以按照規則淘汰不必要的鍵。

此外,Redis的列表的資料型別,常用做訊息佇列的處理,且由於其可以設定阻塞模式,因此可以建立不同優先順序的訊息佇列。

4、簡便性

Redis命令簡單,常用的命令十幾個容易記憶,且使用方便。另外,Redis支援幾十種語言,使用c開發,程式碼量僅3萬行,且又是開源的,優勢眾多。

二、安裝配置與基本功能

1、版本規則

Redis約定次版本號為偶數的版本為穩定版,如3.0、2.8,基數的是非穩定版,生產環境必須用穩定版。

2、安裝

Redis對windows系統支援較差,建議使用Linux或者OS X系統,下面介紹在Ubuntu中的安裝過程:

1)獲取原始碼

         wget http://download.redis.io/redis-stable.tar.gz

2)解壓縮

         tar-zxf redis-stable.tar.gz

3)進入解壓路徑

         cdredis-stable

4)編譯

         make
         make test
         make install

5)下載配置檔案和init啟動指令碼

wget https://github.com/ijonas/dotfiles/raw/master/etc/init.d/redis-server
wget https://github.com/ijonas/dotfiles/raw/master/etc/redis.conf
sudo mv redis-server /etc/init.d/redis-server
sudo chmod +x /etc/init.d/redis-server
sudo mv redis.conf /etc/redis.conf

6)初始化使用者和日誌路徑

第一次啟動Redis前,建議為Redis單獨建立一個使用者,並新建data和日誌資料夾。

sudo useradd redis
sudo mkdir -p /var/lib/redis
sudo mkdir -p /var/log/redis
sudo chown redis.redis /var/lib/redis
sudo chown redis.redis /var/log/redis

7)設定開機自動啟動,關機自動關閉

sudo update-rc.d redis-server defaults

8)啟動Redis

sudo /etc/init.d/redis-server start

3、Redis服務端管理命令

Redis分為服務端與客戶端,服務端即Redis提供服務的地方,類似於Mysql資料庫本身;客戶端即操作、呼叫Redis的地方,可以在任何地方,如命令列、PHP指令碼等。

服務端管理命令常用的是開啟、 關閉服務等。

1)啟動redis

         redis-server--port 6380

埠號是預設是6380。

2)關閉redis

         redis-cliSHUTDOWN

當redis接到關閉命令,會先斷開所有連線,然後按照配置將資料持久化到硬碟中,最後完成退出。當接到kill PID命令時,和shutdown相同,也會妥善處理。

4、Redis客戶端管理命令

可以使用上述的redis-cli+ 命令的方式,也可以先輸入redis-cli回車,就直接進入redis的命令列模式,可以輸入多條命令。

5、Redis命令回覆

Redis通過接收到的命令,會有不同的回覆,共有5種回覆。

1)狀態回覆

當收到正確的指令進行操作,例如set等,會回覆OK表示成功。另外,如果輸入PING,會返回PONG,表示網路連線正常。

2)錯誤回覆

當收到不存在的指令、格式有誤的指令時,會返回錯誤,錯誤是以error開頭,後面會跟上錯誤資訊。

3)整數回覆

當使用INCR命令讓某個數自增1,會返回數字的結果。返回的結果類似(interger) 1

4)字串回覆

由於redis中的內容都是用字串存的,因此獲取redis存在的元素會返回字串,但是如果獲取一個不存在的鍵對應的值,會返回(nil)。

5)多行字串回覆

當接收到一些命令,如返回所有的鍵名,則會以多行字串的形式返回。

6、啟用配置檔案

redis-server/configpath/redis.conf 其中configpath是redis.conf的配置檔案路徑。另外,也可以在redis-cli命令列,輸入CONFIG SET命令,動態的設定redis,而不用重啟redis。

7、多資料庫

redis支援類似關係型資料庫的的多個數據庫儲存不同的資料的方式,允許將資料分在不同的資料字典裡面,每個資料字典類似一個數據庫。redis預設支援16個數據庫,資料庫總數可以在配置檔案中進行修改。

與mysql等定義資料庫的不同之處:

1)redis的資料庫不允許自定義名字,資料庫名字是從0-15,預設使用0,可以用select 1 的方式選擇資料庫1。

2)不支援為每個資料庫設定自己的密碼,因此使用者要麼可以訪問全部資料庫,要麼不能訪問redis。

3)資料庫之間不是隔離的,用FLUSHALL命令可以清空所有資料庫。

因此,redis的多資料庫更像是名稱空間的方式。

8、多資料庫使用方案

由於第7點,redis的多資料庫和mysql等不同,不是用於存放不同的業務場景的資料庫。通常,redis多資料庫用於區分不同開發環境、測試環境的資料,便於開發和測試。

多個業務場景,不能用redis的多資料庫方案,而是更適合建立多個redis的例項,由於redis的輕量級,每個空例項僅1mb左右,不會佔用太多記憶體。

三、Redis鍵的命名規則

Redis的鍵可以任意命名,但是由於上述說到redis的多資料庫並不是真正的多資料庫,而且切換資料庫還需要增加選擇redis資料庫的操作,因此,通常用命名的方式來使用redis的資料庫。

1、分割

Redis中的鍵值,通常用冒號:進行分割,如user:1:username,表示user系統(或user表等)、id為1、欄位為username的鍵。這樣,便於使用萬用字元進行維護。

2、標記

在Redis裡面儲存一個特殊的值,如registy_all_keys等,其儲存著當前有幾個系統、分別多少欄位等資訊,其值可以用user-20:order-30等形式進行區分。

3、刪除

不需要的欄位,需要及時刪除,因為redis有配置的使用記憶體,當記憶體滿時,會呼叫配置檔案,進行自動刪除鍵。當自動刪除期間,效能會大大降低。

4、控制鍵名的長度

雖然可以用分隔符的方式,但是不要過度使用,導致名字太長。

——written by linhxx 2017.08.03