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策略:
值得一提的是將key設置過時時間實際上會消耗更多的內存,所以咱們建議使用allkeys-lru策略從而更有效率的使用內存。
下面看看幾種策略的適用場景: