初識Redis
一句話理解Redis:
Redis是一個基于內存的、支持多種數據結構的高性能鍵值數據庫,常被用于緩存、分布式鎖和消息隊列。
和 MySQL 的區別:
特點 | Redis | MySQL |
---|---|---|
類型 | 非關系型(NoSQL) | 關系型(SQL) |
存儲結構 | 鍵值對(Key-Value) | 表結構(行、列) |
存儲位置 | 主要存儲在內存中,可選擇持久化到磁盤 | 存儲在磁盤中 |
訪問速度 | 極快(納秒級) | 相對較慢(毫秒級) |
使用場景 | 緩存、排行榜、會話存儲、限流、隊列等 | 持久化數據、復雜查詢、事務處理等 |
認識NoSQL
MySQL是類似下圖的結構:
而NoSQL沒有這種強約束,不僅僅是鍵值對,同時也可以以json
形式存儲,常見的還有Graph,但使用的相對較少,一般用于社交app
。
總結一下區別如下:
SQL | NoSQL | |
---|---|---|
數據結構 | 結構化(Structured) | 非結構化 |
數據關聯 | 關聯的(Relational) | 無關聯的 |
查詢方式 | SQL查詢 | 非SQL |
事務特性 | ACID | BASE |
存儲方式 | 磁盤 | 內存 |
擴展性 | 垂直 | 水平 |
使用場景 | 1)數據結構固定 2)相關業務對數據安全性、一致性要求較高 | 1)數據結構不固定 2)對一致性、安全性要求不高 3)對性能要求 |
認識Redis
特征:
- 鍵值(key-value)型, value支持多種不同數據結構, 功能豐富
- 單線程, 每個命令具備原子性
- 低延遲, 速度快 (基于內存、IO多路復用、良好的編碼)。
- 支持數據持久化
- 支持主從集群、分片集群
- 支持多語言客戶端
在這里我有個疑問,為什么讀寫內存就比讀寫磁盤快呢?
🚀 1. 硬件本質不同
項目 | 內存(RAM) | 磁盤(HDD/SSD) |
---|---|---|
介質 | 電子 | 磁性 or 閃存 |
訪問方式 | 直接隨機訪問(Random Access) | 順序訪問為主(特別是機械硬盤) |
速度 | 納秒級(10?? 秒) | 毫秒級(10?3 秒,HDD)或微秒級(10?? 秒,SSD) |
- 內存是電路層級的操作,訪問一個數據大概只需幾十納秒;
- 機械硬盤(HDD)要轉磁盤、移動磁頭來定位數據,耗時幾個毫秒;
- 固態硬盤(SSD)雖然比 HDD 快很多,但依舊是微秒級,遠不如內存快。
2.操作系統層面
讓我想起了之前操作系統老師說過的關于內存,單片機是沒有操作系統的,所以每次寫完代碼需要借助工具把代碼燒錄進去,程序才能跑。而且單片機的 CPU
是直接操作內存的物理地址。
這種情況下,不可能在內存中運行兩個程序,如果第一個程序在地址為1000的地方寫入一個值,那么第二個程序就會覆蓋掉當前位置的全部內容,所以程序會立刻崩潰。
操作系統提供了一種機制,將不同進程的虛擬地址和不同內存的物理地址映射起來。于是,程序所使用的內存地址叫虛擬內存地址,實際在硬件里面的空間地址叫物理內存地址。
使得CPU
直接訪問物理內存的數據,無需系統調用,全靠硬件完成,所以速度會很快。而磁盤讀寫則會涉及用戶態與內核態的切換、函數調用、磁頭移動、磁盤旋轉等,時間不是一個量級的。
知識是網狀的,互相關聯、相互貫通,很多看似復雜的問題其實都是基礎知識的串聯,多思考多發問是非常必要的。
安裝Redis并熟悉啟動方式
安裝redis
我是使用的Ubuntu 22.04
,注意當前指令僅適用于Ubuntu,
通過apt
安裝穩定版本,
sudo apt update
sudo apt install -y redis
可以通過以下指令檢查是否安裝成功
# 啟動 Redis(如果還未啟動)
sudo systemctl start redis# 設置開機自啟(可選)
sudo systemctl enable redis# 檢查運行狀態
sudo systemctl status redis# 測試連接
redis-cli ping
# 返回 PONG 表示 Redis 正常運行
如果要關閉redis
,
ps -ef | grep redis #查出redis進程PID#關閉redis進程
sudo kill 4254 #4254是舉例,要替換為自己獲取的PID#檢查是否關閉成功
ps -ef | grep redis#如果發現redis換了一個PID仍在運行,可能是被某服務器托管自動重啟
#如果使用systemd管理redis服務,用以下指令關閉redis
sudo systemctl stop redis
設置后臺啟動
- 修改監聽的地址,默認是127.0.0.1,會導致只能在本地訪問。修改為0.0.0.0則可以在任意IP訪問,生產環境不要設置為0.0.0.0
#一般情況下,redis.conf位置在/etc/redis/redis.conf
#使用root權限打開配置文件,可以用vim或者nano文本編輯器打開,看個人習慣
#不使用sudo,權限不夠,無法修改文件內容
sudo nano /etc/redis/redis.conf
或者sudo vim /etc/redis/redis.conf如圖
bind 0.0.0.0
- 守護線程,修改為yes后即可后臺運行
daemonize yes
- 為保證安全性,設置訪問
redis
必須輸入密碼
requirepass 123321 #可以設置為自己想設置的密碼
- 可以打開一下日志功能,便于報錯查找問題
像我的是自動打開的,而且日志文件位置如圖。
一般來說,使用Ubuntu
,通過apt
一鍵部署,在這里只需要修改監聽IP和設置密碼。
修改完成后,使用指定配置文件啟動redis
,并檢查是否成功設置后臺啟動。
- 打開開機自啟
設置 Redis 開機自啟(推薦做法)
在這之前先kill掉redis進程
sudo killall redis-server
- 啟用 Redis 服務
sudo systemctl enable redis-server
- 立即啟動 Redis 服務
sudo systemctl start redis-server
- 查看 Redis 服務狀態
sudo systemctl status redis-server
如果你看到 active (running)
狀態,說明 Redis 正常運行且設置為開機自啟了。
常用命令總結:
操作 | 命令 |
---|---|
啟動 Redis | sudo systemctl start redis-server |
停止 Redis | sudo systemctl stop redis-server |
重啟 Redis | sudo systemctl restart redis-server |
查看狀態 | sudo systemctl status redis-server |
設置開機啟動 | sudo systemctl enable redis-server |
禁用開機啟動 | sudo systemctl disable redis-server |
現在對于redis的基本配置就結束了,后面即將開始redis命令行的學習
如果我的內容對你有幫助,請點贊,評論,收藏。創作不易,大家的支持就是我堅持下去的動力,希望我們共同進步