NoSQL Redis配置與優化

一、關系數據庫與非關系型數據庫

1. 關系型數據庫:

關系型數據庫是一個結構化的數據庫,創建在關系模型(二維表格模型)基礎上,一般面向于記錄。
SQL 語句(標準數據查詢語言)就是一種基于關系型數據庫的語言,用于執行對關系型數據庫中數據的檢索和操作。
主流的關系型數據庫包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL 等。
以上數據庫在使用的時候必須先建庫建表設計表結構,然后存儲數據的時候按表結構去存,如果數據與表結構不匹配就會存儲失敗。

2. 非關系型數據庫

NoSQL(NoSQL = Not Only SQL ),意思是“不僅僅是 SQL”,是非關系型數據庫的總稱。
除了主流的關系型數據庫外的數據庫,都認為是非關系型。
不需要預先建庫建表定義數據存儲表結構,每條記錄可以有不同的數據類型和字段個數(比如微信群聊里的文字、圖片、視頻、音樂等)。
主流的 NoSQL 數據庫有 Redis、MongBD、Hbase、Memcached 等。

非關系型數據庫產生背景

可用于應對 Web2.0 純動態網站類型的三高問題。
(1)High performance——對數據庫高并發讀寫需求
(2)Huge Storage——對海量數據高效存儲與訪問需求
(3)High Scalability && High Availability——對數據庫高可擴展性與高可用性需求

3.?區別:

(1)數據存儲方式不同

關系型和非關系型數據庫的主要差異是數據存儲的方式。關系型數據天然就是表格式的,因此存儲在數據表的行和列中。數據表可以彼此關聯協作存儲,也很容易提取數據。
與其相反,非關系型數據不適合存儲在數據表的行和列中,而是大塊組合在一起。非關系型數據通常存儲在數據集中,就像文檔、鍵值對或者圖結構。你的數據及其特性是選擇數據存儲和提取方式的首要影響因素。

(2)擴展方式不同

SQL和NoSQL數據庫最大的差別可能是在擴展方式上,要支持日益增長的需求當然要擴展。
要支持更多并發量,SQL數據庫是縱向擴展,也就是說提高處理能力,使用速度更快速的計算機,這樣處理相同的數據集就更快了。因為數據存儲在關系表中,操作的性能瓶頸可能涉及很多克服。雖然SQL數據庫有很大擴展空間,但最終肯定會達到縱向擴展的上限個表,這都需要通過提高計算機性能來。
而NoSQL數據庫是橫向擴展的。因為非關系型數據存儲天然就是分布式的,NoSQL數據庫的擴展可以通過給資源池添加更多普通的數據庫服務器(節點)來分擔負載。
關系:縱向 ? 比如說硬件中添加內存
非關:橫向 ?天然分布式

(3)對事務性的支持不同

如果數據操作需要高事務性或者復雜數據查詢需要控制執行計劃,那么傳統的SQL數據庫從性能和穩定性方面考慮是你的最佳選擇。SQL數據庫支持對事務原子性細粒度控制,并且易于回滾事務。
雖然NoSQL數據庫也可以使用事務操作,但穩定性方面沒法和關系型數據庫比較,所以它們真正閃亮的價值是在操作的擴展性和大數據量處理方面。

二、Redis

1. Redis 簡介

Redis(遠程字典服務器) 是一個開源的、使用 C 語言編寫的 NoSQL 數據庫。Redis 基于內存運行并支持持久化,采用key-value(鍵值對)的存儲形式,是目前分布式架構中不可或缺的一環。

Redis服務器程序是單進程模型,也就是在一臺服務器上可以同時啟動多個Redis進程,Redis的實際處理速度則是完全依靠于主進程的執行效率。

  • 若在服務器上只運行一個Redis進程,當多個客戶端同時訪問時,服務器的處理能力是會有一定程度的下降;
  • 若在同一臺服務器上開啟多個Redis進程,Redis在提高并發處理能力的同時會給服務器的CPU造成很大壓力。

