日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis基本概念

發布時間:2024/2/28 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis基本概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis基本概念


目錄

  • 什么是redis?都有哪些應用場景?

  • Redis 與 memcached的區別和比較?

  • 使用redis的好處?

  • Redis 有哪些功能?

  • redis 為什么是單線程的?

  • 什么是緩存穿透?怎么解決?

  • redis 支持的數據類型有哪些?

  • redis 支持的 java客戶端都有哪些?

  • jedis 和 redisson 有哪些區別?

  • 怎么保證緩存和數據庫的一致性?

  • redis 持久化有幾種方式?

  • redis 怎么實現分布式鎖?

  • redis 分布式鎖有什么缺陷?

  • redis 如何做內存優化?

  • redis 淘汰策略有哪些?

  • redis 常見性能問題有哪些?該如何解決?


  • 1. 什么是redis?都有哪些應用場景?

    Redis 是一個使用 C 語言寫成的,開源、支持網絡、基于內存、可選持久性的、非關系型,key-value數據庫。它是一個開源(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、緩存和消息中間件。

    Redis 使用場景:

    • 記錄帖子點贊數,點擊數,評論數;
    • 緩存近期熱帖;
    • 緩存文章詳情信息;
    • 記錄用戶會話信息;

    2. Redis 與 memcached的區別和比較?

  • Redis不僅僅支持簡單的k/v類型的數據,同時還提供string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)等數據結構的存儲。memcache支持簡單的數據類型,String。
  • Redis支持數據的備份,即master-slave模式的數據備份。
  • Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用,而Memecache把數據全部存在內存之中
  • redis的速度比memcached快很多
  • Memcached是多線程,非阻塞IO復用的網絡模型;Redis使用單線程的IO復用模型。
  • 使用底層模型不同,它們之間底層實現方式,以及跟客戶端之間通信的應用協議不一樣,Redis 自己構建了 vm 機制,因為一般的系統調用系統函數的話,會浪費一定的時間去移動和請求。
  • value 值大小不同,Redis最大可以達到 1gb;memcached 只有 1mb。

  • 3. 使用redis的好處?

    (1) 速度快,因為數據存在內存中,類似于HashMap,HashMap的優勢就是查找和操作的時間復雜度都是O(1)
    (2)支持豐富數據類型,支持string,list,set,sorted set,hash
    (3) 支持事務 :redis對事務是部分支持的,如果是在入隊時報錯,那么都不會執行;在非入隊時報錯,那么成功的就會成功執行。
    redis監控:鎖的介紹
    (4) 豐富的特性:可用于緩存,消息,按key設置過期時間,過期后將會自動刪除。


    4. Redis 有哪些功能?

    • 數據緩沖功能
    • 分布式鎖的功能
    • 支持數據持久化
    • 支持事務
    • 支持消息隊列

    5. redis 為什么是單線程的?

    因為 cpu 不是 Redis 的瓶頸,Redis 瓶頸最有可能是機器內存或者網絡帶寬。肌肉單線程容易實現,而且 cpu 又不會成為瓶頸, 就順理成章采用單線程方案了。

    關于 Redis 的性能,官方網站也有,普通筆記本輕松處理每秒幾十萬的請求。
    而且單線程并不代表就慢,Nginx 和 nodejs 也都是高性能單線程的代表。


    6. 什么是緩存穿透?怎么解決?

    緩存穿透:指查詢一個一定不存在的數據,由于緩存是不命中時需要從數據庫查詢,查不到這個數據則不寫入緩存,這將導致這個不存在的數據每次都要到數據庫去查詢,造成緩存穿透。

    解決方案:最簡單粗暴的方法如果一個查詢返回的數據為空(不管是數據不存在,還是系統故障),我們就把這個空結果進行緩存,但它的過期時間會很短,最多不超過五分鐘。


    7. redis 支持的數據類型有哪些?

    Redis 支持的數據類型:String(字符串),list(列表),hash(字典),set(集合),zset(有序集合)


    8. redis 支持的 java客戶端都有哪些?

    支持 java客戶端有 Redisson,jedis,lettuce等。


    9. jedis 和 redisson 有哪些區別?

    • jedis:提供了比較全面的 Redis 命令的支持。
    • Redisson:實現了分布式和可擴展的 java數據結構,與 jedis 相比 Redisson 的功能相對簡單,不支持排序,事務,管道,分區等 Redis 特性。

    10. 怎么保證緩存和數據庫的一致性?

    • 合理設置緩存的過期時間。
    • 新增,更改,刪除數據庫操作時同步更新 Redis,可以使用事務機制來保證數據的一致性。

    11. redis 持久化有幾種方式?

    Redis 的持久化有兩種方式,或者說有兩種策略:

    • RDB(Redis Database):指定的時間間隔能對你的數據進行快照存儲。
    • AOF (Append Only File):每收到一個寫命令都通過wirte函數追加到文件中。

    12. redis 怎么實現分布式鎖?

    Redis 分布式鎖其實就是在系統里面占一個“坑”,其他程序也要占“坑”的時候,占用成功了就可以繼續執行,失敗了就只能放棄或者稍后重試。

    占坑一般使用 setnx(set if not exists) 指令,只允許被一個程序占有,使用完調用 del 釋放鎖。


    13. redis 分布式鎖有什么缺陷?

    Redis 分布式鎖不能解決超時的問題,分布式鎖有一個超時時間,程序的執行如果超出了鎖的超時時間就會出現問題。


    14. redis 如何做內存優化?

    盡量使用 Redis 的散列表,把相關的信息放到散列表里面存儲,而不是把每個字段單獨存儲,這樣可以有效的減少內存使用。比如將Web系統的用戶對象,應該放到散列表里面再整體存儲到 Redis,而不是把用戶的姓名,年齡,密碼,郵箱等字段分別設置 key 進行存儲。


    15. redis 淘汰策略有哪些?

    • volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰。
    • volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰。
    • volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰。
    • allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰。
    • allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰。
    • no-enviction(驅逐):禁止驅逐數據。

    16. redis 常見性能問題有哪些?該如何解決?

    • 主服務器寫內存快照,會阻塞主線程的工作,當快照比較大時對性能影響是非常大的,會間斷性暫停服務,所有主服務器最好不要寫內存快照。
    • Redis 主從復制的性能問題,為了主從復制的速度和連接的穩定性,主從庫最好在同一個局域網內。

    總結

    以上是生活随笔為你收集整理的Redis基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。