For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
缓存功能的应用分析我们在前几期的文章中已经给大家介绍过很多次了,而本文我们就继续来了解和学习一下,进程缓存与缓存服务的应用分享。
一、进程缓存
先说说进程缓存,它将数据存储在站点、服务的进程内。在Web的发展历史上,这样的方式备受欢迎。
这种实现载体很简单,比如一个带锁的HasTable,或者一个List对象。使用简单便捷,能存储数据、html页面片段、文件,甚至任何对象。
缓存的目的是为了冷热数据的隔离,对于频繁被修改的数据,缓存的意义不是很大,比如微信用户的实时步数。比较有价值的是那些不被频繁修改且数据量较大的内容,比如系统字典、配置数据。
二进程缓存的问题
在互联网大潮下,随着用户量的激增,原来单体结构逐渐的向Web服务集群发展,在多实例目标下,进程缓存的弊端越来越明显。
比如缓存无法统一的问题。
如果站点和服务中的多个节点访问统一的缓存服务(比如redis或者memerche),数据统一存储,数据的一致性就比较容易保障。
但如果是进程缓存,数据存储在站点和服务的多个节点内,每个节点一个缓存,存储多份,一致性就比较难保障。
所以我们在以下这几种情况下抛弃进程缓存,选用缓存服务:
1、Web集群下,包含多个实例,并且不允许业务数据的不一致性(我相信大部分业务不允许)
2、进程内缓存数据量较大,缓存内存空间不足,影响Web性能,可以考虑走缓存服务(缓存服务如redis,一般独立服务甚至集群配置,支持超大量级)。
3、评估value大小、缓存内存空间、峰值QPS、过期时间、缓存命中率、读写更新策略、key值分布路由策略、过期策略以及数据一致性方案,根据实际需要判断是否走缓存服务。
三、缓存服务
在互联网分层架构中,常用的kv结构的缓存是redis。他有如下特点:
1、它支持复杂数据结构
value是字符串、哈希,列表,集合,有序集合这类复杂的数据结构。支持各种场景,如客户订单信息列表,用户消息,帖子评论等。
2、支持持久化
redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);
也可以把每一次数据变化都写入到一个appendonlyfile(aof)里面(这称为“全持久化模式”,效率会低一点)。
但是我们尽量不要把redis当作数据库用,如果真的需要持久化数据,建议可以走MySQL:
2.1、redis的定期快照不能保证数据不丢失
2.2、redis的AOF会降低效率,并且不能支持太大的数据量
3、具备高可用特性
redis天然支持集群功能,可以实现主动复制,读写分离。官方也提供了sentinel集群管理工具,能够实现主从服务监控,故障自动转移。
4、存储的内容比较大
String类型:一个String类型的value大可以存储512M,List、Set、Hash类型:list的元素个数多为2^32-1个,也就是4294967295个。
5、支持事务
操作都是原子性,对数据的更改要么全部执行,要么全部不执行。避免业务数据的不一致性。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。