Redis常見性能問題和解決方案

什麼樣的數據適合存儲在非關係型數據庫中的呢?

    1、關係不是很密切的的數據,比如用戶信息,班級信息,評論數量等等。
    2、量比較大的數據,如訪問記錄等
    3、訪問比較頻繁的數據,如用戶信息,訪問數量,最新微博等

Redis常見性能問題和解決方案:

Master最好不要做任何持久化工作,如RDB內存快照和AOF日誌文件
如果數據比較重要,某個Slave開啓AOF備份數據,策略設置爲每秒同步一次
爲了主從複製的速度和連接的穩定性,Master和Slave最好在同一個局域網內
儘量避免在壓力很大的主庫上增加從庫

Redis的併發競爭問題如何解決?

Redis爲單進程單線程模式,採用隊列模式將併發訪問變爲串行訪問。Redis本身沒有鎖的概念,Redis對於多個客戶端連接並不存在競爭,但是在Jedis客戶端對Redis進行併發訪問時會發生連接超時、數據轉換錯誤、阻塞、客戶端關閉連接等問題,這些問題均是由於客戶端連接混亂造成。對此有2種解決方法:
 1.客戶端角度,爲保證每個客戶端間正常有序與Redis進行通信,對連接進行池化,同時對客戶端讀寫Redis操作採用內部鎖synchronized。
 
2.服務器角度,利用setnx實現鎖。
 注:對於第一種,需要應用程序自己處理資源的同步,可以使用的方法比較通俗,可以使用synchronized也可以使用lock;第二種需要用到Redis的setnx命令,但是需要注意一些問題。

Redis持久化數據和緩存怎麼做擴容?

擴容的話可以通過redis集羣實現,之前做項目的時候用過自己搭的redis集羣

Redis與消息隊列

不要使用redis去做消息隊列,這不是redis的設計目標。但實在太多人使用redis去做去消息隊列,redis的作者看不下去,另外基於redis的核心代碼,另外實現了一個消息隊列disque
我在做網站過程接觸比較多的還是使用redis做緩存,比如秒殺系統,首頁緩存等等。

Redis實現限流功能的優點:

可以應用於分佈式或者集羣下
redis併發量大

爲啥redis單線程模型也能效率這麼高?

1)純內存操作
2)核心是基於非阻塞的IO多路複用機制
3)單線程反而避免了多線程的頻繁上下文切換問題

redis都有哪些數據類型?分別在哪些場景下使用比較合適呢?

string 簡單的 kv緩存
hash 這個是類似map的一種結構,這個一般就是可以將結構化的數據,比如一個對象(前提是這個對象沒嵌套其他的對象)給緩存在redis裏,然後每次讀寫緩存的時候,可以就操作hash裏的某個字段
list 粉絲,關注,收藏,類似微博分頁,分頁查詢
set 查看共同好友,
sorted set 排行榜

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章