天天看點

重新認識redis

redis的本質

1.一台遠端伺服器,通過sokect連接配接用戶端,并向用戶端提供緩存服務(緩存的資料結構類似Map)

2.為什麼用戶端不在本地用Map緩存資料,而需要一台獨立的伺服器做緩存?

1)因為分布式和叢集概念興起,一個應用,需要多台伺服器協同工作,多台伺服器意味着多個JVM

2)多個JVM意味着跨JVM,跨JVM意味着我們要如何保證不同JVM的本地緩存資料保持最終一緻性?

3)為了繞開這個問題,redis另起爐竈做了個用戶端共用的緩存伺服器,并向多個用戶端提供緩存服務

4)緩存伺服器就類似一個遠端Map,多個用戶端向伺服器發送讀寫指令,都是讀寫同一個Map裡面的資料

3.redis緩存比本地緩存(Map)的優勢

1)redis和Map一樣,是key,value結構,而redis的key隻支援string,value支援string,list,set,zset,hash

2)redis作為一個完整的緩存中間件,實作了很多實用的功能,而這些功能Map都是不具備的,若要具備,需要Map獨立實作

3)例如持久化,zset排序功能,set并差集操作,string的自增功能,一些統計功能,以及一些緩存失效政策

4)讀寫指令操作都是原子操作,不需要像HashMap一樣手動保證線程安全

5)支援分布式的資料分片功能,高可用的主從配置以及資料備份功能

4.redis和mysql的差別

1)redis追求性能的最大化,犧牲了一定的持久性,mysql追求資料的持久性,也犧牲了一定的性能

2)兩者架構有些類似,也有不同,但是資料存放的架構模式類似:記憶體+磁盤

3)redis記憶體:操作的記憶體很大,空間容量機關為G,記憶體資料命中率很高,并且使用hash(key)方式定位資料,追求極緻的性能

4)mysql記憶體:操作的記憶體很小,空間容量機關為M,記憶體資料命中率較低,并且使用B+樹索引方式定位資料,放棄了部分性能追求

5)redis磁盤:redis的記憶體是按(key,value)結構組織的,有兩種磁盤檔案:RDB(複制記憶體資料的方式)和AOF(追加指令的方式)

5)mysql磁盤:mysql的行資料是按一定表結構組織的,是以資料的持久化是按一定結構進行整理儲存的,并保證Commit的資料不會丢失

繼續閱讀