中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Redis常見問題有哪些

發布時間:2021-09-26 09:20:10 來源:億速云 閱讀:109 作者:柒染 欄目:關系型數據庫

今天就跟大家聊聊有關Redis常見問題有哪些,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

1.Redis如何做內存優化?

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

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

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

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

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

3.Redis和Redisson有什么關系?

Redisson是一個高級的分布式協調Redis客服端,能幫助用戶在分布式環境中輕松實現一些 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)的優勢在于:Redis提供持久化。當維護一個不是嚴格要求一致性的緩存 時,如果用戶的購物車信息全部丟失,大部分人都會不高興的,現在,他們還會這樣嗎?

幸運的是,隨著 Redis 這些年的改進,很容易找到怎么恰當的使用Redis來緩存會話的文檔。甚至廣為人知的商業平臺Magento也提供Redis的插件。

(2)全頁緩存(FPC)

除基本的會話token之外,Redis還提供很簡便的FPC平臺。回到一致性問題,即使重啟了 Redis實例,因為有磁盤的持久化,用戶也不會看到頁面加載速度的下降,這是一個極大改 進,類似PHP本地FPC。

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

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

(3)隊列

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

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

(4)排行榜/計數器

Redis在內存中對數字進行遞增或遞減的操作實現的非常好。集合(Set)和有序集合(Sorted Set)也使得我們在執行這些操作的時候變的非常簡單,Redis只是正好提供了這兩種數據結 構。

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

ZRANGE user_scores 0 10 WITHSCORES

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

(5)發布/訂閱

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

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

redis 內存數據集大小上升到一定大小的時候,就會施行數據淘汰策略。

其實面試除了考察 Redis,不少公司都很重視高并發高可用的技術,特別是一線互聯網公司, 分布式、

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

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

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

7.Redis 集群方案應該怎么做?都有哪些方案?

codis

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

redis cluster

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

8.Redis String的內部編碼有哪些?

int、embstr、raw

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

長度小于等于44字節:embstr編碼

長度大于44字節:raw編碼

9.用Redis做延時隊列,具體應該怎么實現?

可以使用Zset實現。member是任務描述,score是執行時間,然后用定時器定時去掃描,一 旦有執行時間小于或等于當前時間的任務,就立即執行。

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

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

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

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

RDB:將數據庫快照以二進制的方式保存到磁盤中。

AOF:以協議文本方式,將所有對數據庫進行過寫入的命令和參數記錄到AOF文件,從而記錄 數據庫狀態。

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

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

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

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

14.Redis事務機制了解過嗎?

Redis事務的概念:

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

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

Redis事務沒有隔離級別的概念:

批量操作在發送 EXEC 命令前被放入隊列緩存,并不會被實際執行,也就不存在事務內的查詢 要看到事務里的更新,事務外查詢不能看到。

Redis不保證原子性:

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

Redis事務的三個階段:

開始事務

命令入隊

執行事務

Redis事務相關命令:

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

multi : 標記一個事務塊的開始( queued )

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

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

unwatch : 取消watch對所有key的監控

15.使用Redis統計網站的UV,應該怎么做?

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

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

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

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

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

1、數據傾斜,比如某些節點內存占用過高。

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

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

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

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

2、采用多級緩存。

18.緩存失效?緩存穿透?緩存雪崩?緩存并發?

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

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

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

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

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

設置不同的過期時間,防止同意之間內大量的key失效。

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

19.Redis集群如何選擇數據庫?

Redis集群目前無法做數據庫選擇,默認在0數據庫。

20.Redis如何設置密碼及驗證密碼?

設置密碼:config set requirepass 123456

授權密碼:auth 123456

21.為什么 Redis 需要把所有數據放到內存中?

Redis 為了達到最快的讀寫速度將數據都讀到內存中,并通過異步的方式將數據寫入磁盤。

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

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

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

因為目前 Linux 版本已經相當穩定,而且用戶量很大,無需開發 windows 版本,反而會帶來 兼容性等問題。

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

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

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

24.Redis為什么那么快?

1、內存操作;

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

3、非阻塞IO模型,epoll。

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

512M

26.Redis的全稱是什么?

Remote Dictionary Server。

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

內存。

28.Redis有哪些數據結構?

Redis 有 5 種基礎數據結構,它們分別是:string(字符串)、list(列表)、hash(字典)、set(集 合) 和 zset(有序集合)。

這 5 種是 Redis 相關知識中最基礎、最重要的部分。

29.Redis相比memcached有哪些優勢?

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

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

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

30.什么是Redis?簡述它的優缺點?

Redis本質上是一個Key-Value類型的內存數據庫,很像memcached,整個數據庫統統加載 在內存當中進行操作,定期通過異步操作把數據庫數據flush到硬盤上進行保存。

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

Redis的出色之處不僅僅是性能,Redis最大的魅力是支持保存多種數據結構,此外單個value 的最大限制是1GB,不像 memcached只能保存1MB的數據,因此Redis可以用來實現很多有 用的功能。

比方說用他的List來做FIFO雙向鏈表,實現一個輕量級的高性 能消息隊列服務,用他的Set可 以做高性能的tag系統等等。

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

看完上述內容,你們對Redis常見問題有哪些有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

临夏市| 旬邑县| 桑植县| 内江市| 延津县| 广南县| 寿宁县| 阿克陶县| 洛浦县| 永丰县| 游戏| 霍邱县| 青川县| 西盟| 阿图什市| 彩票| 张家口市| 阜宁县| 竹溪县| 樟树市| 旌德县| 扬中市| 迁西县| 马公市| 京山县| 大庆市| 红桥区| 瑞丽市| 益阳市| 古浪县| 通山县| 报价| 陆丰市| 兴城市| 和平区| 墨江| 高邮市| 伊宁市| 淮南市| 萨迦县| 永济市|