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

全國(guó)咨詢/投訴熱線:400-618-4000

Redis相關(guān)介紹

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

  1、為什么用redis

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

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

  Redis的執(zhí)行流程

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

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

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

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

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

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

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

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

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

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

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

  Clothes:褲子 100

  Clothes:風(fēng)衣 100

  Hash key field value key后面跟了個(gè)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 無(wú)序不可重復(fù)

  存值 sadd key value

  取值 smembers key

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

  額外的一些對(duì)key操作的命令

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

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

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

  僅適用于linux

  Redis的前臺(tái)啟動(dòng) redis-server

  Redis的后臺(tái)啟動(dòng) 修改redis.conf中的屬性daemonize 改為yes輸入redis-server redis.conf完成后臺(tái)啟動(dòng)

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

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

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

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

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

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

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

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

  Redis集群

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

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

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

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

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



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

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

0 分享到:
和我們?cè)诰€交談!