Redis使用

Jedis

需要使用java來操作Redis 時(shí)可以使用jedis借跪,Jedis是Redis的Java客戶端,在SpringBoot 1.x版本中也是默認(rèn)的客戶端鸠儿。在SpringBoot 2.x版本中默認(rèn)客戶端是Luttuce果录。

  1. 導(dǎo)入對(duì)應(yīng)的依賴
    <dependencies>
        <!--導(dǎo)入jedis包-->
        <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>3.2.0</version>
        </dependency>
        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
    </dependencies>
  1. 編碼測(cè)試
    • 連接數(shù)據(jù)庫
    • 操作命令
    • 斷開連接

由于自己的idea,maven有問題丸卷,短時(shí)間沒搞好,所以此處直接先看

image.png

連接成功輸出pong

image.png

jedis的常用api即redis的數(shù)據(jù)類型對(duì)應(yīng)的一些操作:

  • key的一些操作
image.png
  • String的一些操作
image.png
image.png
  • List的一些操作
image.png
  • Set的一些操作
image.png
image.png
  • Hash的一些操作
image.png
Jedis操作事務(wù)
  • 正常執(zhí)行
image.png
image.png
  • 異常執(zhí)行询刹,在try中加入 int i = 1/0;語句
image.png
image.png

Springboot整合Redis

Springboot操作數(shù)據(jù):spring-data谜嫉,mongodb萎坷,jpa,jdbc沐兰,redis
springdata也是和springboot類似的框架
springboot后面版本將jedis換成了lettuce
jedis和lettuce區(qū)別

  • jedis:采用直連哆档,多個(gè)線程操作的話,不安全住闯,若想避免不安全瓜浸,使用jedis pool連接池! 像BIO
  • lettuce: 采用的netty比原,實(shí)例可以在多個(gè)線程中共享斟叼,不存在線程不安全的情況!更像NIO

源碼分析:

image.png

整合測(cè)試

  1. 引入依賴:
image.png
  1. 配置連接:
image.png
  1. 測(cè)試:

opsForxxx即操作xxx數(shù)據(jù)類型

image.png

redisconfig的一些源碼春寿,有關(guān)于序列化的

  • 直接傳對(duì)象到redis會(huì)報(bào)錯(cuò)沒有序列化,所以傳對(duì)象是需要序列化的(實(shí)現(xiàn)Serializable接口即可)忽孽,springboot的默認(rèn)jdk序列化方法使得傳遞的中文在redis命令行界面出現(xiàn)亂碼
image.png
  • 默認(rèn)的RedisTemplate的序列化方式為jdk序列化
image.png
  • 編寫自己RedisTemplate绑改,不用默認(rèn)的jdk序列化方式,可以自己指定序列化方式:
image.png
image.png

使用自己寫的redis模板及指定特定的序列化方法后兄一,可以使得redis命令行界面沒有亂碼

使用redis的原生api會(huì)比較麻煩厘线,可以自己寫一個(gè)RedisUtil工具類來封裝各種redis數(shù)據(jù)類型的原生api。

  • 先注入自己寫的RedisTemplate出革,然后設(shè)置一個(gè)緩存過期時(shí)間:
image.png
  • 獲取過期時(shí)間:
image.png
  • 判斷key是否存在:
image.png
  • 刪除緩存 :
image.png
  • 普通緩存獲仍熳场:
image.png
  • 普通緩存放入:
image.png
  • 普通緩存放入并設(shè)置時(shí)間:
image.png
  • 值遞增遞減:
image.png

等等等

  • 最后只要在啟動(dòng)類中注入工具類即可使用:
image.png

Redis.conf配置文件詳解

  1. 指明了默認(rèn)單位,大小寫不敏感
image.png
  1. include包含骂束,可以使用其他的conf文件耳璧,類似spring的import
image.png
  1. NetWork網(wǎng)絡(luò),可以綁定ip展箱;
image.png

保護(hù)模式旨枯;

image.png

綁定端口

image.png
  1. general通用配置,開啟守護(hù)進(jìn)程混驰;
image.png

以后臺(tái)方式運(yùn)行就需要指定pid

image.png

日志級(jí)別

日志的文件位置及其名字

image.png

