初識(shí) Redis
《 Redis 開發(fā)與運(yùn)維》的學(xué)習(xí)筆記,希望大家多多指導(dǎo)。
什么是 Redis
- Redis 的全稱是 Remote Dictionary Server, 遠(yuǎn)程字典服務(wù)器。
- Redis是一個(gè)開源的使用ANSI C 語(yǔ)言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的API,是一種 NoSQL 數(shù)據(jù)庫(kù)。
- 相關(guān)網(wǎng)站
Redis 的特點(diǎn)
-
- 速度快
- 為什么快 ?
- Redis 的所有數(shù)據(jù)都是存放在內(nèi)存中的(最主要的原因)
- Redis 是用 C 語(yǔ)言實(shí)現(xiàn)的, 一般來(lái)說(shuō) C 語(yǔ)言實(shí)現(xiàn)的程序“距離”操作系統(tǒng)更近,執(zhí)行速度相對(duì)會(huì)更快
- Redis 使用了單線程架構(gòu),預(yù)防了多線程可能產(chǎn)生的競(jìng)爭(zhēng)問題
- Redis 源代碼優(yōu)良,集性能和優(yōu)雅于一身
- 基于鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)服務(wù)器
-
- 豐富的功能
- 5 種數(shù)據(jù)結(jié)構(gòu)
- 字符串
- Bitmaps
- HyperLogLog
- GEO , 地理信息定位 ( 3.2 版本 )
- 哈希
- 列表
- 集合
- 有序集合
- 提供了鍵過(guò)期功能,可以用來(lái)實(shí)現(xiàn)緩存。
- 提供了發(fā)布訂閱功能,可以用來(lái)實(shí)現(xiàn)消息系統(tǒng)。
- 支持 Lua 腳本功能,可以利用 Lua 創(chuàng)造出新的 Redis 命令。
- 提供了簡(jiǎn)單的事務(wù)功能,能在一定程度上保證事務(wù)特性。
- 提供了流水線(Pipeline)功能,這樣客戶端能將一批命令一次性傳到 Redis,減少了網(wǎng)絡(luò)的開銷。
-
- 簡(jiǎn)單穩(wěn)定
- 簡(jiǎn)單
- Redis 的源碼很少
- Redis 使用單線程模型
- Redis 不需要依賴于操作系統(tǒng)中的類庫(kù)
-
- 客戶端語(yǔ)言多
- Redis 提供了簡(jiǎn)單的 TCP 通信協(xié)議
-
- 持久化
- RDB
- AOF
-
- 主從復(fù)制
- Redis 提供了復(fù)制功能,實(shí)現(xiàn)了多個(gè)相同數(shù)據(jù)的 Redis 副本,復(fù)制功能是分布式 Redis 的基礎(chǔ)
-
- 高可用和分布式
- 2.8 版本,高可用實(shí)現(xiàn) Redis Sentinel,它能夠保證 Redis 節(jié)點(diǎn)的故障發(fā)現(xiàn)和故障自動(dòng)轉(zhuǎn)移
- 3.0 版本, 分布式實(shí)現(xiàn) Redis Cluster, 它是 Redis 真正的分布式實(shí)現(xiàn),提供了高可用、讀寫和容量的擴(kuò)展性。
Redis 使用場(chǎng)景
Redis 可以做什么
- 緩存
-
- 排行榜系統(tǒng)
- 列表和有序集合數(shù)據(jù)結(jié)構(gòu)
- 3.計(jì)數(shù)器應(yīng)用
- 視頻播放數(shù)
- 4.社交網(wǎng)絡(luò)
- 贊/踩,粉絲,共同好友/喜好, 推送,下拉刷新
-
- 消息隊(duì)列系統(tǒng)
- Redis 提供了發(fā)布訂閱通能和阻塞隊(duì)列的功能,基本可以滿足簡(jiǎn)單的消息隊(duì)列功能
Redis 不可以做什么
- 數(shù)據(jù)規(guī)模
- 基于內(nèi)存,不適合大規(guī)模數(shù)據(jù),經(jīng)濟(jì)成本非常高;適用于小規(guī)模數(shù)據(jù)
- 數(shù)據(jù)冷熱
- 熱數(shù)據(jù)
- 指需要頻繁操作的數(shù)據(jù)
- 冷數(shù)據(jù)
- 熱數(shù)據(jù)適合放到 Redis 中加速讀寫,冷數(shù)據(jù)不適合
- 熱數(shù)據(jù)
用好 Redis 的建議
- 切勿當(dāng)作黑盒使用,開發(fā)與運(yùn)維同樣重要
- 閱讀源碼
Redis 的基礎(chǔ)操作
安裝
- Linux 系統(tǒng)
# 下載 Redis 制定版本的源碼壓縮包到當(dāng)前目錄
wget http://download.redis.io/releases/redis-3.0.7.tar.gz
# 解壓縮
tar xzf redis-3.0.7.tar.gz
# 建立 redis 目錄的軟連接,為了不把 redis 目錄固定到指定版本上,利于未來(lái)升級(jí)
ln -s redis-3.0.7 redis
cd redis
# 將相關(guān)運(yùn)行文件放到 /usr/local/bin/ 下,編譯之前確保操作系統(tǒng)已經(jīng)安裝gcc
make
# 安裝
make install
# 安裝結(jié)束后,驗(yàn)證
redis-cli -v
- Windows 下
配置、啟動(dòng)、操作、關(guān)閉 Redis
-
src 和 /usr/local/bin 目錄下可執(zhí)行文件說(shuō)明
可執(zhí)行文件 作用 redis-server 啟動(dòng) Redis redis-cli Redis 命令行客戶端 redis-benchmark Redis 基準(zhǔn)測(cè)試工具 redis-check-aof Redis AOF 持久化文件檢測(cè)和修復(fù)工具 redis-check-dump Redis RDB 持久化文件檢測(cè)和修復(fù)工具 redis-sentinel 啟動(dòng) Redis Sentinel -
啟動(dòng) Redis
-
默認(rèn)配置
# 按照默認(rèn)配置啟動(dòng) redis-server -
運(yùn)行啟動(dòng)
redis server --configName1 configValue --configName2 configValue2 # 例如, 以 6666 作為端口啟動(dòng) Redis redis-server --port 6666 -
配置文件啟動(dòng)
-
默認(rèn)配置文件位置: redis 文件夾下 redis.conf
配置名 配置說(shuō)明 port 端口 logfile 日志文件 dir Redis 工作目錄(粗放持久化文件和日志文件) daemonize 是否以守護(hù)進(jìn)程的方式啟動(dòng) Redis (后臺(tái)啟動(dòng)) redis-server /opt/redis/redis.conf
-
-
Redis 命令行客戶端
# 兩種連接方式
## 第一種 redis-cli -h {host} -p {port}
redis-cli -h 127.0.0.1 -p 6379
# 取值
get hello
## 第二種 redis-cli -h ip{host} -p {port} {command}
redis-cli -h 127.0.0.1 -p 6379 get hello
- 停止 Redis 服務(wù)
# 關(guān)閉過(guò)程: 斷開與客戶端的連接、持久化文件生成
`redis-cli shutdown
# 帶參數(shù)關(guān)閉
## 關(guān)閉前不生成持久化文件
redis-cli shutdown nosave
## 關(guān)閉前生成持久化文件
redis-cli shutdown save
# 使用殺死進(jìn)程的方法關(guān)閉
kill redis進(jìn)程號(hào)
# 注意:不能粗暴的使用 kill -9 強(qiáng)制殺死進(jìn)程,這樣不會(huì)持久化操作,同時(shí)有可能不能正常關(guān)閉和丟失數(shù)據(jù)
- 卸載 Redis
- 關(guān)閉 Redis 服務(wù)
- 刪除相關(guān)文件或文件夾
- 安裝目錄文件夾
- /usr/local/bin 下的啟動(dòng)文件
設(shè)置 Redis 開機(jī)自啟動(dòng) ( Linux )
-
init.d 方式 ( CentOS 6 之前版本,包括 CentOS6 )
- 基本原理
- 系統(tǒng)開機(jī)啟動(dòng)時(shí)會(huì)去加載 /etc/init.d/ 下面的腳本,通常而言每個(gè)腳本文件會(huì)自定義實(shí)現(xiàn)程序的啟動(dòng);若想將新的程序開機(jī)自啟動(dòng),只需在該目錄下添加一個(gè)自定義啟動(dòng)程序的腳本,然后設(shè)置相應(yīng)規(guī)則即可。
- 步驟
-
編寫自啟動(dòng)腳本 redis
# chkconfig: 2345 10 90 # description: Start and Stop redis PATH=/usr/local/bin:/sbin:/usr/bin:/bin REDISPORT=6379 #實(shí)際環(huán)境而定 EXEC=/usr/local/bin/redis-server #實(shí)際環(huán)境而定 REDIS_CLI=/usr/local/bin/redis-cli #實(shí)際環(huán)境而定 PIDFILE=/var/run/redis.pid CONF="/opt/redis/redis.conf" #實(shí)際環(huán)境而定 case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed." else echo "Starting Redis server..." $EXEC $CONF fi if [ "$?"="0" ] then echo "Redis is running..." fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE exists, process is not running." else PID=$(cat $PIDFILE) echo "Stopping..." $REDIS_CLI -p $REDISPORT SHUTDOWN while [ -x $PIDFILE ] do echo "Waiting for Redis to shutdown..." sleep 1 done echo "Redis stopped" fi ;; restart|force-reload) ${0} stop ${0} start ;; *) echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2 exit 1 esac -
設(shè)置權(quán)限并測(cè)試
# 設(shè)置可執(zhí)行權(quán)限 chmod 755 redis # 啟動(dòng)測(cè)試 /etc/init.d/redis start -
設(shè)置開機(jī)自啟動(dòng)并測(cè)試
# 設(shè)置開機(jī)自啟動(dòng) chkconfig redis on # 關(guān)機(jī)重啟并驗(yàn)證 reboot redis-cli
-
- 注意
- redis 服務(wù)名稱可以自定義
- redis_6666, redis_666.service
- redis 服務(wù)名稱可以自定義
- 基本原理
-
systemctl 方式 ( CentOS7 )
- 基本原理
- 使用 systemctl 進(jìn)行服務(wù)管理
- 步驟
- 創(chuàng)建systemctl 服務(wù)
# 在/lib/systemd/system 目錄下創(chuàng)建一個(gè)腳本文件redis.service # 腳本內(nèi)容 # 基本信息 [Unit] ## 描述信息 Description=Redis ## 在哪個(gè)服務(wù)之后啟動(dòng) After=network.target # 服務(wù)信息 [Service] Type=forking ## 啟動(dòng)服務(wù)的命令 ExecStart=/usr/local/bin/redis-server /opt/redis/redis.conf ## 重啟服務(wù)的命令 ExecReload=/usr/local/bin/redis-server -s reload ## 停止服務(wù)的命令 ExecStop=/usr/local/bin/redis-server -s stop PrivateTmp=true # 安裝相關(guān)信息 [Install] ## 以何種方式啟動(dòng),當(dāng)系統(tǒng)以多用戶方式(默認(rèn)的運(yùn)行級(jí)別)啟動(dòng)時(shí),這個(gè)服務(wù)需要被自動(dòng)運(yùn)行 WantedBy=multi-user.target - 刷新配置并設(shè)置為開機(jī)啟用
# 刷新配置 systemctl daemon-reload # 啟動(dòng)服務(wù) systemctl start redis.service # 重新啟動(dòng) systemctl restart redis.service # 停止服務(wù) systemctl stop redis.service # 開機(jī)啟用 systemctl enable redis.service # 禁止開機(jī)啟動(dòng) systemctl disable redis.service # 當(dāng)前狀態(tài) systemctl status redis.service
- 創(chuàng)建systemctl 服務(wù)
- 基本原理