前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >主动和被动结合,结果是不是会更好?

主动和被动结合,结果是不是会更好?

作者头像
用户4361942
发布2019-05-24 17:01:14
7330
发布2019-05-24 17:01:14
举报
文章被收录于专栏:java程序员思维java程序员思维

今日励志视频:永远不要低估自己,相信你自己,你才能做到

主动代表积极,被动代表消极,主动之人步步占领先机,被动之人处处受制于人。但很多情况我们是相对被动的,被动的同时,也请保留主动,结果可能会更好。

携程的apollo是一个分布式的配置中心,作为客户端,需要被动的接收服务端的变化的通知,如果通知过程中客户端出现了问题,会导致客户端获得的数据不是最新的,为了防止这种情况,客户端主动的做了一些事情,定时的向服务器请求最新的数据,将最新的数据放在内存中,同时将配置数据写入文件,即便是服务器端不可用,客户端也能够正常工作。客户端通过主动的做了一些事情,很大程度的提高了系统的可用性。阿里的dubbo也有异曲同工之妙,客户端订阅zookeeper,被动接收服务提供者的变化信息,同时主动的在客户端,维护了服务端的信息,即便zookeeper异常,客户端也能通过本地信息,正常调用远程服务。

redis缓存失效有两种方式,主动过期和被动过期,主动过期是定时任务,采用贪心算法,随机取出20个key删除已经过期的key,如果过期的key比例大于1/4,重复上面的动作,为了防止死循环,算法增加了扫描时间的上限,默认不会超过25ms。被动的方式,在下一次获取key的时候,检查key是否过期,如果key过期了,将key删除。两种方式各有优缺点,主动方式需要开启一个新的线程,会增加系统的开销,需要使用cpu资源,优点是可以重复利用内存资源,可以早一点删除key,释放内存,用来存储新的key。被动的方式,实现简单,也不需要额外的消耗cpu,但是内存重复利用率低,key过期如果一直不被查询,就不会被回收,导致内存的浪费。当然不是说key一直不查询,就一直不被回收,当出现内存不足的情况,redis提供了多种淘汰策略,对已设置过期时间的key,1.删除即将过期的key,2.删除最近使用最少的key,3.随机删除一些key。4.对所有的key,删除最近使用最少的key,5.对所有的key进行随机删除。6.不做任何处理,新的key无法正常写入。

为了保证数据库和缓存数据的一致性,往往也会采取主动和被动结合的方式,数据库修改之后,主动通知缓存修改,可以通过消息中间件,为了异步和解耦。可能因为网络抖动,一些异常情况,导致数据不一致,可以通过被动定时任务,查询数据库,将数据进行修正。主动和被动结合,更大程度上保证数据的一致性。

在日常生活中也存在很多,主动和被动结合的例子,我们收取快递,是被动的等待快递员把快递送到我们手上,但是我们也会有很多主动的操作,可能通过快递单号查询相关的物流信息,或者主动拨打快递员电话,询问物流相关的信息,如果想早点拿到快递,可以请求快递小哥帮忙早一点配送,这样你就有可能比别人早一点收到你的快递。做饭的锅你是怎么处理的?是用完之后主动的去刷?还是被动的等下一次使用的时候再去刷?

机器世界和生活中,有时候主动和被动结合,通过冗余备份的方法,提高一些可用性。主动为主,被动为辅,毕竟主动去做和被动去做还是存在一些区别的,相对来说主动去做某一件事,效果可能会好一点。主动和被动结合,结果是不是会更好?以上是我的一些看法,如果你有更好的想法和建议,欢迎留言一起探头和交流。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java程序员思维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今日励志视频:永远不要低估自己,相信你自己,你才能做到
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档