前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >聊聊redis的HealthIndicator

聊聊redis的HealthIndicator

作者头像
code4it
发布2018-09-17 17:28:08
1.6K0
发布2018-09-17 17:28:08
举报
文章被收录于专栏:码匠的流水账码匠的流水账

本文主要研究一下redis的HealthIndicator

RedisHealthIndicator

spring-boot-actuator-2.0.4.RELEASE-sources.jar!/org/springframework/boot/actuate/redis/RedisHealthIndicator.java

代码语言:javascript
复制
public class RedisHealthIndicator extends AbstractHealthIndicator {

    static final String VERSION = "version";

    static final String REDIS_VERSION = "redis_version";

    private final RedisConnectionFactory redisConnectionFactory;

    public RedisHealthIndicator(RedisConnectionFactory connectionFactory) {
        super("Redis health check failed");
        Assert.notNull(connectionFactory, "ConnectionFactory must not be null");
        this.redisConnectionFactory = connectionFactory;
    }

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        RedisConnection connection = RedisConnectionUtils
                .getConnection(this.redisConnectionFactory);
        try {
            if (connection instanceof RedisClusterConnection) {
                ClusterInfo clusterInfo = ((RedisClusterConnection) connection)
                        .clusterGetClusterInfo();
                builder.up().withDetail("cluster_size", clusterInfo.getClusterSize())
                        .withDetail("slots_up", clusterInfo.getSlotsOk())
                        .withDetail("slots_fail", clusterInfo.getSlotsFail());
            }
            else {
                Properties info = connection.info();
                builder.up().withDetail(VERSION, info.getProperty(REDIS_VERSION));
            }
        }
        finally {
            RedisConnectionUtils.releaseConnection(connection,
                    this.redisConnectionFactory);
        }
    }

}
  • 这里判断是否是cluster,如果是则调用clusterGetClusterInfo,否则调用info方法

RedisReactiveHealthIndicator

spring-boot-actuator-2.0.4.RELEASE-sources.jar!/org/springframework/boot/actuate/redis/RedisReactiveHealthIndicator.java

代码语言:javascript
复制
public class RedisReactiveHealthIndicator extends AbstractReactiveHealthIndicator {

    private final ReactiveRedisConnectionFactory connectionFactory;

    public RedisReactiveHealthIndicator(
            ReactiveRedisConnectionFactory connectionFactory) {
        this.connectionFactory = connectionFactory;
    }

    @Override
    protected Mono<Health> doHealthCheck(Health.Builder builder) {
        ReactiveRedisConnection connection = this.connectionFactory
                .getReactiveConnection();
        return connection.serverCommands().info().map((info) -> up(builder, info))
                .doFinally((signal) -> connection.close());
    }

    private Health up(Health.Builder builder, Properties info) {
        return builder.up().withDetail(RedisHealthIndicator.VERSION,
                info.getProperty(RedisHealthIndicator.REDIS_VERSION)).build();
    }

}
  • 采用lettuce的话,启用的是RedisReactiveHealthIndicator,这里调用info方法,不过这个方法返回的属性有点多,大约有83个

小结

redis的HealthIndicator分为RedisHealthIndicator以及RedisReactiveHealthIndicator。如果底层client采用的是lettuce,则使用的是reactive版本。其health检测方法,就是调用info命令。

doc

  • 6.2.2. ReactiveRedisConnection and ReactiveRedisConnectionFactory
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码匠的流水账 微信公众号,前往查看

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

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

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