Redis 初識(shí)

初識(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)

    1. 速度快
    • 為什么快 ?
      • 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)雅于一身
    1. 基于鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)服務(wù)器
    1. 豐富的功能
    • 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ò)的開銷。
    1. 簡(jiǎn)單穩(wěn)定
    • 簡(jiǎn)單
      • Redis 的源碼很少
      • Redis 使用單線程模型
      • Redis 不需要依賴于操作系統(tǒng)中的類庫(kù)
    1. 客戶端語(yǔ)言多
    • Redis 提供了簡(jiǎn)單的 TCP 通信協(xié)議
    1. 持久化
    • RDB
    • AOF
    1. 主從復(fù)制
    • Redis 提供了復(fù)制功能,實(shí)現(xiàn)了多個(gè)相同數(shù)據(jù)的 Redis 副本,復(fù)制功能是分布式 Redis 的基礎(chǔ)
    1. 高可用和分布式
    • 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 可以做什么

    1. 緩存
    1. 排行榜系統(tǒng)
    • 列表和有序集合數(shù)據(jù)結(jié)構(gòu)
  • 3.計(jì)數(shù)器應(yīng)用
    • 視頻播放數(shù)
  • 4.社交網(wǎng)絡(luò)
    • 贊/踩,粉絲,共同好友/喜好, 推送,下拉刷新
    1. 消息隊(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ù)不適合

用好 Redis 的建議

    1. 切勿當(dāng)作黑盒使用,開發(fā)與運(yùn)維同樣重要
    1. 閱讀源碼

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

配置、啟動(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
  • 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
        
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,337評(píng)論 0 10
  • NOSQL類型簡(jiǎn)介鍵值對(duì):會(huì)使用到一個(gè)哈希表,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù),如redis,volde...
    MicoCube閱讀 4,160評(píng)論 2 27
  • Redis簡(jiǎn)介 Redis 是完全開源免費(fèi)的,遵守BSD協(xié)議,是一個(gè)高性能的key-value數(shù)據(jù)庫(kù)。Redis ...
    drfung閱讀 1,035評(píng)論 0 10
  • 獨(dú)立緩存服務(wù)器: LinuxCentOS Redis版本: 3.0 下面我們針對(duì)于Redis安裝做下詳細(xì)的記錄: ...
    ITsupuerlady閱讀 237評(píng)論 0 1
  • 海洋之心 1997年,在影視大片火熱人們爭(zhēng)相上座的熱潮中,《泰坦尼克號(hào)》以其畫面制作的驚險(xiǎn),生命末日來(lái)臨的恐怖,以...
    NightTingale閱讀 518評(píng)論 0 0

友情鏈接更多精彩內(nèi)容