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