`
carlosfu
  • 浏览: 582305 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ba8b5055-9c58-3ab0-8a1c-e710f0495d2c
BigMemory实战与理...
浏览量:31216
53b2087e-c637-34d2-b61d-257846f73ade
RedisCluster开...
浏览量:151026
C9f66038-7478-3388-8086-d20c1f535495
缓存的使用与设计
浏览量:125214
社区版块
存档分类
最新评论

缓存系列文章--4.缓存的粒度控制

阅读更多

转载请注明出处哈:http://carlosfu.iteye.com/blog/2269678


   

 一、什么是缓存粒度

 

    下面这个图是很多项目关于缓存使用最常用的一个抽象,那么我们假设storage层为mysql, cache层为redis。

 

   

 

 

    假如我现在需要对视频的信息做一个缓存,也就是需要对select * from video where id=?的每个id在redis里做一份缓存,这样cache层就可以帮助我抗住很多的访问量(注:这里不讨论一致性和架构等等问题,只讨论缓存的粒度问题)。

    我们假设视频表有100个属性(这个真有,有些人可能难以想象),那么问题来了,需要缓存什么维度呢,也就是有两种选择吧:

(1)cache(id)=select * from video where id=#id
(2)cache(id)=select importantColumn1, importantColumn2 .. importantColumnN from video where id=#id

 

    其实这个问题就是缓存粒度问题,我们在缓存设计应该佮预估和考虑呢?下面我们将从通用性、空间、代码维护三个角度进行说明。

 

二、全部数据和部分数据比较

 

1. 两者的特点是显而易见的:

数据类型 通用性 空间占用(内存空间 + 网络码率) 代码维护
全部数据

简单 
部分数据

 

 较为复杂

 

 

2. 通用性:

    如果单从通用性上看,全部数据是最优秀的,但是有个问题就是是否有必要缓存全部数据,认为以后会有这样的需求,但是从经验看除了非常重要的信息,那些不重要的字段基本不会在需求里出现,也就是说这种通用性 通常都是想象出来的。太多人觉得通用性是最重要的。vid拿一些基本信息,会想专辑明星。。要不要用通用性高的,于是加了全局的,通用性很重要,但是要想清楚。

 

3. 空间占用:

    很显然,缓存全部数据,会占用大量的内存,有人会说,不就费一点内存吗,能有多少钱?而且已经有人习惯了把缓存当做下水道来使用,什么都框框的往里面放,但是我这里要说内存并不是免费的,可以说是很珍贵的资源。instagram21->4G的例子就说明了这个道理,好的程序员可以帮助公司节约大量的资源。

    而且单个cache(id)也带来两个问题:序列化的开销和网络流量的开销(QPS,百倍),都是无容忽视的。

 

4. 代码维护:

    代码维护性,全部数据的优势更加明显,而部分数据一旦要加新字段就会修改代码,而且还需要对原来的数据进行刷新。

 

 

三、总结:

 

 缓存粒度问题是一个容易被忽视的问题,如果使用不当,可能会造成很多无用空间的浪费,可能会造成网络带宽的浪费,可能会造成代码通用性较差等情况,必须学会综合数据通用性、空间占用比、代码维护性 三点评估取舍因素权衡使用。

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 127.4 KB
  • 大小: 30.7 KB
  • 大小: 18.4 KB
分享到:
评论

相关推荐

    mysql-5.0.27-win32.zip

    7. **安全性增强**:提供了更细粒度的权限控制,用户可以针对不同数据库、表甚至列设定不同的访问权限。 8. **字符集支持**:MySQL 5.0 支持更多的字符集,包括Unicode(如UTF-8),满足全球化应用的需求。 安装 ...

    mysql-5.5.40-win64.zip

    7. **安全性和权限**:MySQL 5.5提供了更细粒度的权限控制,包括GRANT和REVOKE命令,有助于管理员更好地管理用户访问和操作权限。 8. **线程池**:引入线程池插件,允许限制并发连接,优化资源分配,尤其适合处理...

    mysql-5.5.56-winx64.msi

    8. **安全性提升**:改进了权限系统,加强了安全认证,如支持SSL连接,提供了更细粒度的权限控制。 9. **MySQL日志系统**:日志系统得到优化,例如binlog(二进制日志)格式的改进,以及slow query log(慢查询日志...

    mysql-8.1.0-solaris11-sparc-64bit.tar.gz

    - 系统资源管理:通过DTrace和Service Management Facility (SMF) 提供细粒度的系统资源控制。 - 安全特性:内置的强制访问控制(MAC)和Kerberos认证增强了系统的安全性。 - 持续集成和持续交付(CI/CD):...

    hbase-1.6.0-bin.tar.gz

    5. **安全与权限管理**:HBase 1.6.0加强了安全性,支持Kerberos认证,以及通过ACL进行细粒度的权限控制,确保了数据的安全性。 6. **监控与诊断**:新版本提供了更好的监控和诊断工具,如改进的JMX指标,帮助管理...

    nexus-3.29.0-02-win64.zip

    安全性方面,Nexus提供了细粒度的权限控制,可以限制不同用户或团队对特定存储库的访问。此外,它还支持SSL/TLS加密,确保数据传输的安全性。性能优化体现在更快的索引和搜索速度,以及更高效的缓存策略,降低了网络...

    mysql-installer-community-5.7.29.0.msi.7z

    4. **增强的安全性**:增强了用户权限管理,支持更细粒度的访问控制,并引入了密码验证插件,提升了账户安全。 5. **组复制**:引入了Group Replication,这是一种高可用性和容错性的解决方案,允许多个MySQL实例...

    mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz

    8. **安全增强**:改进了权限管理,包括支持更细粒度的权限控制和更好的审计日志功能。 9. **存储引擎**:虽然InnoDB是默认的存储引擎,但MySQL 5.6也支持MyISAM、Memory、CSV等其他引擎,每个引擎都有其特定的应用...

    mysql-5.5.57-win32.zip安装包(32,64位都可以用)

    在安全性方面,MySQL 5.5强化了权限管理系统,支持更细粒度的权限控制,有助于保护数据安全。此外,SSL加密连接的默认启用,确保了数据传输过程中的隐私保护。 此外,MySQL 5.5.57包含了一套完整的开发库和API,...

    nvidia-ampere-architecture-whitepaper.pdf

    其中,第三代NVIDIA Tensor Core对AI数据类型支持更为全面,通过细粒度结构化稀疏性(fine-grained structured sparsity)和稀疏矩阵乘法累加(MMA)操作,进一步提升了深度学习应用的性能。 在内存架构方面,A100...

    mysql-5.5.15-win32.zip

    - 缓存机制:如查询缓存和InnoDB缓冲池,减少磁盘I/O,提升响应速度。 - 表分区:对于大型表,可以采用分区策略,提高查询和维护速度。 6. **复制与集群**: - 数据库复制:MySQL支持主从复制,实现数据的实时...

    mysql-5.0.51a.tar.gz

    11. **安全增强**:增加了GRANT和REVOKE语句,提供了更细粒度的权限控制,加强了数据库的安全性。 12. **复制功能**:MySQL 5.0的复制功能也有所增强,允许主从复制,用于数据备份和负载均衡。 13. **字符集支持**...

    phoenix-hbase-2.2-5.1.3-bin.tar.gz

    同时,它也实现了Apache Ranger的集成,提供了细粒度的权限控制,允许管理员控制用户对HBase表和索引的访问权限。 总结,"phoenix-hbase-2.2-5.1.3-bin.tar.gz"是一个强大的工具,让HBase用户能够借助SQL的力量轻松...

    spring-aop-3.2.0.RELEASE-sources.jar.zip

    前者适用于实现了接口的目标对象,后者则适用于没有接口或实现了接口但需要更细粒度控制的情况。 1. JDK动态代理:基于Java反射API,为目标对象创建一个实现了相同接口的代理类,然后在调用接口方法时插入通知。 2...

    mybatis-redis-1.0.0-beta1.zip

    MyBatis-Redis是一个将Redis缓存集成到...需要注意的是,合理地设计缓存策略和粒度,避免因缓存不当导致的问题,如数据一致性问题和内存溢出。同时,监控Redis的使用情况,确保其健康运行,是保证系统稳定性的关键。

    mysql-5.0.27.tar.gz

    在安全方面,MySQL 5.0.27增强了权限管理,包括更细粒度的用户权限控制,以及更强大的密码加密算法,保证了数据的安全性。同时,审计日志功能的引入,使得管理员能够追踪和分析数据库的使用情况,便于监控和排查问题...

    elasticsearch-analysis-ik-6.5.4.zip

    它支持多种分词模式,如全模式、最细粒度模式等,可以满足不同场景下的需求。IK分词器不仅能够处理常见的中文词汇,还能够通过自定义扩展词库来处理行业术语和新词,从而提高搜索的准确性。 二、Elasticsearch ...

    mysql-5.7.28.tar.gz

    同时,它还加强了权限管理,允许更细粒度的访问控制,提高了数据库的安全性。 安装MySQL 5.7.28通常涉及以下步骤: 1. 下载tar.gz压缩包:这一步已经完成,文件名为“mysql-5.7.28.tar.gz”。 2. 解压文件:使用...

    Python库 | exchangelib-3.2.0-py2.py3-none-any.whl

    它支持IMAP4和POP3的替代方案,因为EWS提供了更丰富的功能和更细粒度的控制。 2. **日历管理**:用户可以创建、修改和删除日历项,安排会议,并处理与会者之间的交互。库还支持获取日历的可用时间段,以便于预订。 ...

    gradle-8.0-all.zip 快速下载

    Gradle-8.0 此版本包括对的几项改进科特林DSL。这包括一个解释器来跳过声明性插件的Kotlin编译器,并升级到Kotlin API级。...这包括通过从缓存条目加载任务并在首次构建时独立运行任务来实现更细粒度的并行性。

Global site tag (gtag.js) - Google Analytics