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