Redisson客户端可视化监控Redis服务

Redisson客户端可视化监控Redis服务

前言

Redis是我们目前项目中运用最多和最广的缓存技术.作为表现优异的缓存技术读写性能可以达到10万/秒.将数据读取到内存中,采用单线程不存在加锁资源竞争,非阻塞的io流,所以读取数据非常的快.
在这里插入图片描述
往往在项目中,我们需要监控系统服务.本篇文章我们来探讨的是redisson客户端监控redis运行情况.

  • Redisson官方网站: https://redisson.org.
  • Redisson的github的官方的文档:
    https://github.com/redisson/redisson/wiki
    .
    中文地址:
    https://github.com/redisson/redisson/wiki/%E7%9B%AE%E5%BD%95.
  • Redisson基于Netty框架的事件驱动的通信层,其方法调用是异步的.Redisson的API是线程安全的.
  • Redisson提供了一系列分布式对象和服务.
  • Redisson将hash、list、set、string、Geo和HyperLogLog等原生的Redis数据类型封装成了易于使用的Java数据结构或对象(Map, List, Set, Object Bucket, Geospatial Bucket和HyperLogLog).
  • Redisson完美支持各种分布式锁,可重入锁,公平锁,联锁,红锁,读写锁 ,还有CountDownLantch.
  • Redisson支持单机模式,主从模式,集群模式,哨兵模式启动运行.

下面开始讲解Redisson作为java客户端的监控方案:

引入Redisson到项目

 <!-- redisson -->
2 <dependency>
3     <groupId>org.redisson</groupId>
4     <artifactId>redisson</artifactId>
5     <version>3.5.7</version>
6 </dependency>

redisson基于Java NIO的Netty框架因此引入netty包:

  <dependency>
     <groupId>io.netty</groupId>
     <artifactId>netty-all</artifactId>
     <version>5.0.0.Alpha2</version>
  </dependency>

编码实现

1:首先获取redis连接:

/**
	 * 获取redis连接
	 * @return
	 */
	private RedisConnection getRedisConnection() {
		EventLoopGroup group = new NioEventLoopGroup();
		RedisClientConfig config = new RedisClientConfig();
		//redis地址
		config.setAddress("redis://x.x.x.x:xx");
		//redis密码
		config.setPassword("xxx");
		//redis 库
		config.setDatabase(1)
				.setClientName("myClient")
				.setGroup(group);
		RedisClient redisClient = RedisClient.create(config);
		return redisClient.connect();
	}

2:了解下RedisCommands(redis客户端命令)这个类:
看最下面的一段代码:

  RedisStrictCommand<Map<String, String>> INFO_ALL = new RedisStrictCommand<Map<String, String>>("INFO", "ALL", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_DEFAULT = new RedisStrictCommand<Map<String, String>>("INFO", "DEFAULT", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_SERVER = new RedisStrictCommand<Map<String, String>>("INFO", "SERVER", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_CLIENTS = new RedisStrictCommand<Map<String, String>>("INFO", "CLIENTS", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_MEMORY = new RedisStrictCommand<Map<String, String>>("INFO", "MEMORY", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_PERSISTENCE = new RedisStrictCommand<Map<String, String>>("INFO", "PERSISTENCE", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_STATS = new RedisStrictCommand<Map<String, String>>("INFO", "STATS", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_REPLICATION = new RedisStrictCommand<Map<String, String>>("INFO", "REPLICATION", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_CPU = new RedisStrictCommand<Map<String, String>>("INFO", "CPU", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_COMMANDSTATS = new RedisStrictCommand<Map<String, String>>("INFO", "COMMANDSTATS", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_CLUSTER = new RedisStrictCommand<Map<String, String>>("INFO", "CLUSTER", new StringMapDataDecoder());
    RedisStrictCommand<Map<String, String>> INFO_KEYSPACE = new RedisStrictCommand<Map<String, String>>("INFO", "KEYSPACE", new StringMapDataDecoder());

对应info 命令查看redis信息:
Server,clients,memory,persistence,stats,replication,cpu,commandstats,cluster,keyspace

3.监控redis服务:

    @ApiOperation(value = "获取redis信息")
	@GetMapping("/redisInfo/{key}")
	public List<RedisInfo> redisInfo(@PathVariable String key){

		RedisConnection conn = getRedisConnection();

		List<RedisInfo> list = new ArrayList<>();
		Map<String,String> redisInfo = new HashMap<>();

		switch (key){
			case "1":
				//memory
				redisInfo = conn.sync(StringCodec.INSTANCE, RedisCommands.INFO_MEMORY);
				break;
			case "2":
				//keysize
				redisInfo = conn.sync(StringCodec.INSTANCE, RedisCommands.INFO_KEYSPACE);
				break;
			case "3":
				//cpu
				redisInfo = conn.sync(StringCodec.INSTANCE, RedisCommands.INFO_CPU);
				break;
			case "4":
				//server
				redisInfo = conn.sync(StringCodec.INSTANCE, RedisCommands.INFO_SERVER);
				break;
			default:
				break;
		}

		redisInfo.forEach((k,v)->{
			logger.info("key = " + k+",value = " + v);
			RedisInfo info = new RedisInfo(k,v,RedisInfo.map.get(k));
			list.add(info);
		});
		return list;
	}

4:redis memory数据获取:
在这里插入图片描述
5:redis db size数据获取:
在这里插入图片描述
6.redis cpu数据获取:
在这里插入图片描述
7.redis server数据获取:
在这里插入图片描述

前段页面展示

RedisMemory:
在这里插入图片描述

DB size:
在这里插入图片描述
RedisCPU:
在这里插入图片描述
RedisServer:
在这里插入图片描述

总结

redisson 的监控基于netty异步的、事件驱动的网络应用程序.
redisson 监控最终是执行的redis info 命令再将数据组合封装.
本文中的效果图是目前一个运行的后台管理:
YOU-LIAO 后台管理系统
链接: http://132.232.43.102.
guest/guest

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值