數(shù)據(jù)庫的數(shù)量

image.png

是否顯示logo

image.png
  1. shopshotting快照攀隔,持久化時(shí)使用,redis內(nèi)存數(shù)據(jù)庫栖榨,不持久化斷電即失
image.png

解釋:

save 900 1      #如果900s內(nèi)昆汹,至少有一個(gè)key進(jìn)行了修改,則進(jìn)行持久化操作

可以自己修改策略如save 60 5

持久化出錯(cuò)時(shí)婴栽,是否還需要繼續(xù)工作

image.png

是否壓縮rdb文件满粗,壓縮需要消耗cpu資源,zef壓縮算法居夹,官方建議開啟

image.png

保存rdb文件時(shí)败潦,是否進(jìn)行錯(cuò)完整新校驗(yàn)本冲,會(huì)損失性能

image.png

rdb保存的文件目錄

image.png
  1. replication 復(fù)制,在主從復(fù)制時(shí)使用
image.png
  1. security安全
image.png

默認(rèn)是沒有密碼的:

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""

可以在配置文件中設(shè)置:

image.png

但通常在命令行中設(shè)置:

image.png
  1. client客戶端劫扒,可以設(shè)置最大連接數(shù)
image.png
  1. memory management內(nèi)存管理
image.png

設(shè)置最大的內(nèi)存容量:

image.png

內(nèi)存滿了的策略:

image.png

6種策略(常文):

image.png
  1. append only模式檬洞,aof的配置部分
image.png

默認(rèn)不開啟aof,使用的時(shí)rdb:

image.png

持久化的文件名字:

image.png

同步策略:

image.png

3種同步策略:

appendfsync always      #每次修改都會(huì)同步沟饥,消耗性能
appendfsync everysec    #每秒執(zhí)行一次同步添怔,可能會(huì)丟失這1s的數(shù)據(jù)
appendfsync no          #不執(zhí)行同步,操作系統(tǒng)自己同步數(shù)據(jù)贤旷,數(shù)度最快

具體情況在Redis持久化中解釋

Redis持久化

redis是內(nèi)存數(shù)據(jù)庫广料,為了防止數(shù)據(jù)丟失以及服務(wù)重啟時(shí)能夠恢復(fù)數(shù)據(jù),不需要從后端恢復(fù)數(shù)據(jù)幼驶,Redis支持?jǐn)?shù)據(jù)的持久化艾杏,主要分為兩種方式,分別是RDB和AOF; 當(dāng)然實(shí)際場(chǎng)景下還會(huì)使用這兩種的混合模式

RDB持久化
  • RDB 就是 Redis DataBase 的縮寫盅藻,中文名為快照/內(nèi)存快照购桑,RDB持久化是把當(dāng)前進(jìn)程數(shù)據(jù)生成快照保存到磁盤上的過程,由于是某一時(shí)刻的快照氏淑,那么快照中的值要早于或者等于內(nèi)存中的值

  • 基本流程:

image.png
image.png
  • 保存文件位置:
# The filename where to dump the DB
dbfilename dump.rdb

可以刪除dump.rdb文件勃蜘,再使用save 對(duì)應(yīng)的策略,當(dāng)執(zhí)行就會(huì)觸發(fā)rdb機(jī)制產(chǎn)生dump.rdb

  • 觸發(fā)方式:手動(dòng)觸發(fā)和自動(dòng)觸發(fā)
  1. 手動(dòng)觸發(fā)
    1)save命令:阻塞當(dāng)前Redis服務(wù)器假残,直到RDB過程完成為止缭贡,對(duì)于內(nèi)存 比較大的實(shí)例會(huì)造成長(zhǎng)時(shí)間阻塞,線上環(huán)境不建議使用
    2)bgsave命令:Redis進(jìn)程執(zhí)行fork操作創(chuàng)建子進(jìn)程辉懒,RDB持久化過程由子 進(jìn)程負(fù)責(zé)阳惹,完成后自動(dòng)結(jié)束。阻塞只發(fā)生在fork階段耗帕,一般時(shí)間很短
image.png

具體流程如下:

