從新認識Redis

Redis支持的數據類型:

 

String、list、hash、setredis

 

單線程的redis爲何速度那麼快?

  1. 數據是存儲在內存中的,內存的訪問處理速度自己就是很是優秀的
  2. 底層是採用了NIO的設計方式,依靠多路複用器達到同步非阻塞的好處
  3. Redis是單線程的。。。多線程在切換時是有上下文的切換開銷的,這個是有時間性能損耗的

 

Redis的持久化實現

Reids相較於memcached優秀的一點是他能夠作磁盤持久化,默認是經過RDB,還有一種方式是AOF算法

 

  1. RDB持久化

經過bgsave命令觸發,父進程會執行fork建立子進程,子進程建立一個RDB的二進制文件,而後將此副本文件存儲在硬盤中緩存

優勢:RDB的數據恢復速度是遠高於AOF的多線程

缺點:因爲RDB文件的生成是命令觸發的,並非實時在持久化的,因此每次去生成這個文件的開銷會比較大dom

 

  1. AOF持久化

AOF是實時持久化的,redis每次去執行一個修改數據的命令,都會把修改的命令保存到AOF文件中memcached

優勢:實時在作持久化操做的性能

缺點:隨着時間的推移,AOF文件會變得愈來愈大,須要按期重寫來下降文件體積,並且AOF的加載速度更慢spa

 

 

Redis的選舉機制

哨兵提供監控服務,經過心跳機制,ping節點是否在正常狀態下,如果發現ping不通,則會主觀的認爲該節點故障,當半數的哨兵發現都ping不通時,則會認爲該節點宕機,從而運用roft算法(選舉機制),選出新的節點做爲主節點線程

 

 

Redis的緩存更新機制

惰性過時:當訪問該key值時,如果已經超過了超時時間,就會清除。如果不訪問,即便超時了也不會對其進行處理設計

按期過時:每隔一段時間(Redis默認是100MS)隨機抽取一部分key進行檢查一次,對已通過期的Key值進行清除處理

 

Redis是同時使用了這兩種策略的惰性過時和按期過時,看似按期過時好,可是存在一個問題是,按期過時如果同一時間下去處理大量過時的key值,那他也只會處理這其中的一部分,剩下的交給惰性處理。爲的是避免redis處理大量key值時,影響其的性能

 

 

Redis的數據淘汰策略

最經常使用的一種策略allkeys-lru:當內存出現不足以容納新數據寫入時,在鍵空間中,移除最近最少使用的鍵值

 

其餘策略

  1. noeviction:當目前內存不足以容納新數據寫入時,直接報錯
  2. allkeys-random:當目前內存不足以容納新數據寫入時,隨機挑選一個key值刪除
  3. volatile-lru:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,移除最近最少使用的key(這個通常不太合適)
  4. volatile-random:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,隨機移除某個key
  5. volatile-ttl:當內存不足以容納新寫入數據時,在設置了過時時間的鍵空間中,有更早過時時間的key優先移除
相關文章
相關標籤/搜索