Redis PK Memcached的总结

序言

Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用从而可以减轻关系数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态,数据库驱动网站的速度。Memcached是基于一个存储键/值对的hashmap。

Redis也是一个key-value存储系统,和Memcached类似。但是它支持存储的value类型相对更多,包括string(字符串),list(链表),set(集合),zset(有序集合)和hashs(哈希类型)。这些数据类型都支持push/pop,add/remove以及取交集并集和差集以及更丰富的操作,而且这些找错都是原子性的。在此基础上,Redis支持各种不同的排序。同Memcached一样,为了保证效率,数据都是缓存在内存中。区别是Redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis RK Memcached

1.网络IO模型
Memacached是多线程,非阻塞IO多路复用的网络模型,分为监听线程和work子线程,监听线程监听网络连接,接受请求后,将连接描述字pipe传递给work线程,进行读写IO,网络层使用libevent封装的事件库,多线程模型可以发挥多核作用,但是引入了cache coherency和锁的问题,比如Memcached最常用的stats命令,实际Memcached所有操作都要对这个全局变量加锁,进行计数等工作,带来了性能损耗。

Redis使用单线程的IO多路复用模型,自己封装了一个简单的AeEvent事件处理框架,主要实现了epoll,kqueue和select,对于单纯只有IO操作来说,单线程可以将速度优势发挥到极致。但是Redis也提供了一些简单的计算功能,比如排序,聚合等,对于这些操作,单线程模型实际会严重影响整体吞吐量,CPU计算过程中,整个IO调度都是被阻塞住的。

2.内存管理方面
Memcached使用预分配的内存池的方式,使用slab和大小不同的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式可以省去申请/释放内存的开销,并且能减少内存碎片的产生,但这种方式也会带来一定程度上的空间浪费,并且在内存仍然有很大空间时,新的数据也可能会被剔除。

Redis使用现场申请内存的方式来存储数据,并且很少使用free-list等方式来优化内存分配,会在一定程度上存在内存碎片,Redis根据存储命令参数,会把带过期时间的数据单独存放在一起,并把他们成为临时数据,非临时数据是永远不会被剔除的,即便物理内存不够,导致swap也不会剔除任何非临时数据(但会尝试剔除部分临时数据),这点上Redis跟适合作为存储而不是cache。

3.数据一致性问题
Memcached提供cas命令,可以保证多个并发访问操作操作同一份数据的一致性问题。Redis没有提供cas命令,并不能保证这点,不过Redis提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断。

4.存储方式以及其他方面
Memcached基本只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能;而Redis除了key-value之外,还支持list,set,sorted set,hash等众多数据结构,提供了keys进行枚举操作,但不支持线上使用,如果需要枚举线上数据,Redis提供了工具可以直接扫描其dump文件,枚举所有数据。Redis还同时提供了持久化和复制等功能

5.基本架构和思想
Memcached采用客户端-服务器的架构,客户端和服务器的通讯使用自定义的协议标准,只要满足协议要求,客户端可以用任何语言来实现。从用户的角度来说,服务器维护了一个键值对关系的数据表,服务器之前相互独立,相互之前不共享数据也不做任何通讯操作。Memcached的基本应用模型如下图所示
这里写图片描述

Redis的基本应用模式和上图的Memcached的基本相似

1. 用户与身体信息管理模块 用户信息管理: 注册登录:支持手机号 / 邮箱注册,密码加密存储,提供第三方快捷登录(模拟) 个人资料:记录基本信息(姓名、年龄、性别、身高、体重、职业) 健康目标:用户设置目标(如 “减重 5kg”“增肌”“维持健康”)及期望周期 身体状态跟踪: 体重记录:定期录入体重数据,生成体重变化曲线(折线图) 身体指标:记录 BMI(自动计算)、体脂率(可选)、基础代谢率(根据身高体重估算) 健康状况:用户可填写特殊情况(如糖尿病、过敏食物、素食偏好),系统据此调整推荐 2. 膳食记录与食物数据库模块 食物数据库: 基础信息:包含常见食物(如米饭、鸡蛋、牛肉)的名称、类别(主食 / 肉类 / 蔬菜等)、每份重量 营养成分:记录每 100g 食物的热量(kcal)、蛋白质、脂肪、碳水化合物、维生素、矿物质含量 数据库维护:管理员可添加新食物、更新营养数据,支持按名称 / 类别检索 膳食记录功能: 快速记录:用户选择食物、输入食用量(克 / 份),系统自动计算摄入的营养成分 餐次分类:按早餐 / 午餐 / 晚餐 / 加餐分类记录,支持上传餐食照片(可选) 批量操作:提供常见套餐模板(如 “三明治 + 牛奶”),一键添加到记录 历史记录:按日期查看过往膳食记录,支持编辑 / 删除错误记录 3. 营养分析模块 每日营养摄入分析: 核心指标计算:统计当日摄入的总热量、蛋白质 / 脂肪 / 碳水化合物占比(按每日推荐量对比) 微量营养素分析:检查维生素(如维生素 C、钙、铁)的摄入是否达标 平衡评估:生成 “营养平衡度” 评分(0-100 分),指出摄入过剩或不足的营养素 趋势分析: 周 / 月营养趋势:用折线图展示近 7 天 / 30 天的热量、三大营养素摄入变化 对比分析:将实际摄入与推荐量对比(如 “蛋白质摄入仅达到推荐量的 70%”) 目标达成率:针对健
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值