memcached
Memcached 和 Redis 比较
比较类别    | Redis | memcached |
---|---|---|
数据结构 | 哈希、列表、集合、有序集合 | 纯 kev-value |
持久化 | 支持 | 不支持 |
高可用 | 主从复制、读写分离、sentinel、Redis Cluster | 需二次开发 |
单 value 容量 | 最大 512M | 最大 1M |
内存分配 | 临时申请空间,可能导致碎片 | 预分配内存池的方式管理内存,能够省去内存分配时间 |
虚拟内存 | 有自己的 VM 机制,理论上能够存储比物理内存更多的数据,当数据超量时,会引发 swap,把冷数据刷到磁盘上 | 所有的数据存储在物理内存里 |
网络模型 | 非阻塞 IO 复用模型,提供一些非 KV 存储之外的排序、聚合功能,在执行这些功能时,复杂的 CPU 计算,会阻塞整个 IO 调度 | 非阻塞 IO 复用模型 |
水平扩展的支持 | redis cluster 可以横向扩展 | 暂无 |
多线程 | Redis6.0 之前是只支持单线程 | Memcached 支持多线程,CPU 利用方面 Memcache 优于 Redis |
过期策略 | 有专门线程,清除缓存数据 | 懒淘汰机制:每次往缓存放入数据的时候,都会存一个时间,在读取的时候要和设置的时间做 TTL 比较来判断是否过期 |
单机 QPS | 约 10W | 约 60W |
源代码可读性 | 代码清爽简洁 | 可能是考虑了太多的扩展性,多系统的兼容性,代码不清爽 |
适用场景 | 复杂数据结构、有持久化、高可用需求、value 存储内容较大 | 纯 KV,数据量非常大,并发量非常大的业务 |
Memcached 集群
Memcached 集群,称为基于客户端的分布式集群,即由客户端实现集群功能,即 Memcached 本身不支持集群
Memcached 集群内部并不互相通信,一切都需要客户端连接到 Memcached 服务器后自行组织这些节点,并决定数据存储的节点