即:在實際生產環境中,需要根據實際的需求來決定開啟多少個Redis進程。若對高并發要求更高一些,可能會考慮在同一臺服務器上開啟多個進程。若CPU資源比較緊張,采用單進程即可。

2. Redis 優點:

(1)具有極高的數據讀寫速度:數據讀取的速度最高可達到 110000 次/s,數據寫入速度最高可達到 81000 次/s。

(2)支持豐富的數據類型:支持 key-value、Strings、Lists、Hashes、Sets 及 Sorted Sets 等數據類型操作。

(3)支持數據的持久化:可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載進行使用。

(4)原子性:Redis 所有操作都是原子性的。

(5)支持數據備份:即 master-salve 模式的數據備份。

3. Redis 為什么這么快?

  1. Redis是一款純內存結構,避免了磁盤I/o等耗時操作。
  2. Redis命令處理的核心模塊為單線程,減少了鎖競爭,以及頻繁創建線程和銷毀線程的代價,減少了線程上下文切換的消耗。
  3. 采用了 I/O 多路復用機制,大大提升了并發效率。

4. Redis 五種數據類型

  1. 字符串(Strings):用于存儲文本、整數或二進制數據,大小可達 512 MB。

  2. 哈希(Hashes):字段和值之間的映射,其中字段和值都是字符串,適用于存儲對象。

  3. 列表(Lists):按添加順序排列的字符串集合,允許在列表兩端進行操作。

  4. 集合(Sets):無序的唯一字符串集合,允許進行交集、并集和差集等操作。

  5. 有序集合(Sorted Sets 或 Zsets):類似于集合,但每個成員都關聯一個分數,用于對元素進行排序。這允許根據它們的分數檢索一系列元素。

三、Redis 安裝部署

1. 關閉防火墻與核心防護

systemctl stop firewalld
setenforce 0

2. 安裝依賴環境

yum install -y gcc gcc-c++ maketar zxvf redis-5.0.7.tar.gz -C /opt/cd /opt/redis-5.0.7/
make
make PREFIX=/usr/local/redis install#由于Redis源碼包中直接提供了 Makefile 文件,所以在解壓完軟件包后,不用先執行 ./configure 進行配置,可直接執行 make 與 make install 命令進行安裝。

3. 執行腳本文件

執行軟件包提供的 install_server.sh 腳本文件設置 Redis 服務所需要的相關配置文件

cd /opt/redis-5.0.7/utils
./install_server.sh
......					#一直回車
Please select the redis executable path [ ] 
輸入:/usr/local/redis/bin/redis-server#需要手動修改為 /usr/local/redis/bin/redis-server

解釋:
Selected config:
Port           : 6379								#默認偵聽端口為6379
Config file    : /etc/redis/6379.conf				#配置文件路徑
Log file       : /var/log/redis_6379.log			#日志文件路徑
Data dir       : /var/lib/redis/6379				#數據文件路徑
Executable     : /usr/local/redis/bin/redis-server	#可執行文件路徑
Cli Executable : /usr/local/bin/redis-cli			#客戶端命令工具

4. 創建軟連接

把redis的可執行程序文件放入路徑環境變量的目錄中便于系統識別

