什麼是Redis
Redis(Remote Dictionary Server) 是一個使用 C 語言編寫的,開源的(BSD許可)高效能非關係型(NoSQL)的鍵值對資料庫。
Redis 可以儲存鍵和五種不同型別的值之間的對映。鍵的型別只能為字串,值支援五種資料型別:字串、列表、集合、雜湊表、有序集合。
與傳統資料庫不同的是 Redis 的資料是存在記憶體中的,所以讀寫速度非常快,因此 redis 被廣泛應用於快取方向,每秒可以處理超過 10萬次讀寫操作,是已知效能最快的Key-Value DB。另外,Redis 也經常用來做分散式鎖。除此之外,Redis 支援事務 、持久化、LUA指令碼、LRU驅動事件、多種叢集方案。
鍵值型
NoSql
其中鍵值型,是指Redis中儲存的資料都是以key、value對的形式儲存,而value的形式多種多樣,可以是字串、數值、甚至json:
而NoSql則是相對於傳統關係型資料庫而言,有很大差異的一種資料庫。
NoSql可以翻譯做Not Only Sql(不僅僅是SQL),或者是No Sql(非Sql的)資料庫。是相對於傳統關係型資料庫而言,有很大差異的一種特殊的資料庫,因此也稱之為非關係型資料庫。
傳統關係型資料庫是結構化資料,每一張表都有嚴格的約束資訊:欄位名、欄位資料型別、欄位約束等等資訊,插入的資料必須遵守這些約束:
而NoSql則對資料庫格式沒有嚴格約束,往往形式鬆散,自由。
可以是鍵值型:
也可以是檔案型:
甚至可以是圖格式:
傳統資料庫的表與表之間往往存在關聯,例如外來鍵:
而非關係型資料庫不存在關聯關係,要維護關係要麼靠程式碼中的業務邏輯,要麼靠資料之間的耦合:
{
id: 1,
name: "張三",
orders: [
{
id: 1,
item: {
id: 10, title: "榮耀6", price: 4999
}
},
{
id: 2,
item: {
id: 20, title: "小米11", price: 3999
}
}
]
}
此處要維護「張三」的訂單與商品「榮耀」和「小米11」的關係,不得不冗餘的將這兩個商品儲存在張三的訂單檔案中,不夠優雅。還是建議用業務來維護關聯關係。
傳統關係型資料庫會基於Sql語句做查詢,語法有統一標準;
而不同的非關聯式資料庫查詢語法差異極大,五花八門各種各樣。
傳統關係型資料庫能滿足事務ACID的原則。
而非關係型資料庫往往不支援事務,或者不能嚴格保證ACID的特性,只能實現基本的一致性。
除了上述四點以外,在儲存方式、擴充套件性、查詢效能上關係型與非關係型也都有著顯著差異,總結如下:
Redis誕生於2009年全稱是Remote Dictionary Server 遠端詞典伺服器,是一個基於記憶體的鍵值型NoSQL資料庫。
特徵:
Redis優缺點
優點
缺點
Redis的官方網站
地址:https://redis.io/
大多數企業都是基於Linux伺服器來部署專案,而且Redis官方也沒有提供Windows版本的安裝包。因此會基於Linux系統來安裝Redis.
此處選擇的Linux版本為CentOS 7.
Redis是基於C語言編寫的,因此首先需要安裝Redis所需要的gcc依賴:
yum install -y gcc tcl
然後將課前資料提供的Redis安裝包上傳到虛擬機器器的任意目錄:
例如,我放到了/usr/local/src 目錄:
解壓縮:
tar -xzf redis-6.2.6.tar.gz
解壓後:
進入redis目錄:
cd redis-6.2.6
執行編譯命令:
make && make install
如果沒有出錯,應該就安裝成功了。
預設的安裝路徑是在 /usr/local/bin
目錄下:
該目錄已經預設設定到環境變數,因此可以在任意目錄下執行這些命令。其中:
redis的啟動方式有很多種,例如:
安裝完成後,在任意目錄輸入redis-server命令即可啟動Redis:
redis-server
如圖:
這種啟動屬於前臺啟動
,會阻塞整個對談視窗,視窗關閉或者按下CTRL + C
則Redis停止。不推薦使用。
如果要讓Redis以後臺
方式啟動,則必須修改Redis組態檔,就在我們之前解壓的redis安裝包下(/usr/local/src/redis-6.2.6
),名字叫redis.conf:
我們先將這個組態檔備份一份:
cp redis.conf redis.conf.bck
然後修改redis.conf檔案中的一些設定:
# 允許存取的地址,預設是127.0.0.1,會導致只能在本地存取。修改為0.0.0.0則可以在任意IP存取,生產環境不要設定為0.0.0.0
bind 0.0.0.0
# 守護行程,修改為yes後即可後臺執行
daemonize yes
# 密碼,設定後存取Redis必須輸入密碼
requirepass 123321
Redis的其它常見設定:
# 監聽的埠
port 6379
# 工作目錄,預設是當前目錄,也就是執行redis-server時的命令,紀錄檔、持久化等檔案會儲存在這個目錄
dir .
# 資料庫數量,設定為1,代表只使用1個庫,預設有16個庫,編號0~15
databases 1
# 設定redis能夠使用的最大記憶體
maxmemory 512mb
# 紀錄檔檔案,預設為空,不記錄紀錄檔,可以指定紀錄檔檔名
logfile "redis.log"
啟動Redis:
# 進入redis安裝目錄
cd /usr/local/src/redis-6.2.6
# 啟動
redis-server redis.conf
停止服務:
# 利用redis-cli來執行 shutdown 命令,即可停止 Redis 服務,
# 因為之前設定了密碼,因此需要通過 -u 來指定密碼
redis-cli -u 123321 shutdown
我們也可以通過設定來實現開機自啟。
首先,新建一個系統服務檔案:
vi /etc/systemd/system/redis.service
內容如下:
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
然後過載系統服務:
systemctl daemon-reload
現在,我們可以用下面這組命令來操作redis了:
# 啟動
systemctl start redis
# 停止
systemctl stop redis
# 重啟
systemctl restart redis
# 檢視狀態
systemctl status redis
執行下面的命令,可以讓redis開機自啟:
systemctl enable redis
安裝完成Redis,我們就可以操作Redis,實現資料的CRUD了。這需要用到Redis使用者端,包括:
Redis安裝完成後就自帶了命令列使用者端:redis-cli,使用方式如下:
redis-cli [options] [commonds]
其中常見的options有:
-h 127.0.0.1
:指定要連線的redis節點的IP地址,預設是127.0.0.1-p 6379
:指定要連線的redis節點的埠,預設是6379-a 123321
:指定redis的存取密碼其中的commonds就是Redis的操作命令,例如:
ping
:與redis伺服器端做心跳測試,伺服器端正常會返回pong
不指定commond時,會進入redis-cli
的互動控制檯:
GitHub上的大神編寫了Redis的圖形化桌面使用者端,地址:https://github.com/uglide/RedisDesktopManager
不過該倉庫提供的是RedisDesktopManager的原始碼,並未提供windows安裝包。
在下面這個倉庫可以找到安裝包:https://github.com/lework/RedisDesktopManager-Windows/releases
在下載中可以找到Redis的圖形化桌面使用者端:
解壓縮後,執行安裝程式即可安裝:
安裝完成後,在安裝目錄下找到rdm.exe檔案:
雙擊即可執行:
點選左上角的連線到Redis伺服器
按鈕:
在彈出的視窗中填寫Redis服務資訊:
點選確定後,在左側選單會出現這個連結:
點選即可建立連線了。
Redis預設有16個倉庫,編號從0至15. 通過組態檔可以設定倉庫數量,但是不超過16,並且不能自定義倉庫名稱。
如果是基於redis-cli連線Redis服務,可以通過select命令來選擇資料庫:
# 選擇 0號庫
select 0