1)redis客戶端執(zhí)行bgsave命令或者自動(dòng)觸發(fā)bgsave命令(滿足修改觸發(fā)策略)穆端;
2)主進(jìn)程判斷當(dāng)前是否已經(jīng)存在正在執(zhí)行的子進(jìn)程,如果存在仿便,那么主進(jìn)程直接返回体啰;
3)如果不存在正在執(zhí)行的子進(jìn)程,那么就fork一個(gè)新的子進(jìn)程進(jìn)行持久化數(shù)據(jù)嗽仪,fork過程是阻塞的荒勇,fork操作完成后主進(jìn)程即可執(zhí)行其他操作;
4)子進(jìn)程先將數(shù)據(jù)寫入到臨時(shí)的rdb文件中闻坚,待快照數(shù)據(jù)寫入完成后再原子替換舊的rdb文件沽翔;
5)同時(shí)發(fā)送信號(hào)給主進(jìn)程,通知主進(jìn)程rdb持久化完成,主進(jìn)程更新相關(guān)的統(tǒng)計(jì)信息(info Persitence下的rdb_*相關(guān)選項(xiàng))仅偎。

  1. 自動(dòng)觸發(fā)
    1)redis.conf中配置save m n跨蟹,即在m秒內(nèi)有n次修改時(shí),自動(dòng)觸發(fā)bgsave生成rdb文件痢艺;
    2)主從復(fù)制時(shí),從節(jié)點(diǎn)要從主節(jié)點(diǎn)進(jìn)行全量復(fù)制時(shí)也會(huì)觸發(fā)bgsave操作舌缤,生成當(dāng)時(shí)的快照發(fā)送到從節(jié)點(diǎn)友驮;
    3)執(zhí)行debug reload命令重新加載redis時(shí)也會(huì)觸發(fā)bgsave操作椭豫;
    4)默認(rèn)情況下執(zhí)行shutdown命令時(shí)赏酥,如果沒有開啟aof持久化裸扶,那么也會(huì)觸發(fā)bgsave操作;
  • 如何使用rdb文件恢復(fù)
    1. 只需要將rdb文件放在我們的redis啟動(dòng)目錄即可摸屠,redis啟動(dòng)的時(shí)候就會(huì)自動(dòng)檢查dump.rdb來恢復(fù)其中的數(shù)據(jù)
    2. 查看需要存在的位置
    127.0.0.1:6379> config get dir
    1) "dir"
    2) "/www/server/redis"     #如果這個(gè)下不存在dump.rdb文件,啟動(dòng)就會(huì)自動(dòng)恢復(fù)其中的數(shù)據(jù)
    
  • RDB的優(yōu)點(diǎn)
  1. RDB文件是某個(gè)時(shí)間節(jié)點(diǎn)的快照刻蚯,默認(rèn)使用LZF算法進(jìn)行壓縮炊汹,壓縮后的文件體積遠(yuǎn)遠(yuǎn)小于內(nèi)存大小,適用于備份器钟、全量復(fù)制等場(chǎng)景傲霸;
  2. Redis加載RDB文件恢復(fù)數(shù)據(jù)要遠(yuǎn)遠(yuǎn)快于AOF方式;
  3. 適合大規(guī)模數(shù)據(jù)恢復(fù)梳凛,對(duì)數(shù)據(jù)完整性要求性不高
  • RDB的缺點(diǎn)
  1. RDB方式實(shí)時(shí)性不夠,無法做到秒級(jí)的持久化叛溢;意外宕機(jī)會(huì)有數(shù)據(jù)丟失
  2. 每次調(diào)用bgsave都需要fork子進(jìn)程楷掉,fork子進(jìn)程屬于重量級(jí)操作,會(huì)阻塞進(jìn)程刊橘,新建一個(gè)臨時(shí)的rdb文件會(huì)占內(nèi)存,頻繁執(zhí)行成本較高浓冒;
  3. RDB文件是二進(jìn)制的稳懒,沒有可讀性,AOF文件在了解其結(jié)構(gòu)的情況下可以手動(dòng)修改或者補(bǔ)全或油;
  4. 版本兼容RDB文件問題;
AOF持久化