ln -s /usr/local/redis/bin/* /usr/local/bin/

5. 啟動 Redis 服務

當 install_server.sh 腳本運行完畢,Redis 服務就已經啟動,默認監聽端口為 6379

netstat -natp | grep redis#Redis 服務控制
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#啟動
/etc/init.d/redis_6379 restart			#重啟
/etc/init.d/redis_6379 status			#狀態

6. 修改配置文件

修改配置 /etc/redis/6379.conf 參數

vim /etc/redis/6379.confbind 127.0.0.1 192.168.10.23				#70行,添加 監聽的主機地址
port 6379									#93行,Redis默認的監聽端口
daemonize yes								#137行,啟用守護進程
pidfile /var/run/redis_6379.pid				#159行,指定 PID 文件
loglevel notice								#167行,日志級別
logfile /var/log/redis_6379.log				#172行,指定日志文件/etc/init.d/redis_6379 restart

四、Redis 命令工具

redis-server:用于啟動 Redis 的工具
redis-benchmark:用于檢測 Redis 在本機的運行效率
redis-check-aof:修復 AOF 持久化文件
redis-check-rdb:修復 RDB 持久化文件
redis-cli:Redis 命令行工具

1.?redis-cli 命令行工具

語法:redis-cli -h host -p port -a password
-h :指定遠程主機
-p :指定 Redis 服務的端口號
-a :指定密碼,未設置數據庫密碼可以省略-a 選項
若不添加任何選項表示,則使用 127.0.0.1:6379 連接本機上的 Redis 數據庫

2.?redis-benchmark 測試工具

redis-benchmark 是官方自帶的 Redis 性能測試工具,可以有效的測試 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 :通過管道傳輸<numreq>請求。
-q :強制退出 redis。僅顯示 query/sec 值。
--csv :以 CSV 格式輸出。
-l :生成循環,永久執行測試。
-t :僅運行以逗號分隔的測試命令列表。
-I :Idle 模式。僅打開 N 個 idle 連接并等待。

2.1?向 IP 地址為 172.168.1.1、端口為 6379 的 Redis 服務器發送 100 個并發連接與 100000 個請求測試性能

redis-benchmark -h 172.168.1.11 -p 6379 -c 100 -n 100000

2.2?測試存取大小為 100 字節的數據包的性能

redis-benchmark -h 172.168.1.11 -p 6379 -q -d 100

2.3?測試本機上 Redis 服務在進行 set 與 lpush 操作時的性能

redis-benchmark -t set,lpush -n 100000 -q

五、Redis 數據庫常用命令

set:存放數據,命令格式為 set key value
get:獲取數據,命令格式為 get key

keys

keys 命令可以取符合規則的鍵值列表,通常情況可以結合*、?等選項來使用。

exists

exists 命令可以判斷鍵值是否存在。

del

del 命令可以刪除當前數據庫的指定 key。

type

type 命令可以獲取 key 對應的 value 值類型。

rename

# rename 命令是對已有 key 進行重命名。(覆蓋)
命令格式:rename 源key 目標key
使用rename命令進行重命名時,無論目標key是否存在都進行重命名,且源key的值會覆蓋目標key的值。在實際使用過程中,建議先用 exists 命令查看目標 key 是否存在,然后再決定是否執行 rename 命令,以避免覆蓋重要數據。

renamenx

# renamenx 命令的作用是對已有 key 進行重命名,并檢測新名是否存在,如果目標 key 存在則不進行重命名。(不覆蓋)
命令格式:renamenx 源key 目標key

dbsize

dbsize 命令的作用是查看當前數據庫中 key 的數目。

config

#使用config set requirepass yourpassword命令設置密碼
172.168.1.11:6379> config set requirepass 123456#使用config get requirepass命令查看密碼(一旦設置密碼,必須先驗證通過密碼,否則所有操作不可用)
172.168.1.11:6379> auth 123456
172.168.1.11:6379> config get requirepass#刪除密碼
config set requirepass ''

六、Redis 多數據庫常用命令

Redis 支持多數據庫,Redis 默認情況下包含 16 個數據庫,數據庫名稱是用數字 0-15 來依次命名的。
多數據庫相互獨立,互不干擾。

多數據庫間切換

命令格式:select 序號
使用 redis-cli 連接 Redis 數據庫后,默認使用的是序號為 0 的數據庫。

多數據庫間移動數據

格式:move 鍵值 序號

清除數據庫內數據

FLUSHDB :清空當前數據庫數據
FLUSHALL :清空所有數據庫的數據,慎用!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14270.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14270.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14270.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Python】pandas連續變量分箱

路過了學校花店 荒野到海邊 有一種浪漫的愛 是浪費時間 徘徊到繁華世界 才發現你背影 平凡得特別 繞過了城外邊界 還是沒告別 愛錯過了太久 反而錯得完美無缺 幸福兜了一個圈 &#x1f3b5; 林宥嘉《兜圈》 import pandas as pd import numpy as np from sklearn.model_selecti…

redis核心面試題一(架構原理+RDB+AOF)

文章目錄 0. redis與mysql區別1. redis是單線程架構還是多線程架構2. redis單線程為什么這么快3. redis過期key刪除策略4. redis主從復制架構原理5. redis哨兵模式架構原理6. redis高可用集群架構原理7. redis持久化之RDB8. redis持久化之AOF9. redis持久化之混合持久化 0. red…

窮人如何翻身賺錢?不妨試試這5個冷門生意,干好了,收入相當不錯

根據統計數據&#xff0c;我國月收入超過3000元的人口已超過4億&#xff0c;這意味著仍有約10億人的月收入低于3000元。正因為如此&#xff0c;網絡上許多人都自嘲為“窮人”。 然而&#xff0c;窮人真的無法改變自己的命運嗎&#xff1f;并非如此。對于渴望賺錢的窮人來說&am…

gpt2使用ggml推理

gpt2使用ggml推理 ggml/examples/gpt-2/main-backend.cpp : #include "ggml/ggml.h" #include "ggml/ggml-alloc.h" #include "ggml/ggml-backend.h"#ifdef GGML_USE_CUDA #include "ggml-cuda.h" #endif#ifdef GGML_USE_METAL #inc…

傳統藍牙模塊BR/EDR與低功耗藍牙模塊有什么區別?

傳統藍牙模塊BR/EDR與低功耗藍牙模塊有什么區別&#xff1f;下面跟隨美迅物聯網MesoonRF從多個維度來了解。   概述&#xff1a;低功耗藍牙采用了高斯頻移鍵控&#xff08;GFSK&#xff09;。這里我們先拋開藍牙的協議&#xff0c;單純從Radio的角度看收發通信&#xff0c;Ra…

【Crypto】Url編碼

文章目錄 Url編碼解題感悟 Url編碼 Url編碼 搞定 小小flag&#xff0c;拿下&#xff01; 解題感悟 有點餓了…

day 1: 738. 單調遞增的數字

738. 單調遞增的數字 當且僅當每個相鄰位數上的數字 x 和 y 滿足 x < y 時&#xff0c;我們稱這個整數是單調遞增的。 給定一個整數 n &#xff0c;返回 小于或等于 n 的最大數字&#xff0c;且數字呈 單調遞增 。 示例1&#xff1a; 輸入&#xff1a;n 10 輸出&#xff1a…

圖數據庫助力供應鏈柔性升級

導讀 當今市場環境受短視頻等流媒體影響&#xff0c;任何風險事件在社交網絡中傳播速度極其迅速&#xff0c;留給企業的反應時間按分秒計&#xff0c;傳統供應鏈的年度計劃面對劇烈變化的市場環境已失去意義。此外&#xff0c;受近年局勢動蕩的影響&#xff0c;市場需求和供應…

APISIX-簡單使用

APISIX-簡單使用 這個工具還是很不錯的&#xff0c;可視化的配置很清晰 &#xff0c; 想用NGINX的配置模式也是可以的&#xff0c;就是要去修改配置文件了。 APISIX&#xff0c;一個很不錯的可視化工具&#xff0c;用來代替Nginx相當不錯&#xff0c;可作為Nginx的平替方案&…

【Python進階】主流電商平臺數據分析||數據采集返回商品詳情主題鏈接主圖SKU數據

Python是一種高級編程語言&#xff0c;廣泛應用于軟件開發、數據分析、人工智能、科學計算等領域。在軟件開發方面&#xff0c;Python在網站開發、網絡編程、桌面軟件開發等方面有著廣泛的應用。在數據分析和人工智能領域&#xff0c;Python的各種庫如NumPy、Pandas、Matplotli…

守護者:ThingsBoard物聯網網關在溫室環境監測中的應用

系統設計 智慧農業溫室大棚系統由傳感器及執行設備、數據傳輸網關、智慧農業溫室大棚管理平臺組成。 系統支持實時采集溫室大棚內的空氣溫濕度、土壤溫濕度、光照和二氧化碳等環境參數&#xff0c;根據農作物的生長需求自動控制溫室中電器設備的啟停&#xff0c;從而達到植物生…

中移物聯OneMO Cat.1模組推動聯網POS規模應用

在第三方支付蓬勃發展和消費模式不斷革新的時代背景下&#xff0c;新型聯網POS終端以其智能化、便捷化的特點豐富人們生活便利度。在這一變革浪潮中&#xff0c;中移物聯OneMO Cat.1模組ML307R憑借其卓越的性能和成本效益&#xff0c;成為推動聯網POS規模應用的重要力量。 性能…

DHCP 動態分配概述

DHCP 動態分配概述 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;動態主機配置協議&#xff09;是一種網絡協議&#xff0c;用于自動分配IP地址和其他網絡配置參數&#xff08;如子網掩碼、默認網關、DNS服務器&#xff09;給網絡中的設備。這簡化了網絡管…

【Linux】信號集及信號集操作函數

文章目錄 一、信號集是什么&#xff1f;二、信號集操作函數1. sigemptyset2. sigfillset3. sigaddset4. sigdelset5. sigismember6. sigprocmask (僅用于讀取或更改block表)7. sigpending (僅用于讀取pending表) 一、信號集是什么&#xff1f; 對于每個進程, 都有三個信號集, …

k8s集群部署成功后某個節點突然出現notready狀態解決辦法

通過&#xff1a; kubectl get nodes 查看master1節點為not ready 通過查看日志&#xff1a; journalctl -f -u kubelet.service 看到這里 查看狀態&#xff1a; systemctl status kubelet.service 重啟一樣會報錯 執行&#xff1a; swapoff -a 執行后&#xff0c;重啟…

pytorch深度學習-環境搭建

1.Anaconda下載&#xff08;首先安裝Anaconda不需要先安裝Python了&#xff01;&#xff09; 版本 3.11. Download Anaconda Distribution | Anaconda 1.2 跳過注冊直接下載 2.安裝 直接next, (Install for 可以選擇All Users&#xff0c;我選擇的是All Users) 點擊默認選項…

Qt Designer 使用筆記

目錄 qt designer安裝 預覽 Ctrl R 使用 Qt Designer 設計的ui文件可以通過以下命令轉為.py文件 命令行腳本&#xff1a; pycharm工具欄配置&#xff1b; pyqt5也是可以的&#xff1a; 2.2 測試是否配置成功 設置背景顏色&#xff1a; ui收集 qt designer安裝 pip ins…

高耗能工廠實現ESG能源管控的策略與實踐探討-天拓四方

隨著全球氣候變化的加劇和ESG&#xff08;環境、社會和治理&#xff09;理念的普及&#xff0c;高耗能工廠面臨著巨大的挑戰和機遇。如何有效地實現ESG能源管控&#xff0c;不僅關乎企業的可持續發展&#xff0c;也是應對全球環境問題的關鍵一環。本文將探討高耗能工廠實現ESG能…

JavaEE-網絡初識

文章目錄 一、網絡背景1.1 起源1.2 國內網絡的發展 二、關鍵概念2.1 網絡2.2 設備2.3 ip地址與端口號 三、協議3.1 協議分層3.2 OSI七層模型3.3 TCP/IP五層模型3.4 數據傳輸過程的簡單敘述 一、網絡背景 1.1 起源 在國外大概時上世紀70年代左右&#xff0c;網絡就出現了&…

U-Mail郵件系統取得多項適配認證,全面支持國產化信創環境

隨著信息技術的發展&#xff0c;信息化建設越來越深入到社會各個領域&#xff0c;成為驅動經濟社會發展的重要力量。在此背景下&#xff0c;我國正加快構建國家信息安全保障體系&#xff0c;實現自主可控&#xff0c;形成安全可靠的信息技術體系。這正是我們所說的“信創”&…