课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习计算机编程开发技术,而今天我们就通过案例分析来了解一下,缓存设计都面临哪些问题。
Redis
Redis是一个独立的系统软件,和我们写的业务程序是两个软件。当我们部署了Redis实例后,它只会被动地等待客户端发送请求,然后再进行处理。所以,如果应用程序想要使用Redis缓存,我们就要在程序中增加相应的缓存操作代码。所以我们也把Redis称为旁路缓存,也就是说:读取缓存、读取数据库和更新缓存的操作都需要在应用程序中来完成。
而作为缓存的Redis,同样需要面临常见的问题:
缓存的容量终究有限
上游并发请求冲击
缓存与后端存储数据一致性
替换策略
一般来说,缓存对于选定的被淘汰数据,会根据其是干净数据还是脏数据,选择直接删除还是写回数据库。但是,在Redis中,被淘汰数据无论干净与否都会被删除,所以,这是我们在使用Redis缓存时要特别注意的:当数据修改成为脏数据时,需要在数据库中也把数据修改过来。
所以不管替换策略是什么,脏数据有可能在换入换出中丢失。那我们在产生脏数据就应该删除缓存,而不是更新缓存,一切数据应该以数据库为准。这也很好理解,缓存写入应该交给读请求来完成;写请求尽可能保证数据一致性。
至于替换策略有哪些,网上已经有很多文章归纳之间的优劣,这里就不再赘述。
ShardCalls
并发场景下,可能会有多个线程(协程)同时请求同一份资源,如果每个请求都要走一遍资源的请求过程,除了比较低效之外,还会对资源服务造成并发的压力。
go-zero中的ShardCalls可以使得同时多个请求只需要发起一次拿结果的调用,其他请求"坐享其成",这种设计有效减少了资源服务的并发压力,可以有效防止缓存击穿。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。