背景
在项目开发中,用户端会遇到需要实时更新配置数据的需求,如果配置数据在单库中配置,当用户端访问量较大,单库压力也会很大,此时会引入本地缓存来环节数据库服务器的压力。在集群环境中,当运营在B端更新数据库配置数据,由于用户端缓存还未失效,因此用户即使不断刷新也不能及时更新出最新的数据,用户体验总会存在一点不如人意的缺陷。这里介绍一种使用redis发布订阅能力+本地缓存Caffeine实现实时更新本地缓存的方案。
整个过程分成两个阶段:
初始同步
本地缓存建议设置成不过期,那么可以达到脱库的效果
广播同步
订阅端
在第一次加载数据到缓存的时候,进行订阅
发布端
在更改数据的接口里对最新的数据进行发布,如果该更数据的接口在管理项目中,注意要和用户端使用同一个redis实例,否则无法通知到对应集群redis客户端的
发布订阅原理
Redis的发布与订阅功能由PUBLISH、 SUBSCRIBE、 PSUBSCRIBE等命令组成。通过执SUBSCRIBE命令, 客户端可以订阅一个或多个频道, 从而成为这些频道的订阅者(subscriber) :每当有其他客户端向被订阅的频道发送消息(message) 时, 频道的所有订阅者都会收到这条消息。客户端还可以通过执行PSUBSCRIBE命令订阅一个或多个模式, 从而成为这些模式的订阅者:每当有其他客户端向某个频道发送消息时, 消息不仅会被发送给这个频道的所有订阅者, 它还会被发送给所有与这个频道相匹配的模式的订阅者
news.it频道订阅图例:
向new.it频道发送消息
频道和模式的订阅关系
将消息发送给频道的订阅者和匹配模式的订阅者