Redis是“寫后”日志辖佣,Redis先執(zhí)行命令,把數(shù)據(jù)寫入內(nèi)存雏搂,然后才記錄日志。日志里記錄的是Redis收到的每一條命令,這些命令是以文本形式保存浊吏。PS: 大多數(shù)的數(shù)據(jù)庫采用的是寫前日志(WAL)找田,例如MySQL,通過寫前日志和兩階段提交漆改,實(shí)現(xiàn)數(shù)據(jù)和邏輯的一致性。

image.png
  • 寫后日志好處:
  1. 避免額外的檢查開銷**:Redis 在向 AOF 里面記錄日志的時(shí)候愉棱,并不會(huì)先去對(duì)這些命令進(jìn)行語法檢查。所以档押,如果先記日志再執(zhí)行命令的話,日志中就有可能記錄了錯(cuò)誤的命令,Redis 在使用日志恢復(fù)數(shù)據(jù)時(shí)癞松,就可能會(huì)出錯(cuò)。
  2. 不會(huì)阻塞當(dāng)前的寫操作
  • 寫后日志壞處:
  1. 如果命令執(zhí)行完成枫甲,寫日志之前宕機(jī)了,會(huì)丟失數(shù)據(jù)。
  2. 主線程寫磁盤壓力大幔崖,導(dǎo)致寫盤慢砂代,阻塞后續(xù)操作。
  • 基本流程:
image.png
image.png
  • 保存文件位置:appendonly.aof文件
image.png

append操作

appendonly默認(rèn)為no率挣,不開啟aof日志刻伊,改為yes開啟;重啟redis之后生效會(huì)出現(xiàn)aof文件

image.png

當(dāng)aof文件被破壞后椒功,連接redis會(huì)失敶废洹:

image.png

修復(fù)aof文件:redis提供的工具為 redis-check-aof --fix

image.png

文件修復(fù)正常后,重啟就可以直接恢復(fù)數(shù)據(jù)

如何實(shí)現(xiàn)AOF

AOF日志記錄Redis的每個(gè)寫命令动漾,步驟分為:命令追加(append)、文件寫入(write)和文件同步(sync)

  • 命令追加:當(dāng)AOF持久化功能打開了妈拌,服務(wù)器在執(zhí)行完一個(gè)寫命令之后,會(huì)以協(xié)議格式將被執(zhí)行的寫命令追加到服務(wù)器的 aof_buf 緩沖區(qū)

  • 文件寫入和同步:關(guān)于何時(shí)將 aof_buf 緩沖區(qū)的內(nèi)容寫入AOF文件中雹洗,Redis提供了三種寫回策略
    1)Always,同步寫回:每個(gè)寫命令執(zhí)行完氮凝,立馬同步地將日志寫回磁盤;同步性高帽驯,數(shù)據(jù)基本不丟失梳侨,但影響性能
    2)Everysec择示,每秒寫回:每個(gè)寫命令執(zhí)行完区匠,只是先把日志寫到AOF文件的內(nèi)存緩沖區(qū)喜颁,每隔一秒把緩沖區(qū)中的內(nèi)容寫入磁盤鬓长;
    3)No炭序,操作系統(tǒng)控制的寫回:每個(gè)寫命令執(zhí)行完笨觅,只是先把日志寫到AOF文件的內(nèi)存緩沖區(qū)担巩,由操作系統(tǒng)決定何時(shí)將緩沖區(qū)內(nèi)容寫回磁盤送火。

redis官方解釋:
為了提高文件寫入效率,在現(xiàn)代操作系統(tǒng)中,當(dāng)用戶調(diào)用write函數(shù),將一些數(shù)據(jù)寫入文件時(shí)边涕,操作系統(tǒng)通常會(huì)將數(shù)據(jù)暫存到一個(gè)內(nèi)存緩沖區(qū)里沼沈,當(dāng)緩沖區(qū)的空間被填滿或超過了指定時(shí)限后,才真正將緩沖區(qū)的數(shù)據(jù)寫入到磁盤里旦装。
這樣的操作雖然提高了效率页衙,但也為數(shù)據(jù)寫入帶來了安全問題:如果計(jì)算機(jī)停機(jī),內(nèi)存緩沖區(qū)中的數(shù)據(jù)會(huì)丟失阴绢。為此拷姿,系統(tǒng)提供了fsync、fdatasync同步函數(shù)旱函,可以強(qiáng)制操作系統(tǒng)立刻將緩沖區(qū)中的數(shù)據(jù)寫入到硬盤里响巢,從而確保寫入數(shù)據(jù)的安全性。

  • redis相關(guān)aof的一些配置文件項(xiàng)

