1. 程式人生 > >Redis相關知識

Redis相關知識

targe 次數 比較 nginx 封裝 列表 dci VM emca

Redis 存儲的五種

字符串類型:string

散列類型: hash

列表類型: list

集合類型: set

有序集合類型: SortedSet

Redis與數據庫比較

mysql是持久化存儲,存放在磁盤裏面,檢索的話,會涉及到一定的IO,為了解決這個瓶頸,於是出現了緩存,比如現在用的最多的 memcached(簡稱mc)。首先,用戶訪問mc,如果未命中,就去訪問mysql,之後像內存和硬盤一樣,把數據復制到mc一部分。

  redis和mc都是緩存,並且都是駐留在內存中運行的,這大大提升了高數據量web訪問的訪問速度。然而mc只是提供了簡單的數據結構,比如 string存儲;redis卻提供了大量的數據結構,比如string、list、set、hashset、sorted set這些,這使得用戶方便了好多,畢竟封裝了一層實用的功能,同時實現了同樣的效果,當然用redis而慢慢舍棄mc。

  內存和硬盤的關系,硬盤放置主體數據用於持久化存儲,而內存則是當前運行的那部分數據,CPU訪問內存而不是磁盤,這大大提升了運行的速度,當然這是基於程序的局部化訪問原理。

  推理到redis+mysql,它是內存+磁盤關系的一個映射,mysql放在磁盤,redis放在內存,這樣的話,web應用每次只訪問redis,如果沒有找到的數據,才去訪問Mysql。

  然而redis+mysql和內存+磁盤的用法最好是不同的。

前者是內存數據庫,數據保存在內存中,當然速度快。
後者是關系型數據庫,功能強大,數據訪問也就慢。
像memcache,mongoDB,Redis,都屬於No sql系列。

訪問速度:redis把數據存放在內存中快,mysql把數據存放在硬盤中速度慢

訪問容量:mysql存放的數量大於redis,redis要做好容量預估

redis持久化不如mysql,重要的數據存在mysql中,那些讀寫頻繁的熱數據放在redis中

使用緩存框架的時候,我們需要關心的就是什麽時候創建緩存緩存失效策略

Memcache和redis對比:

1.性能上:

性能上都很出色,具體到細節,由於Redis只使用單核,而Memcached可以使用多核,所以平均每一個核上Redis在存儲小數據時比Memcached性能更高。而在100k以上的數據中,Memcached性能要高於Redis,雖然Redis最近也在存儲大數據的性能上進行優化,但是比起 Memcached,還是稍有遜色。

2.內存空間和數據量大小:

MemCached可以修改最大內存,采用LRU算法。Redis增加了VM的特性,突破了物理內存的限制。

3.操作便利上:

MemCached數據結構單一,僅用來緩存數據,而Redis支持更加豐富的數據類型,也可以在服務器端直接對數據進行豐富的操作,這樣可以減少網絡IO次數和數據體積。

4.可靠性上:

MemCached不支持數據持久化,斷電或重啟後數據消失,但其穩定性是有保證的。Redis支持數據持久化和數據恢復,允許單點故障,但是同時也會付出性能的代價。

5.應用場景:

Memcached:動態系統中減輕數據庫負載,提升性能;做緩存,適合多讀少寫,大數據量的情況(如人人網大量查詢用戶信息、好友信息、文章信息等)。

Redis:適用於對讀寫效率要求都很高,數據處理業務復雜和對安全性要求較高的系統(如新浪微博的計數和微博發布部分系統,對數據安全性、讀寫要求都很高)。

redis 單線程還是多線程?

Redis采用的是基於內存的采用的是單進程單線程模型的KV數據庫,由C語言編寫。官方提供的數據是可以達到100000+的qps。這個數據不比采用單進程多線程的同樣基於內存的KV數據庫Memcached差。

  • 多進程單線程模型:Nginx
  • 單進程多線程模型:Memcached

Redis快的主要原因是:

  1. 完全基於內存
  2. 數據結構簡單,對數據操作也簡單
  3. 使用多路 I/O 復用模型

單進程單線程好處

  1. 代碼更清晰,處理邏輯更簡單
  2. 不用去考慮各種鎖的問題,不存在加鎖釋放鎖操作,沒有因為可能出現死鎖而導致的性能消耗
  3. 不存在多進程或者多線程導致的切換而消耗CPU
  4. 無法發揮多核CPU性能,不過可以通過在單機開多個Redis實例來完善;

單進程單線程弊端

  1. 無法發揮多核CPU性能,不過可以通過在單機開多個Redis實例來完善;

參考:https://www.cnblogs.com/syyong/p/6231326.html

Redis相關知識