本人最近在學習Redis的使用和底層原理,有一些收穫,所以希望通過寫博客的形式來記錄自己的學習過程,加深自己的理解,同時也方便以後查閱複習。目前打算先記錄一些基本的使用方法和部分底層實現,其他的如果有用到我再貼上來。文章內容是我根據自己的理解和參考網上的資料總結的,如果有錯誤的地方,就麻煩各位大佬批 ...
本人最近在學習Redis的使用和底層原理,有一些收穫,所以希望通過寫博客的形式來記錄自己的學習過程,加深自己的理解,同時也方便以後查閱複習。目前打算先記錄一些基本的使用方法和部分底層實現,其他的如果有用到我再貼上來。文章內容是我根據自己的理解和參考網上的資料總結的,如果有錯誤的地方,就麻煩各位大佬批評指正哈。
這是第一篇,我們就先來瞭解一下Redis的基礎知識吧!
1. 什麼是Redis ?
簡單來說,Redis是一個基於C/S模式的Key-Value型的記憶體資料庫,所有數據都存儲在記憶體中,因此讀寫速度非常快,同時也支持數據持久化,可用於緩存、事件發佈或訂閱、高速隊列等場景。Redis提供了多種高級語言的API ,如Java, C,C++,PHP等,可以非常方便地集成到其他大型模塊中。另外,Redis提供了多種類型的數據結構給用戶,如字元串,列表,哈希,集合,有序集合等,大大提高了Redis的可用性和性能。
2. 使用Redis有什麼好處?
(1) 讀寫速度快,因為數據存在記憶體中,類似於HashMap,HashMap的優勢就是查找和操作的時間複雜度都是O(1);
(2) 支持豐富的數據類型,如 list, string, set, sorted set 等,方便用戶使用,提高數據存儲和數據讀寫的效率;
(3) 支持事務,即原子性操作,Redis中的事務(transaction)是一組命令的集合。事務同命令一樣都是Redis最小的執行單位,一個事務中 的命令要麼都執行,要麼都不執行。
(4) 特性豐富,支持多種應用場景,可以使用RDB或者AOF進行持久化;
3. 相比memcached,Redis有哪些優勢?
(1) memcached 只支持字元串類型的數據結構,而Redis支持多種高效方便的數據結構,方便使用;
(2) 一般來說,Redis的讀寫速度會比memcached快一些,性能更好;
(3) Redis 支持多種方式持久化,可以定期將記憶體中的數據寫到磁碟,重啟Redis 可以恢複原來的數據,而memcached不支持持久化,一旦系統掉電,數據就丟失了;
4. Redis的回收策略
Redis 支持多種回收策略(數據淘汰策略),用戶可以根據需要進行相應的配置,主要的回收策略有以下幾種:
(1) volatile-lru:從已設置過期時間的數據集中挑選最近最少使用的數據淘汰;
(2) volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰;
(3) volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰;
(4) allkeys-lru:從所有數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰;
(5) allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰;
(6) no-enviction(驅逐):禁止驅逐數據
參考資料
1. redis總結:https://blog.csdn.net/hjm4702192/article/details/80518856
2. https://blog.csdn.net/qq_29108585/article/details/63251491