no-appendfsync-on-rewrite:always和everysec的設(shè)置會(huì)使真正的I/O操作高頻度的出現(xiàn)棒妨,甚至?xí)霈F(xiàn)長(zhǎng)時(shí)間的卡頓情況踪古,這個(gè)問題出現(xiàn)在操作系統(tǒng)層面上,所有靠工作在操作系統(tǒng)之上的Redis是沒法解決的券腔。為了盡量緩解這個(gè)情況伏穆,Redis提供了這個(gè)設(shè)置項(xiàng),保證在完成fsync函數(shù)調(diào)用時(shí)纷纫,不會(huì)將這段時(shí)間內(nèi)發(fā)生的命令操作放入操作系統(tǒng)的Page Cache(這段時(shí)間Redis還在接受客戶端的各種寫操作命令)枕扫。

auto-aof-rewrite-percentage:在生產(chǎn)環(huán)境下,技術(shù)人員不可能隨時(shí)隨地使用“bgrewriteaof”命令去重寫AOF文件辱魁。所以更多時(shí)候我們需要依靠Redis中對(duì)AOF文件的自動(dòng)重寫策略烟瞧。Redis中對(duì)觸發(fā)自動(dòng)重寫AOF文件的操作提供了兩個(gè)設(shè)置:auto-aof-rewrite-percentage表示如果當(dāng)前AOF文件的大小超過了上次重寫后AOF文件的百分之多少后,就再次開始重寫AOF文件染簇。例如該參數(shù)值的默認(rèn)設(shè)置值為100参滴,意思就是如果AOF文件的大小超過上次AOF文件重寫后的1倍,就啟動(dòng)重寫操作锻弓。

auto-aof-rewrite-min-size:參考auto-aof-rewrite-percentage選項(xiàng)的介紹砾赔,auto-aof-rewrite-min-size設(shè)置項(xiàng)表示啟動(dòng)AOF文件重寫操作的AOF文件最小大小。如果AOF文件大小低于這個(gè)值,則不會(huì)觸發(fā)重寫操作暴心。注意妓盲,auto-aof-rewrite-percentage和auto-aof-rewrite-min-size只是用來控制Redis中自動(dòng)對(duì)AOF文件進(jìn)行重寫的情況,如果是技術(shù)人員手動(dòng)調(diào)用“bgrewriteaof”命令专普,則不受這兩個(gè)限制條件左右本橙。

image.png

AOF重寫

