久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      匯總30個Redis常見問題!

      1.Redis如何做內(nèi)存優(yōu)化?

      盡可能使用散列表(hashes),散列表(是說散列表里面存儲的數(shù)少)使用的內(nèi)存非常小,所 以你應(yīng)該盡可能的將你的數(shù)據(jù)模型抽象到一個散列表里面。

      比如你的web系統(tǒng)中有一個用戶對象,不要為這個用戶的名稱,姓氏,郵箱,密碼設(shè)置單獨的 key,而是應(yīng)該把這個用戶的所有信息存儲到一張散列表里面。

      2.Redis中的管道有什么用?

      一次請求/響應(yīng)服務(wù)器能實現(xiàn)處理新的請求即使舊的請求還未被響應(yīng)。這樣就可以將多個命令發(fā) 送到服務(wù)器,而不用等待回復(fù),最后在一個步驟中讀取該答復(fù)。

      這就是管道(pipelining),是一種幾十年來廣泛使用的技術(shù)。例如許多POP3協(xié)議已經(jīng)實現(xiàn) 支持這個功能,大大加快了從服務(wù)器下載新郵件的過程。

      3.Redis和Redisson有什么關(guān)系?

      Redisson是一個高級的分布式協(xié)調(diào)Redis客服端,能幫助用戶在分布式環(huán)境中輕松實現(xiàn)一些 Java的對象 (Bloom filter, BitSet, Set, SetMultimap, ScoredSortedSet, SortedSet, Map, ConcurrentMap, List, ListMultimap, Queue, BlockingQueue, Deque, BlockingDeque, Semaphore, Lock, ReadWriteLock, AtomicLong, CountDownLatch, Publish / Subscribe, HyperLogLog)。

      4.Redis有哪些適合的場景?

      (1)會話緩存(Session Cache)

      最常用的一種使用Redis的情景是會話緩存(session cache)。用Redis緩存會話比其他存儲 (如Memcached)的優(yōu)勢在于:Redis提供持久化。當(dāng)維護(hù)一個不是嚴(yán)格要求一致性的緩存 時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現(xiàn)在,他們還會這樣嗎?

      幸運的是,隨著 Redis 這些年的改進(jìn),很容易找到怎么恰當(dāng)?shù)氖褂肦edis來緩存會話的文檔。甚至廣為人知的商業(yè)平臺Magento也提供Redis的插件。

      (2)全頁緩存(FPC)

      除基本的會話token之外,Redis還提供很簡便的FPC平臺?;氐揭恢滦詥栴},即使重啟了 Redis實例,因為有磁盤的持久化,用戶也不會看到頁面加載速度的下降,這是一個極大改 進(jìn),類似PHP本地FPC。

      再次以Magento為例,Magento提供一個插件來使用Redis作為全頁緩存后端。

      此外,對WordPress的用戶來說,Pantheon有一個非常好的插件 wp-redis,這個插件能幫 助你以最快速度加載你曾瀏覽過的頁面。

      (3)隊列

      Reids在內(nèi)存存儲引擎領(lǐng)域的一大優(yōu)點是提供 list 和 set 操作,這使得Redis能作為一個很好的 消息隊列平臺來使用。Redis作為隊列使用的操作,就類似于本地程序語言(如Python)對 list 的 push/pop 操作。

      如果你快速的在Google中搜索“Redis queues”,你馬上就能找到大量的開源項目,這些項目 的目的就是利用Redis創(chuàng)建非常好的后端工具,以滿足各種隊列需求。例如,Celery有一個后 臺就是使用Redis作為broker,你可以從這里去查看。

      (4)排行榜/計數(shù)器

      Redis在內(nèi)存中對數(shù)字進(jìn)行遞增或遞減的操作實現(xiàn)的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執(zhí)行這些操作的時候變的非常簡單,Redis只是正好提供了這兩種數(shù)據(jù)結(jié) 構(gòu)。

      所以,我們要從排序集合中獲取到排名最靠前的10個用戶–我們稱之為“user_scores”,我們 只需要像下面一樣執(zhí)行即可:當(dāng)然,這是假定你是根據(jù)你用戶的分?jǐn)?shù)做遞增的排序。如果你想返回用戶及用戶的分?jǐn)?shù),你需 要這樣執(zhí)行:

      ZRANGE user_scores 0 10 WITHSCORES

      Agora Games就是一個很好的例子,用Ruby實現(xiàn)的,它的排行榜就是使用Redis來存儲數(shù)據(jù) 的,你可以在這里看到。

      (5)發(fā)布/訂閱

      最后(但肯定不是最不重要的)是Redis的發(fā)布/訂閱功能。發(fā)布/訂閱的使用場景確實非常 多。我已看見人們在社交網(wǎng)絡(luò)連接中使用,還可作為基于發(fā)布/訂閱的腳本觸發(fā)器,甚至用 Redis的發(fā)布/訂閱功能來建立聊天系統(tǒng)!

      5.MySQL 里有 2000w 數(shù)據(jù),redis 中只存 20w 的數(shù)據(jù),如何保證 redis 中的數(shù)據(jù)都 是熱點數(shù)據(jù)?

      redis 內(nèi)存數(shù)據(jù)集大小上升到一定大小的時候,就會施行數(shù)據(jù)淘汰策略。

      其實面試除了考察 Redis,不少公司都很重視高并發(fā)高可用的技術(shù),特別是一線互聯(lián)網(wǎng)公司, 分布式、

      JVM、spring 源碼分析、微服務(wù)等知識點已是面試的必考題。

      6.Redis 集群方案什么情況下會導(dǎo)致整個集群不可用?

      有 A,B,C 三個節(jié)點的集群,在沒有復(fù)制模型的情況下,如果節(jié)點 B 失敗了,那么整個集群就會 以為缺少5501-11000 這個范圍的槽而不可用。

      7.Redis 集群方案應(yīng)該怎么做?都有哪些方案?

      codis

      目前用的最多的集群方案,基本和 twemproxy 一致的效果,但它支持在節(jié)點數(shù)量改變情況下,舊節(jié)點數(shù)據(jù)可恢復(fù)到新 hash 節(jié)點。

      redis cluster

      3.0 自帶的集群,特點在于他的分布式算法不是一致性 hash,而是 hash 槽的概念,以及自身支持節(jié)點設(shè)置從節(jié)點。具體看官方文檔介紹。在業(yè)務(wù)代碼層實現(xiàn),起幾個毫無關(guān)聯(lián)的 redis 實例,在代碼層,對 key 進(jìn)行 hash 計算, 然后去對應(yīng)的redis 實例操作數(shù)據(jù)。這種方式對 hash 層代碼要求比較高,考慮部分包 括,節(jié)點失效后的替代算法方案,數(shù)據(jù)震蕩后的自動腳本恢復(fù),實例的監(jiān)控,等等。

      8.Redis String的內(nèi)部編碼有哪些?

      int、embstr、raw

      10000以下的整數(shù)會使用緩存里的int常量。

      長度小于等于44字節(jié):embstr編碼

      長度大于44字節(jié):raw編碼

      9.用Redis做延時隊列,具體應(yīng)該怎么實現(xiàn)?

      可以使用Zset實現(xiàn)。member是任務(wù)描述,score是執(zhí)行時間,然后用定時器定時去掃描,一 旦有執(zhí)行時間小于或等于當(dāng)前時間的任務(wù),就立即執(zhí)行。

      10.Redis在集群種查找key的時候,是怎么定位到具體節(jié)點的?

      使用crc16算法對key進(jìn)行hash 將hash值對16384取模,得到具體的槽位根據(jù)節(jié)點和槽位的映射信息(與集群建立連接后,客戶端可以取得槽位映射信息),找到具體的節(jié)點地址 去具體的節(jié)點找key如果key不在這個節(jié)點上,則redis集群會返回moved指令,加上新的節(jié)點地址給客戶端,同時,客戶端會刷新本地的節(jié)點槽位映射關(guān)系如果槽位正在遷移中,那么redis集群會返回asking指令給客戶端,這是臨時糾正,客戶端不會刷新本地的節(jié)點槽位映射關(guān)系

      11.Redis的持久化了解過嗎?

      Redis持久化有RDB和AOF這2種方式。

      RDB:將數(shù)據(jù)庫快照以二進(jìn)制的方式保存到磁盤中。

      AOF:以協(xié)議文本方式,將所有對數(shù)據(jù)庫進(jìn)行過寫入的命令和參數(shù)記錄到AOF文件,從而記錄 數(shù)據(jù)庫狀態(tài)。

      12.Redis在什么情況下會觸發(fā)key的回收?

      2種情況:1、定時(抽樣)清理;2、執(zhí)行命令時,判斷內(nèi)存是否超過maxmemory。

      13.Redis key的淘汰策略有哪些?

      8種:noeviction,volatile-lru,volatile-lfu,volatile-ttl,volatile-random,allkeylru,allkeys-lfu,allkeys-random

      14.Redis事務(wù)機(jī)制了解過嗎?

      Redis事務(wù)的概念:

      Redis 事務(wù)的本質(zhì)是一組命令的集合。事務(wù)支持一次執(zhí)行多個命令,一個事務(wù)中所有命令都會 被序列化。在事務(wù)執(zhí)行過程,會按照順序串行化執(zhí)行隊列中的命令,其他客戶端提交的命令請 求不會插入到事務(wù)執(zhí)行命令序列中。

      Redis事務(wù)就是一次性、順序性、排他性的執(zhí)行一個隊列中的一系列命令。

      Redis事務(wù)沒有隔離級別的概念:

      批量操作在發(fā)送 EXEC 命令前被放入隊列緩存,并不會被實際執(zhí)行,也就不存在事務(wù)內(nèi)的查詢 要看到事務(wù)里的更新,事務(wù)外查詢不能看到。

      Redis不保證原子性:

      Redis中,單條命令是原子性執(zhí)行的,但事務(wù)不保證原子性,且沒有回滾。事務(wù)中任意命令執(zhí) 行失敗,其余的命令仍會被執(zhí)行。

      Redis事務(wù)的三個階段:

      開始事務(wù)

      命令入隊

      執(zhí)行事務(wù)

      Redis事務(wù)相關(guān)命令:

      watch key1 key2 … : 監(jiān)視一或多個key,如果在事務(wù)執(zhí)行之前,被監(jiān)視的key被其他命令改動, 則事務(wù)被打斷 ( 類似樂觀鎖 )

      multi : 標(biāo)記一個事務(wù)塊的開始( queued )

      exec : 執(zhí)行所有事務(wù)塊的命令 ( 一旦執(zhí)行exec后,之前加的監(jiān)控鎖都會被取消掉 )

      discard : 取消事務(wù),放棄事務(wù)塊中的所有命令

      unwatch : 取消watch對所有key的監(jiān)控

      15.使用Redis統(tǒng)計網(wǎng)站的UV,應(yīng)該怎么做?

      UV與PV不同,UV需要去重。一般有2種方案:

      1、用BitMap。存的是用戶的uid,計算UV的時候,做下bitcount就行了。

      2、用布隆過濾器。將每次訪問的用戶uid都放到布隆過濾器中。優(yōu)點是省內(nèi)存,缺點是無法得 到精確的UV。但是對于不需要精確知道具體UV,只需要大概的數(shù)量級的場景,是個不錯的選 擇。

      16.Redis中的大key怎么處理?

      大key指的是value特別大的key。比如很長的字符串,或者很大的set等等。大key會造成2個問題:

      1、數(shù)據(jù)傾斜,比如某些節(jié)點內(nèi)存占用過高。

      2、當(dāng)刪除大key或者大 key自動過期的時候,會造成QPS突降,因為Redis是單線程的緣故。

      處理方案:可以將一個大key進(jìn)行分片處理,比如:將一個大set分成多個小的set。

      17.Redis中的熱key怎么處理?

      1、對熱key進(jìn)行分散處理。比如:在key上加上不同的前后綴,緩存多個key,使得各個key分 散到不同的節(jié)點上。

      2、采用多級緩存。

      18.緩存失效?緩存穿透?緩存雪崩?緩存并發(fā)?

      緩存失效 緩存失效指的是大量的緩存在同一時間失效,到時DB的瞬間壓力飆升。造成這種現(xiàn)象的 原因是,key的過期時間都設(shè)置成一樣了。解決方案是,key的過期時間引入隨機(jī)因素, 比如5分鐘+隨機(jī)秒這種方式。

      緩存穿透 緩存穿透是指查詢一條數(shù)據(jù)庫和緩存都沒有的一條數(shù)據(jù),就會一直查詢數(shù)據(jù)庫,對數(shù)據(jù) 庫的訪問壓力就會增大,緩存穿透的解決方案,有以下2種:緩存空對象:代碼維護(hù)較簡單,但是效果不好。布隆過濾器:代碼維護(hù)復(fù)雜,效果很好。

      緩存雪崩 緩存雪崩 是指在某一個時間段,緩存集中過期失效。此刻無數(shù)的請求直接繞開緩存,直 接請求數(shù)據(jù)庫。造成緩存雪崩的原因,有以下2種:reids宕機(jī)。大部分?jǐn)?shù)據(jù)失效。

      對于緩存雪崩的解決方案有以下2種:

      搭建高可用的集群,防止單機(jī)的redis宕機(jī)。

      設(shè)置不同的過期時間,防止同意之間內(nèi)大量的key失效。

      緩存并發(fā) 有時候如果網(wǎng)站并發(fā)訪問高,一個緩存如果失效,可能出現(xiàn)多個進(jìn)程同時查詢DB,同時 設(shè)置緩存的情況,如果并發(fā)確實很大,這也可能造成DB壓力過大,還有緩存頻繁更新的 問題。一般處理方案是在查DB的時候進(jìn)行加鎖,如果KEY不存在,就加鎖,然后查DB入緩存, 然后解鎖;其他進(jìn)程如果發(fā)現(xiàn)有鎖就等待,然后等解鎖后再查緩存或者進(jìn)入DB查詢。

      19.Redis集群如何選擇數(shù)據(jù)庫?

      Redis集群目前無法做數(shù)據(jù)庫選擇,默認(rèn)在0數(shù)據(jù)庫。

      20.Redis如何設(shè)置密碼及驗證密碼?

      設(shè)置密碼:config set requirepass 123456

      授權(quán)密碼:auth 123456

      21.為什么 Redis 需要把所有數(shù)據(jù)放到內(nèi)存中?

      Redis 為了達(dá)到最快的讀寫速度將數(shù)據(jù)都讀到內(nèi)存中,并通過異步的方式將數(shù)據(jù)寫入磁盤。

      所以 redis 具有快速和數(shù)據(jù)持久化的特征,如果不將數(shù)據(jù)放在內(nèi)存中,磁盤 I/O 速度為嚴(yán)重影 響 redis 的性能。

      在內(nèi)存越來越便宜的今天,redis 將會越來越受歡迎, 如果設(shè)置了最大使用的內(nèi)存,則數(shù)據(jù)已 有記錄數(shù)達(dá)到內(nèi)存限值后不能繼續(xù)插入新值。

      22.Redis 官方為什么不提供 Windows 版本?

      因為目前 Linux 版本已經(jīng)相當(dāng)穩(wěn)定,而且用戶量很大,無需開發(fā) windows 版本,反而會帶來 兼容性等問題。

      23.Redis是單線程還是多線程?

      Redis6.0采用多線程IO,不過命令的執(zhí)行還是單線程的。

      Redis6.0之前,IO線程和執(zhí)行線程都是單線程的。

      24.Redis為什么那么快?

      1、內(nèi)存操作;

      2、單線程,省去線程切換、鎖競爭的開銷;

      3、非阻塞IO模型,epoll。

      25.一個字符串類型的值能存儲最大容量是多少?

      512M

      26.Redis的全稱是什么?

      Remote Dictionary Server。

      27.Redis主要消耗什么物理資源?

      內(nèi)存。

      28.Redis有哪些數(shù)據(jù)結(jié)構(gòu)?

      Redis 有 5 種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),它們分別是:string(字符串)、list(列表)、hash(字典)、set(集 合) 和 zset(有序集合)。

      這 5 種是 Redis 相關(guān)知識中最基礎(chǔ)、最重要的部分。

      29.Redis相比memcached有哪些優(yōu)勢?

      (1) memcached所有的值均是簡單的字符串,redis作為其替代者,支持更為豐富的數(shù)據(jù)類型

      (2) redis的速度比memcached快很多

      (3) redis可以持久化其數(shù)據(jù)

      30.什么是Redis?簡述它的優(yōu)缺點?

      Redis本質(zhì)上是一個Key-Value類型的內(nèi)存數(shù)據(jù)庫,很像memcached,整個數(shù)據(jù)庫統(tǒng)統(tǒng)加載 在內(nèi)存當(dāng)中進(jìn)行操作,定期通過異步操作把數(shù)據(jù)庫數(shù)據(jù)flush到硬盤上進(jìn)行保存。

      因為是純內(nèi)存操作,Redis的性能非常出色,每秒可以處理超過 10萬次讀寫操作,是已知性能 最快的Key-Value DB。

      Redis的出色之處不僅僅是性能,Redis最大的魅力是支持保存多種數(shù)據(jù)結(jié)構(gòu),此外單個value 的最大限制是1GB,不像 memcached只能保存1MB的數(shù)據(jù),因此Redis可以用來實現(xiàn)很多有 用的功能。

      比方說用他的List來做FIFO雙向鏈表,實現(xiàn)一個輕量級的高性 能消息隊列服務(wù),用他的Set可 以做高性能的tag系統(tǒng)等等。

      另外Redis也可以對存入的Key-Value設(shè)置expire時間,因此也可以被當(dāng)作一 個功能加強版的 memcached來用。Redis的主要缺點是數(shù)據(jù)庫容量受到物理內(nèi)存的限制,不能用作海量數(shù)據(jù) 的高性能讀寫,因此Redis適合的場景主要局限在較小數(shù)據(jù)量的高性能操作和運算上。

      推薦學(xué)習(xí):《redis視頻教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號