教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

Redis相關(guān)介紹

更新時間:2018年09月06日17時54分 來源:傳智播客 瀏覽次數(shù):

  1、為什么用redis

  (1) 提升數(shù)據(jù)的響應(yīng)速度

  (2) 減輕關(guān)系型數(shù)據(jù)庫的壓力

  Redis的執(zhí)行流程

  當(dāng)用戶要來操作數(shù)據(jù)時直接連接數(shù)據(jù)庫進(jìn)行查詢?nèi)缓笳故?,相同的?shù)據(jù)也需要再進(jìn)行數(shù)據(jù)庫的查詢,對于大數(shù)據(jù)量的并發(fā)訪問,會給數(shù)據(jù)造成距大的壓力。

  為了減輕數(shù)據(jù)庫的壓力,使用了這種非關(guān)系型數(shù)據(jù)庫(nosql數(shù)據(jù)庫)redis

  當(dāng)用戶第一次訪問時,首先訪問redis,redis中如果沒有數(shù)據(jù)再去查詢數(shù)據(jù)庫,當(dāng)查詢完數(shù)據(jù)庫后,先將數(shù)據(jù)存放到redis中,然后再返回給用戶。

  當(dāng)用戶第二次訪問的時候還是去訪問redis,此時redis中有數(shù)據(jù),這時就不需要再次去查詢數(shù)據(jù)庫了。

  第一次查詢,此時redis中有了數(shù)據(jù),如果對DB中的數(shù)據(jù)產(chǎn)生了更新

  第二次查詢的時候以為redis中已經(jīng)有了數(shù)據(jù),那么就會直接返回,但是問題發(fā)生了,db與redis中的數(shù)據(jù)不同步

  此時需要清除redis中的數(shù)據(jù)

  當(dāng)數(shù)據(jù)庫發(fā)生數(shù)據(jù)改變的時候清空redis

  這就是緩存同步:解決nosql數(shù)據(jù)庫與關(guān)系型數(shù)據(jù)庫不同步的問題

  Redis有五種數(shù)據(jù)類型

  String key value 有一種特殊的寫法可以實(shí)現(xiàn)數(shù)據(jù)的分類使用冒號分隔

  Clothes:褲子 100

  Clothes:風(fēng)衣 100

  Hash key field value key后面跟了個map map中是field value 完成數(shù)據(jù)歸類的操作 存值hset key field value 取值hget key field

  List 有序 數(shù)據(jù)可重復(fù)

  右壓棧--以中心點(diǎn)的位置向右添加 rpush lrange key 0 -1取所有

  左壓棧--以中心點(diǎn)的位置向左添加 lpush lrange key 0 -1取所有

  Set 無序不可重復(fù)

  存值 sadd key value

  取值 smembers key

  SortedSet有序不可重復(fù)(可以做排行榜信息)

  額外的一些對key操作的命令

  Expire 設(shè)置過期時間,以秒為單位

  Ttl 查看某一個key的狀態(tài) 狀態(tài)值為-1為持久化狀態(tài) -2為key不存在

  Persist將某一個key轉(zhuǎn)換為持久化狀態(tài)

  僅適用于linux

  Redis的前臺啟動 redis-server

  Redis的后臺啟動 修改redis.conf中的屬性daemonize 改為yes輸入redis-server redis.conf完成后臺啟動

  一個單機(jī)的redis默認(rèn)會存在16個數(shù)據(jù)庫 也可以在redis.conf中修改

  ./redis-cli --raw 客戶端連接可以顯示中文

  在進(jìn)行連接的時候默認(rèn)連接的是0號數(shù)據(jù)庫,在同一個數(shù)據(jù)庫中key是不可以重復(fù)的,重復(fù)的話就會發(fā)生值覆蓋,在不同的數(shù)據(jù)庫中key是可以重復(fù)的,使用select 1命令進(jìn)行數(shù)據(jù)庫的切換

  Redis的持久化策略是對redis內(nèi)部數(shù)據(jù)整體的持久化(產(chǎn)生緩存文件,記錄信息,緩存文件存放到磁盤中)

  1、RDB默認(rèn)開啟的持久化,快照的形式進(jìn)行記錄,dump.rdb。默認(rèn)存在三種觸發(fā)條件save 900 1在900秒內(nèi)如果有1個key發(fā)生改變就會觸發(fā)RDB進(jìn)行數(shù)據(jù)存放 save 300 10 在300秒內(nèi)10個可以發(fā)生改變會觸發(fā)RDB,save 60 10000 60秒內(nèi)至少有10000個可以發(fā)生改變會觸發(fā)RDB

  2、AOF需要手動開啟,在redis.ocnf文件中的appendonly屬性做修改,當(dāng)開啟后會每秒進(jìn)行磁盤的寫操作,記錄的不是單獨(dú)的數(shù)據(jù),會記錄所有對redis 的添加、修改、刪除的命令。Appendonly屬性改為yes 會生成appendonly.aof文件。默認(rèn)開啟每秒記錄 appendfsync everysec模式

  兩種持久化策略是可以同時開啟的,但是AOF的優(yōu)先級高于RDB

  Aof的數(shù)據(jù)安全性高于RDB,但是運(yùn)行速度低于RDB,建議不開啟AOF

  Redis集群

  在redis3.0版本以后可以直接使用,redis集群中的服務(wù)器節(jié)點(diǎn)之間是相互聯(lián)通的,當(dāng)用戶訪問集群的節(jié)點(diǎn)時,無需關(guān)注連接的是哪一個節(jié)點(diǎn),只需要連接集群中任意的節(jié)點(diǎn)就可以獲取到整個集群的數(shù)據(jù)

  Redis集群數(shù)據(jù)的存放:0-16383的槽值,當(dāng)設(shè)置值時,根據(jù)key計算該key的值,這個值肯定是在0-16383的范圍內(nèi),根據(jù)計算得到的值確定該key的數(shù)據(jù)存放到哪一個節(jié)點(diǎn)中。Key的值可能是相同的。

  Redis集群默認(rèn)有一個投票機(jī)制,當(dāng)集群超過半數(shù)的節(jié)點(diǎn)認(rèn)為某一節(jié)點(diǎn)已經(jīng)掛了,那么不管該節(jié)點(diǎn)是否掛掉投票結(jié)束后就真的掛了,所以一般都是基數(shù)個服務(wù)器為了實(shí)現(xiàn)投票機(jī)制。

  主從備份:給集群中每一個節(jié)點(diǎn)額外搭建一個備份機(jī),為了完成整個集群的高可用,主節(jié)點(diǎn)叫master,從節(jié)點(diǎn)叫slave。Master對外提供服務(wù),slave實(shí)時的做兩件事,第一就是同步主節(jié)點(diǎn)的數(shù)據(jù),第二就是向主節(jié)點(diǎn)發(fā)送心跳包保證主節(jié)點(diǎn)的存活。當(dāng)主節(jié)點(diǎn)無回應(yīng)時slave變?yōu)橹鞴?jié)點(diǎn)向外提供服務(wù)。

  基于(心跳檢測機(jī)制)keepalived搭建完主從備份后,在用戶進(jìn)行連接時,會在用戶和服務(wù)之間搭建一個虛擬IP,用戶直接連接虛擬IP(VIP),VIP連接master實(shí)現(xiàn)用戶的間接連接,當(dāng)master發(fā)生問題時,VIP會轉(zhuǎn)接到slave上



作者:傳智播客JavaEE培訓(xùn)學(xué)院

首發(fā):http://java.itcast.cn

0 分享到:
和我們在線交談!