Redis 初識

初識 Redis

《 Redis 開發(fā)與運維》的學(xué)習(xí)筆記眨唬,希望大家多多指導(dǎo)猎贴。

什么是 Redis

  • Redis 的全稱是 Remote Dictionary Server, 遠(yuǎn)程字典服務(wù)器第队。
  • Redis是一個開源的使用ANSI C 語言編寫冀惭、支持網(wǎng)絡(luò)轩勘、可基于內(nèi)存亦可持久化的日志型栈雳、Key-Value數(shù)據(jù)庫,并提供多種語言的API蝉娜,是一種 NoSQL 數(shù)據(jù)庫唱较。
  • 相關(guān)網(wǎng)站

Redis 的特點

    1. 速度快
    • 為什么快 ?
      • Redis 的所有數(shù)據(jù)都是存放在內(nèi)存中的(最主要的原因)
      • Redis 是用 C 語言實現(xiàn)的, 一般來說 C 語言實現(xiàn)的程序“距離”操作系統(tǒng)更近召川,執(zhí)行速度相對會更快
      • Redis 使用了單線程架構(gòu)南缓,預(yù)防了多線程可能產(chǎn)生的競爭問題
      • Redis 源代碼優(yōu)良,集性能和優(yōu)雅于一身
    1. 基于鍵值對的數(shù)據(jù)結(jié)構(gòu)服務(wù)器
    1. 豐富的功能
    • 5 種數(shù)據(jù)結(jié)構(gòu)
      • 字符串
      • Bitmaps
      • HyperLogLog
      • GEO , 地理信息定位 ( 3.2 版本 )
      • 哈希
      • 列表
      • 集合
      • 有序集合
    • 提供了鍵過期功能荧呐,可以用來實現(xiàn)緩存汉形。
    • 提供了發(fā)布訂閱功能纸镊,可以用來實現(xiàn)消息系統(tǒng)。
    • 支持 Lua 腳本功能概疆,可以利用 Lua 創(chuàng)造出新的 Redis 命令逗威。
    • 提供了簡單的事務(wù)功能,能在一定程度上保證事務(wù)特性岔冀。
    • 提供了流水線(Pipeline)功能庵楷,這樣客戶端能將一批命令一次性傳到 Redis,減少了網(wǎng)絡(luò)的開銷楣颠。
    1. 簡單穩(wěn)定
    • 簡單
      • Redis 的源碼很少
      • Redis 使用單線程模型
      • Redis 不需要依賴于操作系統(tǒng)中的類庫
    1. 客戶端語言多
    • Redis 提供了簡單的 TCP 通信協(xié)議
    1. 持久化
    • RDB
    • AOF
    1. 主從復(fù)制
    • Redis 提供了復(fù)制功能尽纽,實現(xiàn)了多個相同數(shù)據(jù)的 Redis 副本,復(fù)制功能是分布式 Redis 的基礎(chǔ)
    1. 高可用和分布式
    • 2.8 版本童漩,高可用實現(xiàn) Redis Sentinel,它能夠保證 Redis 節(jié)點的故障發(fā)現(xiàn)和故障自動轉(zhuǎn)移
    • 3.0 版本弄贿, 分布式實現(xiàn) Redis Cluster, 它是 Redis 真正的分布式實現(xiàn),提供了高可用矫膨、讀寫和容量的擴展性差凹。

Redis 使用場景

Redis 可以做什么

    1. 緩存
    1. 排行榜系統(tǒng)
    • 列表和有序集合數(shù)據(jù)結(jié)構(gòu)
  • 3.計數(shù)器應(yīng)用
    • 視頻播放數(shù)
  • 4.社交網(wǎng)絡(luò)
    • 贊/踩,粉絲侧馅,共同好友/喜好危尿, 推送,下拉刷新
    1. 消息隊列系統(tǒng)
    • Redis 提供了發(fā)布訂閱通能和阻塞隊列的功能馁痴,基本可以滿足簡單的消息隊列功能

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ā)與運維同樣重要
    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 目錄固定到指定版本上法褥,利于未來升級
ln -s redis-3.0.7 redis
cd redis
# 將相關(guān)運行文件放到 /usr/local/bin/ 下,編譯之前確保操作系統(tǒng)已經(jīng)安裝gcc
make
# 安裝
make install

# 安裝結(jié)束后酬屉,驗證
redis-cli -v

