乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Redis學(xué)習(xí)四(運(yùn)維指南).

       路人甲Java 2022-05-05 發(fā)布于北京

      一、上線規(guī)劃

      一般 redis 的參數(shù)配置都在 redis.conf 中,在上線前根據(jù)實(shí)際環(huán)境配置好合適參數(shù),能有效提高 redis 的可用性。

      • redis 的運(yùn)行機(jī)器 CPU 不求核數(shù)多,但求主頻高,Cache大,因?yàn)?redis 主處理模式是單進(jìn)程的。

      • 留意 redis 日志文件的配置,對(duì)應(yīng) logfile 參數(shù)。redis.log 為 redis 主日志,sentinel.log 為 sentinel 監(jiān)控日志。

      • 關(guān)閉 THP,這個(gè)默認(rèn)的 Linux 內(nèi)存頁(yè)面大小分配策略會(huì)導(dǎo)致 RDB 時(shí)出現(xiàn)巨大的 latency 和巨大的內(nèi)存占用。關(guān)閉方法為:

      echo never > /sys/kernel/mm/transparent_hugepage/enabled
      echo never > /sys/kernel/mm/transparent_hugepage/defrag
      
      • 一定要設(shè)置最大內(nèi)存 maxmemory 參數(shù),否則物理內(nèi)存用爆了就會(huì)大量使用 Swap,寫 RDB 文件時(shí)的速度很慢。設(shè)置的參數(shù)參考:機(jī)器內(nèi)存 * 45% / 1.2。(1.2 為內(nèi)存碎片)

      • maxmemory-policy 策略,則當(dāng) redis 內(nèi)存數(shù)據(jù)達(dá)到 maxmemory 時(shí),會(huì)根據(jù) maxmemory-policy 配置來淘汰內(nèi)存數(shù)據(jù),以避免OOM。

        • noeviction:不執(zhí)行任何淘汰策略,當(dāng)達(dá)到內(nèi)存限制的時(shí)候客戶端執(zhí)行命令會(huì)報(bào)錯(cuò),把redis當(dāng)做DB時(shí),推薦使用。
        • allkeys-lru:從所有數(shù)據(jù)范圍內(nèi)查找到最近最少使用的數(shù)據(jù)進(jìn)行淘汰,直到有足夠的內(nèi)存來存放新數(shù)據(jù)。
        • volatile-lru:默認(rèn),從所有的最近最少訪問數(shù)據(jù)范圍內(nèi)查找設(shè)置到過期時(shí)間的數(shù)據(jù)進(jìn)行淘汰,如果查找不到數(shù)據(jù),則回退到 noeviction。
        • allkeys-random:從所有數(shù)據(jù)范圍內(nèi)隨機(jī)選擇key進(jìn)行刪除。
        • volatile-random:從設(shè)置了過期時(shí)間的數(shù)據(jù)范圍內(nèi)隨機(jī)選擇key進(jìn)行刪除。
        • volatile-ttl:從設(shè)置了過期時(shí)間的數(shù)據(jù)范圍內(nèi)優(yōu)先選擇設(shè)置了TTL的key進(jìn)行刪除。
      • 持久化配置。在配置上有三種選擇:不持久化,RDB,RDB + AOF(默認(rèn))。另外,如果為主從復(fù)制關(guān)系,建議主服務(wù)器關(guān)閉持久化。

      # RDB 持久化配置
      save 900 1              #在900秒(15分鐘)之后,如果至少有 1 個(gè)key發(fā)生變化,則 dump 內(nèi)存快照。
      save 300 10            #在300秒(5分鐘)之后,如果至少有 10 個(gè)key發(fā)生變化,則 dump 內(nèi)存快照。
      save 60 10000        #在60秒(1分鐘)之后,如果至少有 10000 個(gè)key發(fā)生變化,則 dump 內(nèi)存快照。
      # AOF 持久化配置
      appendfsync always     #每次有數(shù)據(jù)修改發(fā)生時(shí)都會(huì)寫入AOF文件。
      appendfsync everysec  #每秒鐘同步一次,該策略為AOF的缺省策略。
      appendfsync no          #從不同步。高效但是數(shù)據(jù)不會(huì)被持久化。
      
      • redis 使用的是單進(jìn)程(除持久化時(shí)),所以在配置時(shí),一個(gè)實(shí)例只會(huì)用到一個(gè)CPU。那么如何指定 redis 使用的 CPU 呢?
      #顯示進(jìn)程運(yùn)行的CPU (15361 為 redis-server 的進(jìn)程號(hào))。顯示結(jié)果的 f 實(shí)際上是二進(jìn)制4個(gè)低位均為 1 的 bitmask,每一個(gè) 1 對(duì)應(yīng)于 1 個(gè)CPU,表示該進(jìn)程在 4 個(gè)CPU上運(yùn)行
      [root@localhost redis] taskset -p 15361
      pid 15361's current affinity mask: f     
      #指定進(jìn)程運(yùn)行在某個(gè)特定的CPU上。該命令的 3 表示 CPU 將只會(huì)運(yùn)行在第 4 個(gè)CPU上(從0開始計(jì)數(shù))
      [root@localhost redis] taskset -pc 3 15361
      pid 15361's current affinity list: 0-3
      pid 15361's new affinity list: 3
      

      二、常見運(yùn)維操作

      服務(wù)功能運(yùn)維

      • 啟動(dòng) redis:redis-server redis.conf
      • 啟動(dòng) redis-sentinel:redis-sentinel sentinel.conf
      • 停止 redis,注意 kill -9 關(guān)閉可能會(huì)丟失數(shù)據(jù):redis-cli shutdown
      • 驗(yàn)證密碼(或在連接的時(shí)候指定密碼):auth password(/usr/bin/redis-cli -a 123456)
      • 查看配置:config get *
      • 修改配置:
      # 臨時(shí)配置
      127.0.0.1:6379> config set requirepass 123456
      OK
      # 永久配置,將目前服務(wù)器的參數(shù)配置寫入 redis.conf
      127.0.0.1:6379> config rewrite
      OK
      # 永久配置也可通過直接修改 redis.conf 的方式
      
      • 選擇數(shù)據(jù)庫(kù)(默認(rèn)連接的數(shù)據(jù)庫(kù)是0,默認(rèn)數(shù)據(jù)庫(kù)數(shù)量是16個(gè)):select db-index

      • 將 key 從當(dāng)前數(shù)據(jù)庫(kù)移動(dòng)到指定數(shù)據(jù)庫(kù):move key db-index

      • 清空當(dāng)前數(shù)據(jù)庫(kù),生產(chǎn)上禁止使用:flushdb

      • 清空所有數(shù)據(jù)庫(kù),生產(chǎn)上禁止使用:flushall

      • RDB 持久化命令:

        • BGSAVE:后臺(tái)子進(jìn)程進(jìn)行RDB持久化
        • SAVE:主進(jìn)程進(jìn)行RDB,生產(chǎn)環(huán)境千萬(wàn)別用,服務(wù)器將無法響應(yīng)任何操作
        • LASTSAVE: 返回上一次成功SAVE的Unix時(shí)間
      • AOF 持久化命令:BGREWRITEAOF

      • 設(shè)定 crontab 定時(shí)備份持久化數(shù)據(jù):cp /var/lib/redis/dump.rdb /somewhere/safe/dump.$(date +%Y%m%d%H%M).rdb

      • 執(zhí)行 lua 腳本:redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3

      • 發(fā)送原始的 redis protocl 格式數(shù)據(jù)到服務(wù)器端執(zhí)行: echo -en '*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | redis-cli -a 123456 --pipe

      服務(wù)性能運(yùn)維

      • 查看連接的客戶端:client list
      • 探測(cè)服務(wù)是否可用(返回 pong 說明正常):ping
      • 探測(cè)服務(wù)延遲,千兆網(wǎng)卡一般延遲在 0.16ms 左右:
      [root@localhost redis]# redis-cli --latency
      min: 0, max: 5, avg: 0.24 (1874 samples)
      
      • 查看統(tǒng)計(jì)信息:info

        • total_connections_received:redis 連接數(shù)
        • latest_fork_usec:上次導(dǎo)出 rdb 快照,持久化花費(fèi)時(shí)長(zhǎng)(微秒), 用來檢查是否有人使用了 SAVE 命令
        • used_memory: 由 redis 分配器分配的內(nèi)存總量,以字節(jié)(byte) 為單位
        • used_memory_rss:返回 redis 已分配的內(nèi)存總量(俗稱常駐集大小),包含了 used_memory 和內(nèi)存碎片
        • mem_fragmentation_ratio:used_memory_rss / used_memory 的值,1.N為佳,如果此值過大,說明 redis 的內(nèi)存的碎片化嚴(yán)重,可以導(dǎo)出再導(dǎo)入一次(重啟)
      • 統(tǒng)計(jì)命令執(zhí)行所耗費(fèi)的毫秒數(shù)(每個(gè)命令的總時(shí)間和平均時(shí)間):INFO commandstats

      • 統(tǒng)計(jì) redis 數(shù)據(jù)存儲(chǔ)中比較大的key(用 scan 的方式對(duì) redis 中的 key 進(jìn)行采樣,尋找較大的 keys):redis-cli --bigkeys

      • 獲取慢查詢:

      # 得到慢查詢列表,默認(rèn)保留 128 條(slowlog-max-len 參數(shù))
      127.0.0.1:6379> slowlog get 10
      1) 1) (integer) 1 # 查詢ID
         2) (integer) 1572146706 # 發(fā)生時(shí)間
         3) (integer) 12239 # 運(yùn)行時(shí)長(zhǎng),該時(shí)間不包含網(wǎng)絡(luò)延遲(微秒)
         4) 1) "save" # 原命令
      2) 1) (integer) 0
         2) (integer) 1569327858
         3) (integer) 391725
         4) 1) "GET"
            2) "YUNGU_REDIS_ADMIN_ACCESS_TOKEN_5E6A833C21A87983459A985753AE5425"
      # 清空慢查詢
      127.0.0.1:6379> slowlog reset
      OK
      

      三、測(cè)試方法

      • 模擬oom,redis 直接退出:redis-cli debug oom
      • 模擬宕機(jī):redis-cli debug segfault
      • 模擬 redis 線程掛起:redis-cli -p 6379 debug sleep 30
      • 快速產(chǎn)生測(cè)試數(shù)據(jù):debug populate
      127.0.0.1:6379> dbsize
      (integer) 1410
      127.0.0.1:6379> debug populate 100
      OK
      127.0.0.1:6379> dbsize
      (integer) 1510
      
      • 模擬 RDB 加載情形(save 當(dāng)前的 rdb 文件,并清空當(dāng)前數(shù)據(jù)庫(kù),重新加載 rdb):debug reload
      • 模擬 AOF 加載情形(清空當(dāng)前數(shù)據(jù)庫(kù),重新從aof文件里加載數(shù)據(jù)庫(kù)):debug loadaof

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多