Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
finance-manage
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
finance-oa
finance-manage
Commits
9d7e32fb
Commit
9d7e32fb
authored
Jun 25, 2022
by
RuoYi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
新增缓存列表菜单功能
parent
abb88d62
Changes
18
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
522 additions
and
69 deletions
+522
-69
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
...va/com/ruoyi/web/controller/common/CaptchaController.java
+3
-2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
...ava/com/ruoyi/web/controller/monitor/CacheController.java
+66
-0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
...ruoyi/web/controller/monitor/SysUserOnlineController.java
+3
-3
ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java
...rc/main/java/com/ruoyi/common/annotation/RateLimiter.java
+2
-2
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java
...c/main/java/com/ruoyi/common/constant/CacheConstants.java
+39
-0
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
...on/src/main/java/com/ruoyi/common/constant/Constants.java
+1
-31
ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
...ommon/src/main/java/com/ruoyi/common/utils/DictUtils.java
+3
-3
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
...yi/framework/interceptor/impl/SameUrlDataInterceptor.java
+2
-2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
...java/com/ruoyi/framework/web/service/SysLoginService.java
+3
-2
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java
...a/com/ruoyi/framework/web/service/SysRegisterService.java
+2
-1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
...in/java/com/ruoyi/framework/web/service/TokenService.java
+2
-1
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysCache.java
...ystem/src/main/java/com/ruoyi/system/domain/SysCache.java
+81
-0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
...a/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
+8
-8
ruoyi-ui/src/api/monitor/cache.js
ruoyi-ui/src/api/monitor/cache.js
+48
-0
ruoyi-ui/src/assets/icons/svg/redis-list.svg
ruoyi-ui/src/assets/icons/svg/redis-list.svg
+2
-0
ruoyi-ui/src/views/monitor/cache/index.vue
ruoyi-ui/src/views/monitor/cache/index.vue
+11
-11
ruoyi-ui/src/views/monitor/cache/list.vue
ruoyi-ui/src/views/monitor/cache/list.vue
+241
-0
sql/ry_20220625.sql
sql/ry_20220625.sql
+5
-3
No files found.
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
View file @
9d7e32fb
...
...
@@ -6,12 +6,13 @@ import java.util.concurrent.TimeUnit;
import
javax.annotation.Resource
;
import
javax.imageio.ImageIO
;
import
javax.servlet.http.HttpServletResponse
;
import
com.ruoyi.common.config.RuoYiConfig
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.util.FastByteArrayOutputStream
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.google.code.kaptcha.Producer
;
import
com.ruoyi.common.config.RuoYiConfig
;
import
com.ruoyi.common.constant.CacheConstants
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.core.domain.AjaxResult
;
import
com.ruoyi.common.core.redis.RedisCache
;
...
...
@@ -54,7 +55,7 @@ public class CaptchaController
// 保存验证码信息
String
uuid
=
IdUtils
.
simpleUUID
();
String
verifyKey
=
Constants
.
CAPTCHA_CODE_KEY
+
uuid
;
String
verifyKey
=
C
acheC
onstants
.
CAPTCHA_CODE_KEY
+
uuid
;
String
capStr
=
null
,
code
=
null
;
BufferedImage
image
=
null
;
...
...
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
View file @
9d7e32fb
package
com.ruoyi.web.controller.monitor
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Properties
;
import
java.util.Set
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisCallback
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.DeleteMapping
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.PathVariable
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.ruoyi.common.constant.CacheConstants
;
import
com.ruoyi.common.core.domain.AjaxResult
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.system.domain.SysCache
;
/**
* 缓存监控
...
...
@@ -27,6 +33,16 @@ public class CacheController
@Autowired
private
RedisTemplate
<
String
,
String
>
redisTemplate
;
private
final
static
List
<
SysCache
>
caches
=
new
ArrayList
<
SysCache
>();
{
caches
.
add
(
new
SysCache
(
CacheConstants
.
LOGIN_TOKEN_KEY
,
"用户信息"
));
caches
.
add
(
new
SysCache
(
CacheConstants
.
SYS_CONFIG_KEY
,
"配置信息"
));
caches
.
add
(
new
SysCache
(
CacheConstants
.
SYS_DICT_KEY
,
"数据字典"
));
caches
.
add
(
new
SysCache
(
CacheConstants
.
CAPTCHA_CODE_KEY
,
"验证码"
));
caches
.
add
(
new
SysCache
(
CacheConstants
.
REPEAT_SUBMIT_KEY
,
"防重提交"
));
caches
.
add
(
new
SysCache
(
CacheConstants
.
RATE_LIMIT_KEY
,
"限流处理"
));
}
@PreAuthorize
(
"@ss.hasPermi('monitor:cache:list')"
)
@GetMapping
()
public
AjaxResult
getInfo
()
throws
Exception
...
...
@@ -50,4 +66,54 @@ public class CacheController
result
.
put
(
"commandStats"
,
pieList
);
return
AjaxResult
.
success
(
result
);
}
@PreAuthorize
(
"@ss.hasPermi('monitor:cache:list')"
)
@GetMapping
(
"/getNames"
)
public
AjaxResult
cache
()
{
return
AjaxResult
.
success
(
caches
);
}
@PreAuthorize
(
"@ss.hasPermi('monitor:cache:list')"
)
@GetMapping
(
"/getKeys/{cacheName}"
)
public
AjaxResult
getCacheKeys
(
@PathVariable
String
cacheName
)
{
Set
<
String
>
cacheKyes
=
redisTemplate
.
keys
(
cacheName
+
"*"
);
return
AjaxResult
.
success
(
cacheKyes
);
}
@PreAuthorize
(
"@ss.hasPermi('monitor:cache:list')"
)
@GetMapping
(
"/getValue/{cacheName}/{cacheKey}"
)
public
AjaxResult
getCacheValue
(
@PathVariable
String
cacheName
,
@PathVariable
String
cacheKey
)
{
String
cacheValue
=
redisTemplate
.
opsForValue
().
get
(
cacheKey
);
SysCache
sysCache
=
new
SysCache
(
cacheName
,
cacheKey
,
cacheValue
);
return
AjaxResult
.
success
(
sysCache
);
}
@PreAuthorize
(
"@ss.hasPermi('monitor:cache:list')"
)
@DeleteMapping
(
"/clearCacheName/{cacheName}"
)
public
AjaxResult
clearCacheName
(
@PathVariable
String
cacheName
)
{
Collection
<
String
>
cacheKeys
=
redisTemplate
.
keys
(
cacheName
+
"*"
);
redisTemplate
.
delete
(
cacheKeys
);
return
AjaxResult
.
success
();
}
@PreAuthorize
(
"@ss.hasPermi('monitor:cache:list')"
)
@DeleteMapping
(
"/clearCacheKey/{cacheKey}"
)
public
AjaxResult
clearCacheKey
(
@PathVariable
String
cacheKey
)
{
redisTemplate
.
delete
(
cacheKey
);
return
AjaxResult
.
success
();
}
@PreAuthorize
(
"@ss.hasPermi('monitor:cache:list')"
)
@DeleteMapping
(
"/clearCacheAll"
)
public
AjaxResult
clearCacheAll
()
{
Collection
<
String
>
cacheKeys
=
redisTemplate
.
keys
(
"*"
);
redisTemplate
.
delete
(
cacheKeys
);
return
AjaxResult
.
success
();
}
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
View file @
9d7e32fb
...
...
@@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.PathVariable;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.constant.C
acheC
onstants
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.core.domain.AjaxResult
;
import
com.ruoyi.common.core.domain.model.LoginUser
;
...
...
@@ -42,7 +42,7 @@ public class SysUserOnlineController extends BaseController
@GetMapping
(
"/list"
)
public
TableDataInfo
list
(
String
ipaddr
,
String
userName
)
{
Collection
<
String
>
keys
=
redisCache
.
keys
(
Constants
.
LOGIN_TOKEN_KEY
+
"*"
);
Collection
<
String
>
keys
=
redisCache
.
keys
(
C
acheC
onstants
.
LOGIN_TOKEN_KEY
+
"*"
);
List
<
SysUserOnline
>
userOnlineList
=
new
ArrayList
<
SysUserOnline
>();
for
(
String
key
:
keys
)
{
...
...
@@ -86,7 +86,7 @@ public class SysUserOnlineController extends BaseController
@DeleteMapping
(
"/{tokenId}"
)
public
AjaxResult
forceLogout
(
@PathVariable
String
tokenId
)
{
redisCache
.
deleteObject
(
Constants
.
LOGIN_TOKEN_KEY
+
tokenId
);
redisCache
.
deleteObject
(
C
acheC
onstants
.
LOGIN_TOKEN_KEY
+
tokenId
);
return
AjaxResult
.
success
();
}
}
ruoyi-common/src/main/java/com/ruoyi/common/annotation/RateLimiter.java
View file @
9d7e32fb
...
...
@@ -5,7 +5,7 @@ import java.lang.annotation.ElementType;
import
java.lang.annotation.Retention
;
import
java.lang.annotation.RetentionPolicy
;
import
java.lang.annotation.Target
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.constant.C
acheC
onstants
;
import
com.ruoyi.common.enums.LimitType
;
/**
...
...
@@ -21,7 +21,7 @@ public @interface RateLimiter
/**
* 限流key
*/
public
String
key
()
default
Constants
.
RATE_LIMIT_KEY
;
public
String
key
()
default
C
acheC
onstants
.
RATE_LIMIT_KEY
;
/**
* 限流时间,单位秒
...
...
ruoyi-common/src/main/java/com/ruoyi/common/constant/CacheConstants.java
0 → 100644
View file @
9d7e32fb
package
com.ruoyi.common.constant
;
/**
* 缓存的key 常量
*
* @author ruoyi
*/
public
class
CacheConstants
{
/**
* 登录用户 redis key
*/
public
static
final
String
LOGIN_TOKEN_KEY
=
"login_tokens:"
;
/**
* 验证码 redis key
*/
public
static
final
String
CAPTCHA_CODE_KEY
=
"captcha_codes:"
;
/**
* 参数管理 cache key
*/
public
static
final
String
SYS_CONFIG_KEY
=
"sys_config:"
;
/**
* 字典管理 cache key
*/
public
static
final
String
SYS_DICT_KEY
=
"sys_dict:"
;
/**
* 防重提交 redis key
*/
public
static
final
String
REPEAT_SUBMIT_KEY
=
"repeat_submit:"
;
/**
* 限流 redis key
*/
public
static
final
String
RATE_LIMIT_KEY
=
"rate_limit:"
;
}
ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java
View file @
9d7e32fb
...
...
@@ -59,26 +59,6 @@ public class Constants
*/
public
static
final
String
LOGIN_FAIL
=
"Error"
;
/**
* 验证码 redis key
*/
public
static
final
String
CAPTCHA_CODE_KEY
=
"captcha_codes:"
;
/**
* 登录用户 redis key
*/
public
static
final
String
LOGIN_TOKEN_KEY
=
"login_tokens:"
;
/**
* 防重提交 redis key
*/
public
static
final
String
REPEAT_SUBMIT_KEY
=
"repeat_submit:"
;
/**
* 限流 redis key
*/
public
static
final
String
RATE_LIMIT_KEY
=
"rate_limit:"
;
/**
* 验证码有效期(分钟)
*/
...
...
@@ -124,16 +104,6 @@ public class Constants
*/
public
static
final
String
JWT_AUTHORITIES
=
"authorities"
;
/**
* 参数管理 cache key
*/
public
static
final
String
SYS_CONFIG_KEY
=
"sys_config:"
;
/**
* 字典管理 cache key
*/
public
static
final
String
SYS_DICT_KEY
=
"sys_dict:"
;
/**
* 资源映射路径 前缀
*/
...
...
ruoyi-common/src/main/java/com/ruoyi/common/utils/DictUtils.java
View file @
9d7e32fb
...
...
@@ -3,7 +3,7 @@ package com.ruoyi.common.utils;
import
java.util.Collection
;
import
java.util.List
;
import
com.alibaba.fastjson2.JSONArray
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.constant.C
acheC
onstants
;
import
com.ruoyi.common.core.domain.entity.SysDictData
;
import
com.ruoyi.common.core.redis.RedisCache
;
import
com.ruoyi.common.utils.spring.SpringUtils
;
...
...
@@ -169,7 +169,7 @@ public class DictUtils
*/
public
static
void
clearDictCache
()
{
Collection
<
String
>
keys
=
SpringUtils
.
getBean
(
RedisCache
.
class
).
keys
(
Constants
.
SYS_DICT_KEY
+
"*"
);
Collection
<
String
>
keys
=
SpringUtils
.
getBean
(
RedisCache
.
class
).
keys
(
C
acheC
onstants
.
SYS_DICT_KEY
+
"*"
);
SpringUtils
.
getBean
(
RedisCache
.
class
).
deleteObject
(
keys
);
}
...
...
@@ -181,6 +181,6 @@ public class DictUtils
*/
public
static
String
getCacheKey
(
String
configKey
)
{
return
Constants
.
SYS_DICT_KEY
+
configKey
;
return
C
acheC
onstants
.
SYS_DICT_KEY
+
configKey
;
}
}
ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
View file @
9d7e32fb
...
...
@@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Value;
import
org.springframework.stereotype.Component
;
import
com.alibaba.fastjson2.JSON
;
import
com.ruoyi.common.annotation.RepeatSubmit
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.constant.C
acheC
onstants
;
import
com.ruoyi.common.core.redis.RedisCache
;
import
com.ruoyi.common.filter.RepeatedlyRequestWrapper
;
import
com.ruoyi.common.utils.StringUtils
;
...
...
@@ -63,7 +63,7 @@ public class SameUrlDataInterceptor extends RepeatSubmitInterceptor
String
submitKey
=
StringUtils
.
trimToEmpty
(
request
.
getHeader
(
header
));
// 唯一标识(指定key + url + 消息头)
String
cacheRepeatKey
=
Constants
.
REPEAT_SUBMIT_KEY
+
url
+
submitKey
;
String
cacheRepeatKey
=
C
acheC
onstants
.
REPEAT_SUBMIT_KEY
+
url
+
submitKey
;
Object
sessionObj
=
redisCache
.
getCacheObject
(
cacheRepeatKey
);
if
(
sessionObj
!=
null
)
...
...
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
View file @
9d7e32fb
...
...
@@ -7,6 +7,7 @@ import org.springframework.security.authentication.BadCredentialsException;
import
org.springframework.security.authentication.UsernamePasswordAuthenticationToken
;
import
org.springframework.security.core.Authentication
;
import
org.springframework.stereotype.Component
;
import
com.ruoyi.common.constant.CacheConstants
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.core.domain.entity.SysUser
;
import
com.ruoyi.common.core.domain.model.LoginUser
;
...
...
@@ -17,8 +18,8 @@ import com.ruoyi.common.exception.user.CaptchaExpireException;
import
com.ruoyi.common.exception.user.UserPasswordNotMatchException
;
import
com.ruoyi.common.utils.DateUtils
;
import
com.ruoyi.common.utils.MessageUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.ServletUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.ip.IpUtils
;
import
com.ruoyi.framework.manager.AsyncManager
;
import
com.ruoyi.framework.manager.factory.AsyncFactory
;
...
...
@@ -103,7 +104,7 @@ public class SysLoginService
*/
public
void
validateCaptcha
(
String
username
,
String
code
,
String
uuid
)
{
String
verifyKey
=
Constants
.
CAPTCHA_CODE_KEY
+
StringUtils
.
nvl
(
uuid
,
""
);
String
verifyKey
=
C
acheC
onstants
.
CAPTCHA_CODE_KEY
+
StringUtils
.
nvl
(
uuid
,
""
);
String
captcha
=
redisCache
.
getCacheObject
(
verifyKey
);
redisCache
.
deleteObject
(
verifyKey
);
if
(
captcha
==
null
)
...
...
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java
View file @
9d7e32fb
...
...
@@ -2,6 +2,7 @@ package com.ruoyi.framework.web.service;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
com.ruoyi.common.constant.CacheConstants
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.constant.UserConstants
;
import
com.ruoyi.common.core.domain.entity.SysUser
;
...
...
@@ -100,7 +101,7 @@ public class SysRegisterService
*/
public
void
validateCaptcha
(
String
username
,
String
code
,
String
uuid
)
{
String
verifyKey
=
Constants
.
CAPTCHA_CODE_KEY
+
StringUtils
.
nvl
(
uuid
,
""
);
String
verifyKey
=
C
acheC
onstants
.
CAPTCHA_CODE_KEY
+
StringUtils
.
nvl
(
uuid
,
""
);
String
captcha
=
redisCache
.
getCacheObject
(
verifyKey
);
redisCache
.
deleteObject
(
verifyKey
);
if
(
captcha
==
null
)
...
...
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
View file @
9d7e32fb
...
...
@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.stereotype.Component
;
import
com.ruoyi.common.constant.CacheConstants
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.core.domain.model.LoginUser
;
import
com.ruoyi.common.core.redis.RedisCache
;
...
...
@@ -220,6 +221,6 @@ public class TokenService
private
String
getTokenKey
(
String
uuid
)
{
return
Constants
.
LOGIN_TOKEN_KEY
+
uuid
;
return
C
acheC
onstants
.
LOGIN_TOKEN_KEY
+
uuid
;
}
}
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysCache.java
0 → 100644
View file @
9d7e32fb
package
com.ruoyi.system.domain
;
import
com.ruoyi.common.utils.StringUtils
;
/**
* 缓存信息
*
* @author ruoyi
*/
public
class
SysCache
{
/** 缓存名称 */
private
String
cacheName
=
""
;
/** 缓存键名 */
private
String
cacheKey
=
""
;
/** 缓存内容 */
private
String
cacheValue
=
""
;
/** 备注 */
private
String
remark
=
""
;
public
SysCache
()
{
}
public
SysCache
(
String
cacheName
,
String
remark
)
{
this
.
cacheName
=
cacheName
;
this
.
remark
=
remark
;
}
public
SysCache
(
String
cacheName
,
String
cacheKey
,
String
cacheValue
)
{
this
.
cacheName
=
StringUtils
.
replace
(
cacheName
,
":"
,
""
);
this
.
cacheKey
=
StringUtils
.
replace
(
cacheKey
,
cacheName
,
""
);
this
.
cacheValue
=
cacheValue
;
}
public
String
getCacheName
()
{
return
cacheName
;
}
public
void
setCacheName
(
String
cacheName
)
{
this
.
cacheName
=
cacheName
;
}
public
String
getCacheKey
()
{
return
cacheKey
;
}
public
void
setCacheKey
(
String
cacheKey
)
{
this
.
cacheKey
=
cacheKey
;
}
public
String
getCacheValue
()
{
return
cacheValue
;
}
public
void
setCacheValue
(
String
cacheValue
)
{
this
.
cacheValue
=
cacheValue
;
}
public
String
getRemark
()
{
return
remark
;
}
public
void
setRemark
(
String
remark
)
{
this
.
remark
=
remark
;
}
}
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
View file @
9d7e32fb
package
com.ruoyi.system.service.impl
;
import
java.util.Collection
;
import
java.util.List
;
import
javax.annotation.PostConstruct
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
com.ruoyi.common.annotation.DataSource
;
import
com.ruoyi.common.constant.Constants
;
import
com.ruoyi.common.constant.C
acheC
onstants
;
import
com.ruoyi.common.constant.UserConstants
;
import
com.ruoyi.common.core.redis.RedisCache
;
import
com.ruoyi.common.core.text.Convert
;
...
...
@@ -11,11 +16,6 @@ import com.ruoyi.common.utils.StringUtils;
import
com.ruoyi.system.domain.SysConfig
;
import
com.ruoyi.system.mapper.SysConfigMapper
;
import
com.ruoyi.system.service.ISysConfigService
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.PostConstruct
;
import
java.util.Collection
;
import
java.util.List
;
/**
* 参数配置 服务层实现
...
...
@@ -181,7 +181,7 @@ public class SysConfigServiceImpl implements ISysConfigService
@Override
public
void
clearConfigCache
()
{
Collection
<
String
>
keys
=
redisCache
.
keys
(
Constants
.
SYS_CONFIG_KEY
+
"*"
);
Collection
<
String
>
keys
=
redisCache
.
keys
(
C
acheC
onstants
.
SYS_CONFIG_KEY
+
"*"
);
redisCache
.
deleteObject
(
keys
);
}
...
...
@@ -221,6 +221,6 @@ public class SysConfigServiceImpl implements ISysConfigService
*/
private
String
getCacheKey
(
String
configKey
)
{
return
Constants
.
SYS_CONFIG_KEY
+
configKey
;
return
C
acheC
onstants
.
SYS_CONFIG_KEY
+
configKey
;
}
}
ruoyi-ui/src/api/monitor/cache.js
View file @
9d7e32fb
...
...
@@ -7,3 +7,51 @@ export function getCache() {
method
:
'
get
'
})
}
// 查询缓存名称列表
export
function
listCacheName
()
{
return
request
({
url
:
'
/monitor/cache/getNames
'
,
method
:
'
get
'
})
}
// 查询缓存键名列表
export
function
listCacheKey
(
cacheName
)
{
return
request
({
url
:
'
/monitor/cache/getKeys/
'
+
cacheName
,
method
:
'
get
'
})
}
// 查询缓存内容
export
function
getCacheValue
(
cacheName
,
cacheKey
)
{
return
request
({
url
:
'
/monitor/cache/getValue/
'
+
cacheName
+
'
/
'
+
cacheKey
,
method
:
'
get
'
})
}
// 清理指定名称缓存
export
function
clearCacheName
(
cacheName
)
{
return
request
({
url
:
'
/monitor/cache/clearCacheName/
'
+
cacheName
,
method
:
'
delete
'
})
}
// 清理指定键名缓存
export
function
clearCacheKey
(
cacheKey
)
{
return
request
({
url
:
'
/monitor/cache/clearCacheKey/
'
+
cacheKey
,
method
:
'
delete
'
})
}
// 清理全部缓存
export
function
clearCacheAll
()
{
return
request
({
url
:
'
/monitor/cache/clearCacheAll
'
,
method
:
'
delete
'
})
}
ruoyi-ui/src/assets/icons/svg/redis-list.svg
0 → 100644
View file @
9d7e32fb
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg
t=
"1656035183065"
class=
"icon"
viewBox=
"0 0 1024 1024"
version=
"1.1"
xmlns=
"http://www.w3.org/2000/svg"
p-id=
"3395"
xmlns:xlink=
"http://www.w3.org/1999/xlink"
width=
"200"
height=
"200"
><defs><style
type=
"text/css"
>
@font-face { font-family: feedback-iconfont; src: url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff2?t=1630033759944") format("woff2"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.woff?t=1630033759944") format("woff"), url("//at.alicdn.com/t/font_1031158_u69w8yhxdu.ttf?t=1630033759944") format("truetype"); }
</style></defs><path
d=
"M958.88 730.06H65.12c-18.28 0-33.12-14.82-33.12-33.12V68.91c0-18.29 14.83-33.12 33.12-33.12h893.77c18.28 0 33.12 14.82 33.12 33.12v628.03c-0.01 18.3-14.84 33.12-33.13 33.12zM98.23 663.83h827.53v-561.8H98.23v561.8z"
p-id=
"3396"
></path><path
d=
"M512 954.55c-18.28 0-33.12-14.82-33.12-33.12V733.92c0-18.29 14.83-33.12 33.12-33.12s33.12 14.82 33.12 33.12v187.51c0 18.3-14.84 33.12-33.12 33.12z"
p-id=
"3397"
></path><path
d=
"M762.01 988.21H261.99c-18.28 0-33.12-14.82-33.12-33.12 0-18.29 14.83-33.12 33.12-33.12h500.03c18.28 0 33.12 14.82 33.12 33.12-0.01 18.29-14.84 33.12-33.13 33.12zM514.74 578.55c-21.63 0-43.31-3.87-64.21-11.65-45.95-17.13-82.49-51.13-102.86-95.74-5.07-11.08-0.19-24.19 10.89-29.26 11.08-5.09 24.19-0.18 29.26 10.91 15.5 33.88 43.25 59.7 78.14 72.71 34.93 12.99 72.79 11.64 106.66-3.85 33.22-15.17 58.8-42.26 72.03-76.3 4.42-11.37 17.21-17.01 28.57-12.58 11.36 4.42 16.99 17.22 12.57 28.58-17.42 44.82-51.1 80.5-94.82 100.47-24.34 11.12-50.25 16.71-76.23 16.71z"
p-id=
"3398"
></path><path
d=
"M325.27 528.78c-1.66 0-3.34-0.18-5.02-0.57-11.88-2.77-19.28-14.63-16.49-26.51l18.84-81c1.34-5.82 5-10.84 10.13-13.92 5.09-3.09 11.3-3.96 17.03-2.41l80.51 21.43c11.79 3.14 18.8 15.23 15.67 27.02-3.15 11.79-15.42 18.75-27.02 15.65l-58.49-15.57-13.69 58.81c-2.37 10.2-11.45 17.07-21.47 17.07zM360.8 351.01c-2.65 0-5.37-0.49-8-1.51-11.36-4.41-16.99-17.21-12.59-28.57 17.4-44.79 51.06-80.47 94.8-100.48 92.15-42.06 201.25-1.39 243.31 90.68 5.07 11.08 0.19 24.19-10.89 29.26-11.13 5.07-24.19 0.17-29.26-10.91-31.97-69.91-114.9-100.82-184.79-68.86-33.22 15.19-58.8 42.28-71.99 76.29-3.41 8.74-11.75 14.1-20.59 14.1z"
p-id=
"3399"
></path><path
d=
"M684.68 376.74c-1.47 0-2.95-0.15-4.42-0.44l-81.61-16.68c-11.94-2.45-19.64-14.11-17.21-26.06 2.44-11.96 14.1-19.64 26.04-17.22l59.29 12.12 10.23-59.5c2.05-12 13.52-20.19 25.48-18.01 12.03 2.06 20.09 13.48 18.02 25.5l-14.08 81.96a22.089 22.089 0 0 1-9.29 14.49c-3.7 2.51-8.03 3.84-12.45 3.84z"
p-id=
"3400"
></path></svg>
\ No newline at end of file
ruoyi-ui/src/views/monitor/cache/index.vue
View file @
9d7e32fb
...
...
@@ -71,7 +71,7 @@ import { getCache } from "@/api/monitor/cache";
import
echarts
from
"
echarts
"
;
export
default
{
name
:
"
Server
"
,
name
:
"
Cache
"
,
data
()
{
return
{
// 统计命令信息
...
...
@@ -79,8 +79,8 @@ export default {
// 使用内存
usedmemory
:
null
,
// cache信息
cache
:
[]
,
}
;
cache
:
[]
}
},
created
()
{
this
.
getList
();
...
...
@@ -109,8 +109,8 @@ export default {
data
:
response
.
data
.
commandStats
,
animationEasing
:
"
cubicInOut
"
,
animationDuration
:
1000
,
}
,
]
,
}
]
});
this
.
usedmemory
=
echarts
.
init
(
this
.
$refs
.
usedmemory
,
"
macarons
"
);
this
.
usedmemory
.
setOption
({
...
...
@@ -130,17 +130,17 @@ export default {
{
value
:
parseFloat
(
this
.
cache
.
info
.
used_memory_human
),
name
:
"
内存消耗
"
,
}
,
]
,
}
,
]
,
}
]
}
]
});
});
},
// 打开加载层
openLoading
()
{
this
.
$modal
.
loading
(
"
正在加载缓存监控数据,请稍候!
"
);
}
,
}
,
}
}
};
</
script
>
ruoyi-ui/src/views/monitor/cache/list.vue
0 → 100644
View file @
9d7e32fb
<
template
>
<div
class=
"app-container"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"8"
>
<el-card
style=
"height: calc(100vh - 125px)"
>
<div
slot=
"header"
>
<span>
缓存列表
</span>
<el-button
style=
"float: right; padding: 3px 0"
type=
"text"
icon=
"el-icon-refresh-right"
@
click=
"refreshCacheNames()"
></el-button>
</div>
<el-table
v-loading=
"loading"
:data=
"cacheNames"
:height=
"tableHeight"
highlight-current-row
@
row-click=
"getCacheKeys"
style=
"width: 100%"
>
<el-table-column
label=
"序号"
width=
"60"
type=
"index"
></el-table-column>
<el-table-column
label=
"缓存名称"
align=
"center"
prop=
"cacheName"
:show-overflow-tooltip=
"true"
:formatter=
"nameFormatter"
></el-table-column>
<el-table-column
label=
"备注"
align=
"center"
prop=
"remark"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"操作"
width=
"60"
align=
"center"
class-name=
"small-padding fixed-width"
>
<template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleClearCacheName(scope.row)"
></el-button>
</
template
>
</el-table-column>
</el-table>
</el-card>
</el-col>
<el-col
:span=
"8"
>
<el-card
style=
"height: calc(100vh - 125px)"
>
<div
slot=
"header"
>
<span>
键名列表
</span>
<el-button
style=
"float: right; padding: 3px 0"
type=
"text"
icon=
"el-icon-refresh-right"
@
click=
"refreshCacheKeys()"
></el-button>
</div>
<el-table
v-loading=
"subLoading"
:data=
"cacheKeys"
:height=
"tableHeight"
highlight-current-row
@
row-click=
"handleCacheValue"
style=
"width: 100%"
>
<el-table-column
label=
"序号"
width=
"60"
type=
"index"
></el-table-column>
<el-table-column
label=
"缓存键名"
align=
"center"
:show-overflow-tooltip=
"true"
:formatter=
"keyFormatter"
>
</el-table-column>
<el-table-column
label=
"操作"
width=
"60"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleClearCacheKey(scope.row)"
></el-button>
</
template
>
</el-table-column>
</el-table>
</el-card>
</el-col>
<el-col
:span=
"8"
>
<el-card
:bordered=
"false"
style=
"height: calc(100vh - 125px)"
>
<div
slot=
"header"
>
<span>
缓存内容
</span>
<el-button
style=
"float: right; padding: 3px 0"
type=
"text"
icon=
"el-icon-refresh-right"
@
click=
"handleClearCacheAll()"
>
清理全部
</el-button
>
</div>
<el-form
:model=
"form"
>
<el-row
:gutter=
"32"
>
<el-col
:offset=
"1"
:span=
"22"
>
<el-form-item
label=
"缓存名称:"
prop=
"cacheName"
>
<el-input
v-model=
"cacheForm.cacheName"
:readOnly=
"true"
/>
</el-form-item>
</el-col>
<el-col
:offset=
"1"
:span=
"22"
>
<el-form-item
label=
"缓存键名:"
prop=
"cacheKey"
>
<el-input
v-model=
"cacheForm.cacheKey"
:readOnly=
"true"
/>
</el-form-item>
</el-col>
<el-col
:offset=
"1"
:span=
"22"
>
<el-form-item
label=
"缓存内容:"
prop=
"cacheValue"
>
<el-input
v-model=
"cacheForm.cacheValue"
type=
"textarea"
:rows=
"8"
:readOnly=
"true"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-col>
</el-row>
</div>
</template>
<
script
>
import
{
listCacheName
,
listCacheKey
,
getCacheValue
,
clearCacheName
,
clearCacheKey
,
clearCacheAll
}
from
"
@/api/monitor/cache
"
;
export
default
{
name
:
"
CacheList
"
,
data
()
{
return
{
cacheNames
:
[],
cacheKeys
:
[],
cacheForm
:
{},
loading
:
true
,
subLoading
:
false
,
nowCacheName
:
""
,
tableHeight
:
window
.
innerHeight
-
200
};
},
created
()
{
this
.
getCacheNames
();
},
methods
:
{
/** 查询缓存名称列表 */
getCacheNames
()
{
this
.
loading
=
true
;
listCacheName
().
then
(
response
=>
{
this
.
cacheNames
=
response
.
data
;
this
.
loading
=
false
;
});
},
/** 刷新缓存名称列表 */
refreshCacheNames
()
{
this
.
getCacheNames
();
this
.
$modal
.
msgSuccess
(
"
刷新缓存列表成功
"
);
},
/** 清理指定名称缓存 */
handleClearCacheName
(
row
)
{
clearCacheName
(
row
.
cacheName
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
清理缓存名称[
"
+
this
.
nowCacheName
+
"
]成功
"
);
this
.
getCacheKeys
();
});
},
/** 查询缓存键名列表 */
getCacheKeys
(
row
)
{
const
cacheName
=
row
!==
undefined
?
row
.
cacheName
:
this
.
nowCacheName
;
if
(
cacheName
===
""
)
{
return
;
}
this
.
subLoading
=
true
;
listCacheKey
(
cacheName
).
then
(
response
=>
{
this
.
cacheKeys
=
response
.
data
;
this
.
subLoading
=
false
;
this
.
nowCacheName
=
cacheName
;
});
},
/** 刷新缓存键名列表 */
refreshCacheKeys
()
{
this
.
getCacheKeys
();
this
.
$modal
.
msgSuccess
(
"
刷新键名列表成功
"
);
},
/** 清理指定键名缓存 */
handleClearCacheKey
(
cacheKey
)
{
clearCacheKey
(
cacheKey
).
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
清理缓存键名[
"
+
cacheKey
+
"
]成功
"
);
this
.
getCacheKeys
();
});
},
/** 列表前缀去除 */
nameFormatter
(
row
)
{
return
row
.
cacheName
.
replace
(
"
:
"
,
""
);
},
/** 键名前缀去除 */
keyFormatter
(
cacheKey
)
{
return
cacheKey
.
replace
(
this
.
nowCacheName
,
""
);
},
/** 查询缓存内容详细 */
handleCacheValue
(
cacheKey
)
{
getCacheValue
(
this
.
nowCacheName
,
cacheKey
).
then
(
response
=>
{
this
.
cacheForm
=
response
.
data
;
});
},
/** 清理全部缓存 */
handleClearCacheAll
()
{
clearCacheAll
().
then
(
response
=>
{
this
.
$modal
.
msgSuccess
(
"
清理全部缓存成功
"
);
});
}
},
};
</
script
>
sql/ry_202206
13
.sql
→
sql/ry_202206
25
.sql
View file @
9d7e32fb
...
...
@@ -176,9 +176,10 @@ insert into sys_menu values('110', '定时任务', '2', '2', 'job', 'm
insert
into
sys_menu
values
(
'111'
,
'数据监控'
,
'2'
,
'3'
,
'druid'
,
'monitor/druid/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'monitor:druid:list'
,
'druid'
,
'admin'
,
sysdate
(),
''
,
null
,
'数据监控菜单'
);
insert
into
sys_menu
values
(
'112'
,
'服务监控'
,
'2'
,
'4'
,
'server'
,
'monitor/server/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'monitor:server:list'
,
'server'
,
'admin'
,
sysdate
(),
''
,
null
,
'服务监控菜单'
);
insert
into
sys_menu
values
(
'113'
,
'缓存监控'
,
'2'
,
'5'
,
'cache'
,
'monitor/cache/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'monitor:cache:list'
,
'redis'
,
'admin'
,
sysdate
(),
''
,
null
,
'缓存监控菜单'
);
insert
into
sys_menu
values
(
'114'
,
'表单构建'
,
'3'
,
'1'
,
'build'
,
'tool/build/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'tool:build:list'
,
'build'
,
'admin'
,
sysdate
(),
''
,
null
,
'表单构建菜单'
);
insert
into
sys_menu
values
(
'115'
,
'代码生成'
,
'3'
,
'2'
,
'gen'
,
'tool/gen/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'tool:gen:list'
,
'code'
,
'admin'
,
sysdate
(),
''
,
null
,
'代码生成菜单'
);
insert
into
sys_menu
values
(
'116'
,
'系统接口'
,
'3'
,
'3'
,
'swagger'
,
'tool/swagger/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'tool:swagger:list'
,
'swagger'
,
'admin'
,
sysdate
(),
''
,
null
,
'系统接口菜单'
);
insert
into
sys_menu
values
(
'114'
,
'缓存列表'
,
'2'
,
'6'
,
'cacheList'
,
'monitor/cache/list'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'monitor:cache:list'
,
'redis-list'
,
'admin'
,
sysdate
(),
''
,
null
,
'缓存列表菜单'
);
insert
into
sys_menu
values
(
'115'
,
'表单构建'
,
'3'
,
'1'
,
'build'
,
'tool/build/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'tool:build:list'
,
'build'
,
'admin'
,
sysdate
(),
''
,
null
,
'表单构建菜单'
);
insert
into
sys_menu
values
(
'116'
,
'代码生成'
,
'3'
,
'2'
,
'gen'
,
'tool/gen/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'tool:gen:list'
,
'code'
,
'admin'
,
sysdate
(),
''
,
null
,
'代码生成菜单'
);
insert
into
sys_menu
values
(
'117'
,
'系统接口'
,
'3'
,
'3'
,
'swagger'
,
'tool/swagger/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'tool:swagger:list'
,
'swagger'
,
'admin'
,
sysdate
(),
''
,
null
,
'系统接口菜单'
);
-- 三级菜单
insert
into
sys_menu
values
(
'500'
,
'操作日志'
,
'108'
,
'1'
,
'operlog'
,
'monitor/operlog/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'monitor:operlog:list'
,
'form'
,
'admin'
,
sysdate
(),
''
,
null
,
'操作日志菜单'
);
insert
into
sys_menu
values
(
'501'
,
'登录日志'
,
'108'
,
'2'
,
'logininfor'
,
'monitor/logininfor/index'
,
''
,
1
,
0
,
'C'
,
'0'
,
'0'
,
'monitor:logininfor:list'
,
'logininfor'
,
'admin'
,
sysdate
(),
''
,
null
,
'登录日志菜单'
);
...
...
@@ -308,6 +309,7 @@ insert into sys_role_menu values ('2', '113');
insert
into
sys_role_menu
values
(
'2'
,
'114'
);
insert
into
sys_role_menu
values
(
'2'
,
'115'
);
insert
into
sys_role_menu
values
(
'2'
,
'116'
);
insert
into
sys_role_menu
values
(
'2'
,
'117'
);
insert
into
sys_role_menu
values
(
'2'
,
'500'
);
insert
into
sys_role_menu
values
(
'2'
,
'501'
);
insert
into
sys_role_menu
values
(
'2'
,
'1000'
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment