Nosql之Redis的概念介绍+安装配置+Redis数据库基本操作
文章目錄
- 關(guān)系數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫介紹
- 關(guān)系數(shù)據(jù)庫
- 非關(guān)系型數(shù)據(jù)庫
- 非關(guān)系型數(shù)據(jù)庫產(chǎn)生背景
- Redis介紹
- Redis 簡介
- Redis 優(yōu)點
- Redis安裝部署
- Redis數(shù)據(jù)庫的基本操作
- set與get 命令
- key 相關(guān)命令
- 數(shù)據(jù)的遷移
- Redis 命令工具
- redis-benchmark 測試工具
- 其他命令工具
- Redis配置
- 參數(shù)與基本作用
關(guān)系數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫介紹
關(guān)系數(shù)據(jù)庫
- 關(guān)系型數(shù)據(jù)庫是一個結(jié)構(gòu)化的數(shù)據(jù)庫, 創(chuàng)建在關(guān)系模型基礎(chǔ)上, 一般面向于記錄。 它借
助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù),。 關(guān)系模型就是指二維表格模型,
因而一個關(guān)系型數(shù)據(jù)庫就是由二維表及其之間的聯(lián)系組成的一個數(shù)據(jù)組織。 現(xiàn)實世界中, 各
種實體與實體之間的各種聯(lián)系都可以用關(guān)系模型來表示。 SQL 語句(標準數(shù)據(jù)查詢語言) 就
是一種基于關(guān)系型數(shù)據(jù)庫的語言, 用于執(zhí)行對關(guān)系型數(shù)據(jù)庫中數(shù)據(jù)的檢索和操作。
主流的關(guān)系型數(shù)據(jù)庫包括 Oracle、 MySQL、 SQL Server、 Microsoft Access、 DB2 等等。
非關(guān)系型數(shù)據(jù)庫
- NoSQL(NoSQL = Not Only SQL ), 意思是“不僅僅是 SQL”, 是非關(guān)系型數(shù)據(jù)庫的總稱。
主流的 NoSQL 數(shù)據(jù)庫有 Redis、 MongBD、 Hbase、 CouhDB 等等, 以上這些數(shù)據(jù)庫, 他們的存
儲方式、 存儲結(jié)構(gòu)以及使用的場景都是完全不同的。 所以我們認為它是一個非關(guān)系型數(shù)據(jù)庫
的集合, 而不是像關(guān)系型數(shù)據(jù)庫一樣, 是一個統(tǒng)稱。 換言之, 除了主流的關(guān)系型數(shù)據(jù)庫以外
的數(shù)據(jù)庫, 都認為是非關(guān)系型的。 NoSQL 數(shù)據(jù)庫憑借著其非關(guān)系型、 分布式、 開源和橫向擴
展等優(yōu)勢, 被認為是下一代數(shù)據(jù)庫產(chǎn)品。
非關(guān)系型數(shù)據(jù)庫產(chǎn)生背景
- 關(guān)系型數(shù)據(jù)庫已經(jīng)誕生很久了, 而且我們一直在使用, 沒有什么問題。 面對這樣的情況,
為什么還會產(chǎn)生 NoSQL? 那么, 下面我們就來介紹一下 NoSQL 產(chǎn)生的背景。
隨著 Web2.0 網(wǎng)站的興起, 關(guān)系型數(shù)據(jù)庫在應(yīng)對 Web2.0 網(wǎng)站, 特別是海量數(shù)據(jù)和高并發(fā)
的 SNS(Social Networking Services, 即社交網(wǎng)絡(luò)服務(wù)) 類型的 Web2.0 純動態(tài)網(wǎng)站時,
暴露出很多難以解決的問題。
High performance——對數(shù)據(jù)庫高并發(fā)讀寫需求
Web2.0 網(wǎng)站會根據(jù)用戶的個性化信息來實時生成動態(tài)頁面和提供動態(tài)信息, 因此, 無
法使用動態(tài)頁面靜態(tài)化技術(shù)。 所以數(shù)據(jù)庫的并發(fā)負載非常高, 一般會達到 10000 次/s 以上
的讀寫請求。 關(guān)系型數(shù)據(jù)庫對于上萬次的查詢請求還是可以勉強支撐的。 當(dāng)出現(xiàn)上萬次的寫
數(shù)據(jù)請求, 硬盤 IO 就已經(jīng)無法承受了。 對于普通的 BBS 網(wǎng)站, 往往也會存在高并發(fā)的寫數(shù)
據(jù)請求, 如明星鹿晗在微博上公布戀情, 結(jié)果因為流量過大而引發(fā)微博癱瘓。
Huge Storage——對海量數(shù)據(jù)高效存儲與訪問需求
類似于 Facebook、 Friendfeed 這樣的 SNS 網(wǎng)站, 每天會產(chǎn)生大量的用戶動態(tài)信息。 如
Friendfeed,一個月就會產(chǎn)生 2.5 億條用戶動態(tài)信息, 對于關(guān)系型數(shù)據(jù)庫來說, 在一個包含
2.5 億條記錄的表中執(zhí)行 SQL 查詢, 效率是非常低的。
High Scalability && High Availability——對數(shù)據(jù)庫高可擴展性與高可用性需求
在 Web 架構(gòu)中, 數(shù)據(jù)庫是最難進行橫向擴展的。 當(dāng)應(yīng)用系統(tǒng)的用戶量與訪問量與日俱增
時, 數(shù)據(jù)庫是沒辦法像 Web 服務(wù)一樣, 簡單地通過添加硬件和服務(wù)器節(jié)點來擴展其性能和負
載能力的。 尤其對于一些需要 24 小時對外提供服務(wù)的網(wǎng)站來說, 數(shù)據(jù)庫的升級與擴展往往
伴隨著停機維護與數(shù)據(jù)遷移, 其工作量是非常龐大的。
關(guān)系型數(shù)據(jù)庫和非關(guān)系型數(shù)據(jù)庫都有各自的特點與應(yīng)用場景, 兩者的緊密結(jié)合將會給
web2.0 的數(shù)據(jù)庫發(fā)展帶來新的思路。 讓關(guān)系數(shù)據(jù)庫關(guān)注在關(guān)系上, 非關(guān)系型數(shù)據(jù)庫關(guān)注在
存儲上。 例如, 在讀寫分離的 MySQL 數(shù)據(jù)庫環(huán)境中,可以把經(jīng)常訪問的數(shù)據(jù)存儲在非關(guān)系型
數(shù)據(jù)庫中, 提升訪問速度。
Redis介紹
Redis 簡介
- Redis(RemoteDictionaryServer, 遠程字典型)是一個開源的、使用 C 語言編寫的 NoSQL
數(shù)據(jù)庫。 Redis 基于內(nèi)存運行并支持持久化, 采用 key-value(鍵值對) 的存儲形式, 是目
前分布式架構(gòu)中不可或缺的一環(huán)。 - Redis 服務(wù)器程序是單進程模型,也就是在一臺服務(wù)器上可以同時啟動多個 Redis 進程,而
Redis 的實際處理速度則是完全依靠于主進程的執(zhí)行效率。 若在服務(wù)器上只運行一個Redis 進程,當(dāng)多個客戶端同時訪問時, 服務(wù)器的處理能力是會有一定程度的下降; 若在同一臺服務(wù)器上開啟多個 Redis 進程, Redis 會提高并發(fā)處理能力的同時會給服務(wù)器的 CPU 造成很大壓力。 也就是說在實際生產(chǎn)環(huán)境中, 需要根據(jù)實際的需求來決定開啟多少個 Redis進程。 若對高并發(fā)要求更高一些, 可能會考慮在同一臺服務(wù)器上開啟多個進程; 若 CPU 資源比較緊張, 采用單進程即可。
Redis 優(yōu)點
- 具有極高的數(shù)據(jù)讀寫速度, 數(shù)據(jù)讀取的速度最高可達到 110000 次/s, 數(shù)據(jù)寫入速度最
高可達到 81000 次/s。 - 支持豐富的數(shù)據(jù)類型, 不僅僅支持簡單的 key-value 類型的數(shù)據(jù), 還支持 Strings,
Lists, Hashes, Sets 及 Ordered Sets 等數(shù)據(jù)類型操作。 - 支持數(shù)據(jù)的持久化, 可以將內(nèi)存中的數(shù)據(jù)保存在磁盤中, 重啟的時候可以再次加載進行
使用。 - 原子性, Redis 所有操作都是原子性的。
- 支持數(shù)據(jù)備份, 即 master-salve 模式的數(shù)據(jù)備份。
Redis安裝部署
Redis數(shù)據(jù)庫的基本操作
set與get 命令
- set: 存放數(shù)據(jù), 基本的命令格式為 set key value。
- get: 獲取數(shù)據(jù), 基本的命令格式為 get key。
key 相關(guān)命令
-
在Redis數(shù)據(jù)庫中,與 key 相關(guān)的命令主要包含以下幾種:
-
keys
使用 keys 命令可以取符合規(guī)則的鍵值列表, 通常情況可以結(jié)合*、 ? 等選項來使用
-
exists
exists 命令可以判斷鍵值是否存在。存在為1,不存在為0。 -
del
del命令可以刪除當(dāng)前數(shù)據(jù)庫的指定key。
-
type
使用 type 命令可以獲取 key 對應(yīng)的 value 值類型。
-
rename
rename 命令是對已有 key 進行重命名, 其命令格式為: rename 源 key 目標 key。 使用
rename 命令進行重命名時, 無論目標 key 是否存在都進行重命名, 且源 key 的值會覆蓋目
標 key 的值。 在實際使用過程中, 建議先用 exists 命令查看目標 key 是否存在, 然后再決
定是否執(zhí)行 rename 命令, 以避免覆蓋重要數(shù)據(jù)。
數(shù)據(jù)的遷移
- 重新進入數(shù)據(jù)庫,默認進入[0]數(shù)據(jù)庫,并查看。
- SELECT 10 進入[10]數(shù)據(jù)庫,查看。
- 將[0]數(shù)據(jù)庫中的professor遷移到[10]中
- 返回到[10],查看
- 清除數(shù)據(jù)
Redis 命令工具
redis-benchmark 測試工具
- 基本語法:
| -h | 指定服務(wù)器主機名。 |
| -p | 指定服務(wù)器端口。 |
| -s | 指定服務(wù)器 socket。 |
| -c | 指定并發(fā)連接數(shù)。 |
| -n | 指定請求數(shù)。 |
| -d | 以字節(jié)的形式指定 SET/GET 值的數(shù)據(jù)大小。 |
| -k | 1=keep alive 0=reconnect 。 |
| -r | SET/GET/INCR 使用隨機 key, SADD 使用隨機值。 |
| -P | 通過管道傳輸請求。 |
| -q | 強制退出 redis。 僅顯示 query/sec 值。 |
| –csv | 以 CSV 格式輸出。 |
| -l | 生成循環(huán), 永久執(zhí)行測試。 |
| -t | 僅運行以逗號分隔的測試命令列表。 |
| -I | Idle 模式。 僅打開 N 個 idle 連接并等待。 |
其他命令工具
- Redis 軟件提供了多個命令工具, 當(dāng) Redis 安裝時, 所包含的軟件工具會同時被安裝到
系統(tǒng)中, 在系統(tǒng)中可以直接使用。 這些命令工具的作用分別如下所示。
| redis-server | 用于啟動 Redis 的工具 |
| redis-benchmark | 用于檢測 Redis 在本機的運行效率 |
| redis-check-aof | 修復(fù) AOF 持久化文件 |
| redis-check-rdb | 修復(fù) RDB 持久化文件 |
| redis-cli | 是 Redis 命令行工具 |
| redis-setinel | 是 redis-server 文件的軟鏈接 |
Redis配置
- Redis 主配置文件為/etc/redis/6379.conf, 由注釋行與設(shè)置行兩部分組成。 與大多數(shù)Linux 配置文件一樣, 注釋性的文字以“#” 開始, 包含了對相關(guān)配置內(nèi)容進行的說明和解釋。 除了注釋行與空行以外的內(nèi)容即為設(shè)置行。 可根據(jù)生產(chǎn)環(huán)境的需求調(diào)整相關(guān)參數(shù)。
- 在/etc/redis/6379.conf中進行配置與優(yōu)化
參數(shù)與基本作用
- timeout 300
當(dāng)客戶端閑置多長時間后關(guān)閉連接, 如果指定為 0, 表示關(guān)閉該功能。 - dbfilename dump.rdb
指定本地數(shù)據(jù)庫文件名, 默認值為 dump.rdb。 - dir /var/lib/redis/6379
指定本地數(shù)據(jù)庫存放目錄。 - maxclients 10000
設(shè)置同一時間最大客戶端連接數(shù), 默認為 10000, Redis可以同時打開的客戶端連接數(shù)為 Redis 進程可以打開的最大文件描述符數(shù), 如果設(shè)置 maxclients 0, 表示不限制。 當(dāng)客戶端連接數(shù)到達限制時, Redis 會關(guān)閉新的連接并向客戶端返回 max number of clients reached 錯誤信息。 - rdbcompression yes
指定存儲至本地數(shù)據(jù)庫時是否壓縮數(shù)據(jù), 默認為 yes,Redis 采用 LZF 壓縮, 如果為了節(jié)省 CPU 資源, 可以關(guān)閉該選項, 但會導(dǎo)致數(shù)據(jù)庫文件變的巨大。 - slaveof [masterip][masterport]
設(shè)置當(dāng)本機為 slav 從服務(wù)器時,設(shè)置 maste 服務(wù)的 IP地址及端口,在 Redis 啟動時,它會自動從 master進行數(shù)據(jù)同步。 - masterauth [master-password]
當(dāng) master服務(wù)設(shè)置了密碼保護時,slave服務(wù)連接master的密碼。. - requirepass foobared
設(shè)置 Redis 連接密碼, 如果配置了連接密碼, 客戶端在連接 Redis 時需要通過 AUTH 命令提供密碼, 默認關(guān)閉。 - maxmemory bytes
指定Redis最大內(nèi)存限制,Redis在啟動時會把數(shù)據(jù)加載到內(nèi)存中, 達到最大內(nèi)存后,Redis 會先嘗試清除已到期或即將到期的 Key, 當(dāng)此方法處理后,仍然到達最大內(nèi)存設(shè)置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內(nèi)存,Value會存放在swap區(qū)。 - appendonly no
指定是否在每次更新操作后進行日志記錄,Redis在默認情況下是異步的把數(shù)據(jù)寫入磁盤,如果不開啟,可能會在斷電時導(dǎo)致一段時間內(nèi)的數(shù)據(jù)丟失。因為redis本身同步數(shù)據(jù)文件是按上面 save 條件來同步的,所以有的數(shù)據(jù)會在一段時間內(nèi)只存在于內(nèi)存中。默認為no。 - appendonly.aof
指定更新日志文件名,默認為appendonly.aof。
appendfsync everysec
指定更新日志條件, 共有 3 個可選值:
no:表示等操作系統(tǒng)進行數(shù)據(jù)緩存同步到磁盤(快)
always:表示每次更新操作后手動調(diào)用 fsync()將數(shù)據(jù)寫到磁盤(慢, 安全)
everysec:表示每秒同步一次(中等, 默認值)
activerehashing yes
指定是否激活重置哈希,默認為開啟。 - include /path/to/local.conf
指定包含其它的配置文件, 可以在同一主機上多個 Redis實例之間使用同一份配置文件。
總結(jié)
以上是生活随笔為你收集整理的Nosql之Redis的概念介绍+安装配置+Redis数据库基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用的表情和含义
- 下一篇: mapengpeng1999@163.c