配置半等、啟動、操作呐萨、關(guān)閉 Redis

  • src 和 /usr/local/bin 目錄下可執(zhí)行文件說明

    可執(zhí)行文件 作用
    redis-server 啟動 Redis
    redis-cli Redis 命令行客戶端
    redis-benchmark Redis 基準(zhǔn)測試工具
    redis-check-aof Redis AOF 持久化文件檢測和修復(fù)工具
    redis-check-dump Redis RDB 持久化文件檢測和修復(fù)工具
    redis-sentinel 啟動 Redis Sentinel
  • 啟動 Redis

    • 默認(rèn)配置

      # 按照默認(rèn)配置啟動
      redis-server
      
    • 運行啟動

      redis server --configName1 configValue --configName2 configValue2
      # 例如, 以 6666 作為端口啟動 Redis
      redis-server --port 6666
      
    • 配置文件啟動

      • 默認(rèn)配置文件位置: redis 文件夾下 redis.conf

        配置名 配置說明
        port 端口
        logfile 日志文件
        dir Redis 工作目錄(粗放持久化文件和日志文件)
        daemonize 是否以守護(hù)進(jìn)程的方式啟動 Redis (后臺啟動)
        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)閉過程: 斷開與客戶端的連接杀饵、持久化文件生成
`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)程號

# 注意:不能粗暴的使用 kill -9 強制殺死進(jìn)程,這樣不會持久化操作垛吗,同時有可能不能正常關(guān)閉和丟失數(shù)據(jù)
  • 卸載 Redis
    • 關(guān)閉 Redis 服務(wù)
    • 刪除相關(guān)文件或文件夾
      • 安裝目錄文件夾
      • /usr/local/bin 下的啟動文件

設(shè)置 Redis 開機自啟動 ( Linux )

  • init.d 方式 ( CentOS 6 之前版本凹髓,包括 CentOS6 )

    • 基本原理
      • 系統(tǒng)開機啟動時會去加載 /etc/init.d/ 下面的腳本,通常而言每個腳本文件會自定義實現(xiàn)程序的啟動怯屉;若想將新的程序開機自啟動蔚舀,只需在該目錄下添加一個自定義啟動程序的腳本,然后設(shè)置相應(yīng)規(guī)則即可锨络。
    • 步驟
      • 編寫自啟動腳本 redis

        # chkconfig: 2345 10 90
        # description: Start and Stop redis
        
        PATH=/usr/local/bin:/sbin:/usr/bin:/bin
        
        REDISPORT=6379 #實際環(huán)境而定
        EXEC=/usr/local/bin/redis-server #實際環(huán)境而定
        REDIS_CLI=/usr/local/bin/redis-cli #實際環(huán)境而定
        
        PIDFILE=/var/run/redis.pid
        CONF="/opt/redis/redis.conf" #實際環(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)限并測試

        # 設(shè)置可執(zhí)行權(quán)限
        chmod 755 redis
        
        # 啟動測試
        /etc/init.d/redis start
        
        
      • 設(shè)置開機自啟動并測試

        # 設(shè)置開機自啟動
        chkconfig redis on
        
        # 關(guā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)建一個腳本文件redis.service
        
        # 腳本內(nèi)容
        
        # 基本信息
        [Unit]
        ## 描述信息
        Description=Redis
        ## 在哪個服務(wù)之后啟動
        After=network.target
        
        # 服務(wù)信息
        [Service]
        Type=forking
        ## 啟動服務(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)系統(tǒng)以多用戶方式(默認(rèn)的運行級別)啟動時,這個服務(wù)需要被自動運行
        WantedBy=multi-user.target
        
      • 刷新配置并設(shè)置為開機啟用
        # 刷新配置
        systemctl daemon-reload
        
        # 啟動服務(wù)            
        systemctl start redis.service
        # 重新啟動
        systemctl restart redis.service
        # 停止服務(wù)
        systemctl stop redis.service
        # 開機啟用
        systemctl enable redis.service
        # 禁止開機啟動
        systemctl disable redis.service 
        # 當(dāng)前狀態(tài)
        systemctl status redis.service
        
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羡儿,一起剝皮案震驚了整個濱河市礼患,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掠归,老刑警劉巖缅叠,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虏冻,居然都是意外死亡肤粱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門厨相,熙熙樓的掌柜王于貴愁眉苦臉地迎上來领曼,“玉大人,你說我怎么就攤上這事蛮穿∈荆” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵践磅,是天一觀的道長单刁。 經(jīng)常有香客問我,道長府适,這世上最難降的妖魔是什么幻碱? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮细溅,結(jié)果婚禮上褥傍,老公的妹妹穿的比我還像新娘。我一直安慰自己喇聊,他們只是感情好恍风,可當(dāng)我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著誓篱,像睡著了一般朋贬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上窜骄,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天锦募,我揣著相機與錄音,去河邊找鬼邻遏。 笑死糠亩,一個胖子當(dāng)著我的面吹牛虐骑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赎线,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼廷没,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了垂寥?” 一聲冷哼從身側(cè)響起颠黎,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎滞项,沒想到半個月后狭归,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡文判,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年过椎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片律杠。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡潭流,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出柜去,到底是詐尸還是另有隱情灰嫉,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布嗓奢,位于F島的核電站讼撒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏股耽。R本人自食惡果不足惜根盒,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望物蝙。 院中可真熱鬧炎滞,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至森瘪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間票堵,已是汗流浹背扼睬。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悴势,地道東北人窗宇。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓措伐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親担映。 傳聞我的和親對象是個殘疾皇子废士,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容