精英联盟总队 缓存框架Redis、Memcached技术选型,「微服务」( 二 )
Redis6.0与Memcached多线程模型对比:**相同点:**都采用了master线程-worker线程的模型
不同点:Memcached执行主逻辑也是在worker线程里 , 模型更加简单 , 实现了真正的线程隔离 , 符合我们对线程隔离的常规理解 。 而Redis把处理逻辑交还给master线程 , 虽然一定程度上增加了模型复杂度 , 但也解决了线程并发安全等问题 。
数据支持类型MemcachedMemcached使用key-value形式存储和访问数据(所以 , Memcached仅支持Key-Value) , 在内存中维护一张巨大的HashTable , 使得对数据查询的时间复杂度降低到O(1) , 保证了对数据的高性能访问 。
RedisRedis支持常见的数据结构 , 如Set、ZSet、Hash、Bitmap、List、Geo等 。
同时还有Pub/Sub、Transaction等特性 。
对于当前的一些业务场景中 , 很多时候都可以直接套用 。 比如 , 利用Pub/Sub实现简单的消息队列 , 利用Geo实现附近的人、利用ZSet实现实时排行榜等 。
假定图中GrowthFactor的取值为1.25 , 如果第一组Chunk的大小为88个字节 , 第二组Chunk的大小就为112个字节 , 依此类推 。
从以上过程我们可以看出Memcached的内存管理制效率高 , 而且不会造成内存碎片 , 但是它最大的缺点就是会导致空间浪费 。
因为每个Chunk都分配了特定长度的内存空间 , 所以变长数据无法充分利用这些空间 。 如图所示 , 将100个字节的数据缓存到128个字节的Chunk中 , 剩余的28个字节就浪费掉了 。
如图所示 , real_ptr是redis调用malloc后返回的指针 。 redis将内存块的大小size存入头部 , size所占据的内存大小是已知的 , 为size_t类型的长度 , 然后返回ret_ptr 。
当需要释放内存的时候 , ret_ptr被传给内存管理程序 。 通过ret_ptr , 程序可以很容易的算出real_ptr的值 , 然后将real_ptr传给free释放内存 。
- 科技/资讯 易捷行云作为发起单位成立山东?PKS长城网信产业联盟,拓展信创云生态
- 英雄联盟全球总决赛连续两年落地中国 全球电竞用户将达到近5亿
- ZAKER生活|南加高校联盟63个校友会50000校友强烈反对加州16号提案
- 中国青年网|白俄罗斯:摩托车手秀特技“冲上云霄”
- 上单|英雄联盟船长呃呃玩法解析
- 漫威复仇者联盟|传闻《漫威复联》或将加入蜘蛛侠 可能是PS4版独占
- 发展|首批4只科创50ETF获受理;B站获英雄联盟赛事三年独播权;上海开启观影惠民季;《八佰》定档8月21日 | 投资者早报
- 鲜闻说|告别“复仇者联盟”之后,性感女神斯嘉丽·约翰逊,走上转型之路
- 用户第三种功能分析法:平均成本
- 九校联盟|九校联盟中最弱的985大学,华中科技大学虎视眈眈,能否取代?