AOF會(huì)記錄每個(gè)寫命令到AOF文件,隨著時(shí)間越來越長(zhǎng)脆诉,AOF文件會(huì)變得越來越大,如果不加以控制贷币,會(huì)對(duì)Redis服務(wù)器击胜,甚至對(duì)操作系統(tǒng)造成影響,而且AOF文件越大役纹,數(shù)據(jù)恢復(fù)也越慢偶摔。為了解決AOF文件體積膨脹的問題,Redis提供AOF文件重寫機(jī)制來對(duì)AOF文件進(jìn)行“瘦身”促脉。

  • 原理:
    Redis通過創(chuàng)建一個(gè)新的AOF文件來替換現(xiàn)有的AOF辰斋,新舊兩個(gè)AOF文件保存的數(shù)據(jù)相同,但新AOF文件沒有了冗余命令瘸味。

  • AOF重寫會(huì)阻塞嗎宫仗?
    AOF重寫過程是由后臺(tái)進(jìn)程bgrewriteaof來完成的。主線程fork出后臺(tái)的bgrewriteaof子進(jìn)程旁仿,fork會(huì)把主線程的內(nèi)存拷貝一份給bgrewriteaof子進(jìn)程藕夫,這里面就包含了數(shù)據(jù)庫的最新數(shù)據(jù)。然后枯冈,bgrewriteaof子進(jìn)程就可以在不影響主線程的情況下毅贮,逐一把拷貝的數(shù)據(jù)寫成操作,記入重寫日志尘奏。
    所以aof在重寫時(shí)滩褥,在fork進(jìn)程時(shí)是會(huì)阻塞住主線程的。

  • AOF日志何時(shí)會(huì)重寫炫加?
    控制AOF重寫的觸發(fā)的兩個(gè)配置項(xiàng):
    auto-aof-rewrite-min-size:表示運(yùn)行AOF重寫時(shí)文件的最小大小瑰煎,默認(rèn)為64MB。超過這個(gè)設(shè)定的大小就會(huì)觸發(fā)
    auto-aof-rewrite-percentage:當(dāng)前aof文件比上一次重寫后aof文件的增量大小俗孝,和上一次重寫后aof文件大小的比值超過設(shè)定值就會(huì)重寫丢间。

  • 重寫日志時(shí),有新數(shù)據(jù)寫入怎么辦驹针?
    重寫過程總結(jié)為:“一個(gè)拷貝烘挫,兩處日志”在fork出子進(jìn)程時(shí)的拷貝,以及在重寫時(shí),如果有新數(shù)據(jù)寫入饮六,主線程就會(huì)將命令記錄到兩個(gè)aof日志內(nèi)存緩沖區(qū)中其垄。如果AOF寫回策略配置的是always,則直接將命令寫回舊的日志文件卤橄,并且保存一份命令至AOF重寫緩沖區(qū)绿满,這些操作對(duì)新的日志文件是不存在影響的。(舊的日志文件:主線程使用的日志文件窟扑,新的日志文件:bgrewriteaof進(jìn)程使用的日志文件)
    而在bgrewriteaof子進(jìn)程完成會(huì)日志文件的重寫操作后喇颁,會(huì)提示主線程已經(jīng)完成重寫操作,主線程會(huì)將AOF重寫緩沖中的命令追加到新的日志文件后面嚎货。這時(shí)候在高并發(fā)的情況下橘霎,AOF重寫緩沖區(qū)積累可能會(huì)很大,這樣就會(huì)造成阻塞殖属,Redis后來通過Linux管道技術(shù)讓aof重寫期間就能同時(shí)進(jìn)行回放姐叁,這樣aof重寫結(jié)束后只需回放少量剩余的數(shù)據(jù)即可。
    最后通過修改文件名的方式洗显,保證文件切換的原子性外潜。
    在AOF重寫日志期間發(fā)生宕機(jī)的話,因?yàn)槿罩疚募€沒切換挠唆,所以恢復(fù)數(shù)據(jù)時(shí)处窥,用的還是舊的日志文件。

精簡(jiǎn)為:

  1. 主線程fork出bgrewriteaof子進(jìn)程重寫aof日志
  2. 子進(jìn)程重寫日志完成后玄组,主線程追加aof日志緩沖
  3. 替換日志文件
image.png
  • 主線程fork出子進(jìn)程的是如何復(fù)制內(nèi)存數(shù)據(jù)的
    fork采用操作系統(tǒng)提供的寫時(shí)復(fù)制(copy on write)機(jī)制碧库,fork子進(jìn)程時(shí),子進(jìn)程時(shí)會(huì)拷貝父進(jìn)程的頁表巧勤,即虛實(shí)映射關(guān)系(虛擬內(nèi)存和物理內(nèi)存的映射索引表)嵌灰,而不會(huì)拷貝物理內(nèi)存

  • 為什么AOF重寫不復(fù)用原AOF日志?

  1. 父子進(jìn)程寫同一個(gè)文件會(huì)產(chǎn)生競(jìng)爭(zhēng)問題颅悉,影響父進(jìn)程的性能沽瞭。
  2. 如果AOF重寫過程中失敗了,相當(dāng)于污染了原本的AOF文件剩瓶,無法做恢復(fù)數(shù)據(jù)使用驹溃。

新版Redis 使用AOF和RDB混合持久化
內(nèi)存快照以一定的頻率執(zhí)行,在兩次快照之間延曙,使用 AOF 日志記錄這期間的所有命令操作豌鹤。

數(shù)據(jù)恢復(fù):

image.png

性能實(shí)踐:

