RedisCacheStatisticsEndPoint.java 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.yihu.ehr.redis.cache.controller;
  2. import com.yihu.ehr.constants.ApiVersion;
  3. import com.yihu.ehr.constants.ServiceApi;
  4. import com.yihu.ehr.controller.EnvelopRestEndPoint;
  5. import com.yihu.ehr.redis.cache.CacheCommonBiz;
  6. import com.yihu.ehr.redis.cache.entity.RedisCacheCategory;
  7. import com.yihu.ehr.redis.cache.service.RedisCacheCategoryService;
  8. import com.yihu.ehr.redis.cache.service.RedisCacheKeyMemoryService;
  9. import com.yihu.ehr.util.rest.Envelop;
  10. import io.swagger.annotations.Api;
  11. import io.swagger.annotations.ApiOperation;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.dao.DataAccessException;
  14. import org.springframework.data.redis.connection.RedisConnection;
  15. import org.springframework.data.redis.core.RedisCallback;
  16. import org.springframework.data.redis.core.RedisTemplate;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RequestMethod;
  19. import org.springframework.web.bind.annotation.RestController;
  20. import javax.annotation.Resource;
  21. import java.util.ArrayList;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;
  25. /**
  26. * 缓存统计
  27. *
  28. * @author 张进军
  29. * @date 2017/11/30 17:07
  30. */
  31. @RestController
  32. @RequestMapping(value = ApiVersion.Version1_0)
  33. @Api(description = "缓存统计接口", tags = {"缓存服务管理--缓存统计接口"})
  34. public class RedisCacheStatisticsEndPoint extends EnvelopRestEndPoint {
  35. @Autowired
  36. private RedisCacheCategoryService redisCacheCategoryService;
  37. @Autowired
  38. private RedisCacheKeyMemoryService redisCacheKeyMemoryService;
  39. @Resource
  40. private RedisTemplate<String, Object> redisTemplate;
  41. @ApiOperation("统计缓存分类的缓存数量")
  42. @RequestMapping(value = ServiceApi.Redis.CacheStatistics.GetCategoryKeys, method = RequestMethod.GET)
  43. public Envelop getCategoryKeys() {
  44. Envelop envelop = new Envelop();
  45. envelop.setSuccessFlg(false);
  46. try {
  47. Map<String, Object> result = new HashMap<>();
  48. List<String> categoryNameList = new ArrayList<>();
  49. List<Integer> categoryNumList = new ArrayList<>();
  50. List<RedisCacheCategory> categoryList = redisCacheCategoryService.search("");
  51. for (RedisCacheCategory category : categoryList) {
  52. categoryNameList.add(category.getName());
  53. String keysPattern = CacheCommonBiz.makeKeyPrefix(category.getCode()) + "*";
  54. categoryNumList.add(redisTemplate.keys(keysPattern).size());
  55. }
  56. result.put("categoryNameList", categoryNameList);
  57. result.put("categoryNumList", categoryNumList);
  58. envelop.setObj(result);
  59. envelop.setSuccessFlg(true);
  60. envelop.setErrorMsg("成功获取数据。");
  61. } catch (Exception e) {
  62. e.printStackTrace();
  63. envelop.setErrorMsg("发生异常:" + e.getMessage());
  64. }
  65. return envelop;
  66. }
  67. @ApiOperation("统计缓存分类的缓存内存比率(近似值,比实际略小)")
  68. @RequestMapping(value = ServiceApi.Redis.CacheStatistics.GetCategoryMemory, method = RequestMethod.GET)
  69. public Envelop getCategoryMemory() {
  70. Envelop envelop = new Envelop();
  71. envelop.setSuccessFlg(false);
  72. try {
  73. Map<String, Object> result = new HashMap<>();
  74. List<String> categoryNameList = new ArrayList<>();
  75. List<Map<String, Object>> categoryMemoryList = new ArrayList<>();
  76. // Redis使用的总内存
  77. long redisUsedMemory = (long) redisTemplate.execute(new RedisCallback() {
  78. @Override
  79. public Object doInRedis(RedisConnection connection) throws DataAccessException {
  80. return Long.parseLong(connection.info("memory").get("used_memory").toString());
  81. }
  82. });
  83. List<RedisCacheCategory> categoryList = redisCacheCategoryService.search("");
  84. long categoryMemoryTotal = 0;
  85. for (RedisCacheCategory category : categoryList) {
  86. categoryNameList.add(category.getName());
  87. String keyPrefix = CacheCommonBiz.makeKeyPrefix(category.getCode());
  88. Long categoryMemory = redisCacheKeyMemoryService.sumCategoryMemory(keyPrefix);
  89. Map<String, Object> rateMap = new HashMap<>();
  90. rateMap.put("name", category.getName());
  91. rateMap.put("value", categoryMemory);
  92. categoryMemoryList.add(rateMap);
  93. categoryMemoryTotal += categoryMemory;
  94. }
  95. String noCategoryName = "未分类";
  96. categoryNameList.add(noCategoryName);
  97. Map<String, Object> noCategoryMemMap = new HashMap<>();
  98. Long noCategoryMemory = redisCacheKeyMemoryService.sumNotCategoryMemory();
  99. noCategoryMemMap.put("name", noCategoryName);
  100. noCategoryMemMap.put("value", noCategoryMemory);
  101. categoryMemoryList.add(noCategoryMemMap);
  102. String idleMemoryName = "闲置内存";
  103. categoryNameList.add(idleMemoryName);
  104. Map<String, Object> idleMemoryMap = new HashMap<>();
  105. idleMemoryMap.put("name", idleMemoryName);
  106. idleMemoryMap.put("value", redisUsedMemory - categoryMemoryTotal - noCategoryMemory);
  107. categoryMemoryList.add(idleMemoryMap);
  108. result.put("categoryNameList", categoryNameList);
  109. result.put("categoryMemoryList", categoryMemoryList);
  110. envelop.setObj(result);
  111. envelop.setSuccessFlg(true);
  112. envelop.setErrorMsg("成功获取数据。");
  113. } catch (Exception e) {
  114. e.printStackTrace();
  115. envelop.setErrorMsg("发生异常:" + e.getMessage());
  116. }
  117. return envelop;
  118. }
  119. }