package org.ruoyi.system.controller.monitor; import cn.dev33.satoken.annotation.SaCheckPermission; import lombok.RequiredArgsConstructor; import org.redisson.spring.data.connection.RedissonConnectionFactory; import org.ruoyi.common.core.domain.R; import org.ruoyi.common.core.utils.StringUtils; import org.ruoyi.system.domain.vo.CacheListInfoVo; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.*; /** * 缓存监控 * * @author Lion Li */ @RequiredArgsConstructor @RestController @RequestMapping("/monitor/cache") public class CacheController { private final RedissonConnectionFactory connectionFactory; /** * 获取缓存监控列表 */ @SaCheckPermission("monitor:cache:list") @GetMapping() public R getInfo() throws Exception { RedisConnection connection = connectionFactory.getConnection(); Properties commandStats = connection.commands().info("commandstats"); List> pieList = new ArrayList<>(); if (commandStats != null) { commandStats.stringPropertyNames().forEach(key -> { Map data = new HashMap<>(2); String property = commandStats.getProperty(key); data.put("name", StringUtils.removeStart(key, "cmdstat_")); data.put("value", StringUtils.substringBetween(property, "calls=", ",usec")); pieList.add(data); }); } CacheListInfoVo infoVo = new CacheListInfoVo(); infoVo.setInfo(connection.commands().info()); infoVo.setDbSize(connection.commands().dbSize()); infoVo.setCommandStats(pieList); return R.ok(infoVo); } }