精英联盟总队 缓存框架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释放内存 。
推荐阅读
- haoenyiqi|盐水喷雾测试机
- 今夜我还来|YQL71分挺进周决,PEL和平精英职业联赛战报:A6跳车甩枪瞬秒阿逸
- 科技/资讯 易捷行云作为发起单位成立山东?PKS长城网信产业联盟,拓展信创云生态
- 资深开黑玩家|与职业选手一较高下的机会来了!,《和平精英》ChinaJoy热血竞技
- 英雄联盟全球总决赛连续两年落地中国 全球电竞用户将达到近5亿
- ZAKER生活|南加高校联盟63个校友会50000校友强烈反对加州16号提案
- 中国青年网|白俄罗斯:摩托车手秀特技“冲上云霄”
- 阿瑶说游戏|保准气哭你,和平精英:有技术就能吃鸡?那是你没遇到这5件事
- 假大神|S级难度,钻石以下玩不来,英雄联盟:“空蓝”不想补刀的英雄
- 太平洋电脑网|宁美亮相CJ现场!多款顶配主机任意玩