理論上:

  • 降低fork的頻率,比如可以手動(dòng)來觸發(fā)RDB生成快照枝缔、與AOF重寫布疙;
  • 控制Redis最大使用內(nèi)存蚊惯,防止fork耗時(shí)過長(zhǎng);
  • 使用更牛逼的硬件灵临;
  • 合理配置Linux的內(nèi)存分配策略截型,避免因?yàn)槲锢韮?nèi)存不足導(dǎo)致fork失敗。

實(shí)踐中:

  • 如果Redis中的數(shù)據(jù)并不是特別敏感或者可以通過其它方式重寫生成數(shù)據(jù)儒溉,可以關(guān)閉持久化宦焦,如果丟失數(shù)據(jù)可以通過其它途徑補(bǔ)回;
  • 自己制定策略定期檢查Redis的情況顿涣,然后可以手動(dòng)觸發(fā)備份波闹、重寫數(shù)據(jù);
  • 單機(jī)如果部署多個(gè)實(shí)例涛碑,要防止多個(gè)機(jī)器同時(shí)運(yùn)行持久化精堕、重寫操作,防止出現(xiàn)內(nèi)存锌唾、CPU、IO資源競(jìng)爭(zhēng)夺英,讓持久化變?yōu)榇校?/li>
  • 可以加入主從機(jī)器晌涕,利用一臺(tái)從機(jī)器進(jìn)行備份處理,其它機(jī)器正常響應(yīng)客戶端的命令痛悯;
  • RDB持久化與AOF持久化可以同時(shí)存在余黎,配合使用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市载萌,隨后出現(xiàn)的幾起案子惧财,更是在濱河造成了極大的恐慌,老刑警劉巖扭仁,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件垮衷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡乖坠,警方通過查閱死者的電腦和手機(jī)搀突,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熊泵,“玉大人仰迁,你說我怎么就攤上這事⊥绶郑” “怎么了徐许?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)卒蘸。 經(jīng)常有香客問我雌隅,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任澄步,我火速辦了婚禮冰蘑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘村缸。我一直安慰自己祠肥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布梯皿。 她就那樣靜靜地躺著仇箱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪东羹。 梳的紋絲不亂的頭發(fā)上剂桥,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音属提,去河邊找鬼权逗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛冤议,可吹牛的內(nèi)容都是我干的斟薇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼恕酸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼堪滨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蕊温,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤袱箱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后义矛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體发笔,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年凉翻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了筐咧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡噪矛,死狀恐怖量蕊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艇挨,我是刑警寧澤残炮,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站缩滨,受9級(jí)特大地震影響势就,放射性物質(zhì)發(fā)生泄漏泉瞻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一苞冯、第九天 我趴在偏房一處隱蔽的房頂上張望袖牙。 院中可真熱鬧,春花似錦舅锄、人聲如沸鞭达。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽畴蹭。三九已至,卻和暖如春鳍烁,著一層夾襖步出監(jiān)牢的瞬間叨襟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工幔荒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留糊闽,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓爹梁,卻偏偏與公主長(zhǎng)得像右犹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卫键,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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

  • 目錄: 1 Redis初識(shí) 1.1 Redis介紹 1.2 Redis功能特性介紹 1.3 Redis...
    莎莎1990閱讀 738評(píng)論 0 2
  • redis 使用歷程 為什么使用redis緩存傀履? 答:之前是沒有使用redis的虱朵,直接用Java代碼寫類緩存功能莉炉,...
    todobugs閱讀 262評(píng)論 0 1
  • redis持久化策略 1、數(shù)據(jù)文件.rdb 2碴犬、更新日志.aof RDB 詳解 redis.conf 文件絮宁,找到 ...
    北方_f6b4閱讀 70評(píng)論 0 0
  • 介紹 redis是鍵值對(duì)的數(shù)據(jù)庫,常用的五種數(shù)據(jù)類型為字符串類型(string)服协,散列類型(hash)绍昂,列表類型(...
    瀟豪閱讀 285評(píng)論 0 1
  • 一次性理解內(nèi)存穿透、內(nèi)存雪崩偿荷、內(nèi)存擊穿 本文參考:https://segmentfault.com/a/11900...
    執(zhí)子之手_0a0f閱讀 1,623評(píng)論 1 0