Redis與Memcached的區別

memcached和redis的區別redis

區別:緩存

一、數據類型不一樣,memcached只支持key-value,redis支持String,List,Map,set,sorted Set網絡

 

二、memcached保存在內存中,redis內存和文件裏面都有保存,宕機以後memcached徹底丟失,redis還能夠從文件中恢復到內存中多線程

三、memcahed的內存分配是基於slab劃分的,經過page(默認1M)申請內存,而後每一個slab會劃分爲好多的chunk,數據都存儲在chunk中,redis爲了屏蔽不一樣平臺之間的差別,redis對內存分配函數進行了一層封裝,程序中統一使用zmalloc,zfree一系列函數dom

 

四、memcahed基於libevent網絡庫,而redis是基於epoll網絡模型,緊接着說下,異步

select,poll,epoll的區別分佈式

select同步阻塞,最大文件描述符1024,memcached

poll同步阻塞,沒有最大文件描述符限制,函數

epoll異步非阻塞,沒有最大文件描述符限制。性能

select是輪詢式的事件通知,

epoll是回調事件通知callback

五、memcahed多線程的,redis是單線程的,redis使用epoll,這就是redis爲何使用單線程性能一點也不遜於memcahed的緣由

 

 

六、key過時策略,memcahed採用的消極策略,也就是get時候斷定作刪除,redis除了消極策略,還有積極策略,積極清理就是每秒鐘有一個定時任務會掃描10次

    1.隨機測試100個設置了過時時間的key
    2.刪除全部發現的已過時的key
    3.若刪除的key超過25個則重複步驟1

七、memcahed只支持客戶端的分佈式,採用consistent hashing,redis有基於服務端的集羣模式

 

八、memcached採用cas來保證數據一致性,redis有比較弱的事務支持

 

 

redis筆記

一、redis的數據類型

二、redis的key過時機制(消極過時和主動清理(積極過時))

三、redis的客戶端jedis,序列化之類的

四、redis的集羣怎麼作的,jedis自帶有一致性hash,可是不能自動剔除節點,twemproxy,能夠自動剔除節點,可是它自己是個單點,須要用keepalive作個VIP高可用,cluster 3.0之後推出的方案 16384個slot,每一個節點負責一部分的slot

五、redis採用了epoll機制,epoll異步非阻塞,而且是觸發式的callback,順帶提一下,select同步阻塞的,最大文件描述符1024,poll同步阻塞的,最大文件描述符沒有限制,epoll,異步非阻塞,沒有最大文件描述符限制

 

Redis淘汰策略

Redis提供了下面幾種淘汰策略供用戶選擇,其中默認的策略爲noeviction策略:

  • noeviction:當內存使用達到閾值的時候,全部引發申請內存的命令會報錯。
  • allkeys-lru:在主鍵空間中,優先移除最近未使用的key。
  • volatile-lru:在設置了過時時間的鍵空間中,優先移除最近未使用的key。
  • allkeys-random:在主鍵空間中,隨機移除某個key。
  • volatile-random:在設置了過時時間的鍵空間中,隨機移除某個key。
  • volatile-ttl:在設置了過時時間的鍵空間中,具備更早過時時間的key優先移除。

 

值得一提的是將key設置過時時間實際上會消耗更多的內存,所以咱們建議使用allkeys-lru策略從而更有效率的使用內存。

 

下面看看幾種策略的適用場景:

  • allkeys-lru:若是咱們的應用對緩存的訪問符合冪律分佈(也就是存在相對熱點數據),或者咱們不太清楚咱們應用的緩存訪問分佈情況,咱們能夠選擇allkeys-lru策略。
  • allkeys-random:若是咱們的應用對於緩存key的訪問機率相等,則可使用這個策略。
  • volatile-ttl:這種策略使得咱們能夠向Redis提示哪些key更適合被eviction。
相關文章
相關標籤/搜索