diff --git a/apps/vben5/apps/app-antd/package.json b/apps/vben5/apps/app-antd/package.json
index 3fb801bb5..f259b3b0b 100644
--- a/apps/vben5/apps/app-antd/package.json
+++ b/apps/vben5/apps/app-antd/package.json
@@ -29,6 +29,7 @@
"@abp/account": "workspace:*",
"@abp/ai-management": "workspace:*",
"@abp/auditing": "workspace:*",
+ "@abp/cache-management": "workspace:*",
"@abp/components": "workspace:*",
"@abp/core": "workspace:*",
"@abp/data-protection": "workspace:*",
diff --git a/apps/vben5/apps/app-antd/src/views/caching/caches/index.vue b/apps/vben5/apps/app-antd/src/views/caching/caches/index.vue
new file mode 100644
index 000000000..c38e6545a
--- /dev/null
+++ b/apps/vben5/apps/app-antd/src/views/caching/caches/index.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
diff --git a/apps/vben5/packages/@abp/cache-management/package.json b/apps/vben5/packages/@abp/cache-management/package.json
new file mode 100644
index 000000000..662bd4e92
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "@abp/cache-management",
+ "version": "10.0.2",
+ "homepage": "https://github.com/colinin/abp-next-admin",
+ "bugs": "https://github.com/colinin/abp-next-admin/issues",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/colinin/abp-next-admin.git",
+ "directory": "packages/@abp/cache-management"
+ },
+ "license": "MIT",
+ "type": "module",
+ "sideEffects": [
+ "**/*.css"
+ ],
+ "exports": {
+ ".": {
+ "types": "./src/index.ts",
+ "default": "./src/index.ts"
+ }
+ },
+ "dependencies": {
+ "@abp/core": "workspace:*",
+ "@abp/request": "workspace:*",
+ "@abp/ui": "workspace:*",
+ "@ant-design/icons-vue": "catalog:",
+ "@vben/access": "workspace:*",
+ "@vben/common-ui": "workspace:*",
+ "@vben/hooks": "workspace:*",
+ "@vben/icons": "workspace:*",
+ "@vben/locales": "workspace:*",
+ "ant-design-vue": "catalog:",
+ "dayjs": "catalog:",
+ "vue": "catalog:",
+ "vxe-table": "catalog:"
+ }
+}
diff --git a/apps/vben5/packages/@abp/cache-management/src/api/index.ts b/apps/vben5/packages/@abp/cache-management/src/api/index.ts
new file mode 100644
index 000000000..f75f2bf00
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/api/index.ts
@@ -0,0 +1 @@
+export { useCacheManagementApi } from './useCacheManagementApi';
diff --git a/apps/vben5/packages/@abp/cache-management/src/api/useCacheManagementApi.ts b/apps/vben5/packages/@abp/cache-management/src/api/useCacheManagementApi.ts
new file mode 100644
index 000000000..15dc2993f
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/api/useCacheManagementApi.ts
@@ -0,0 +1,93 @@
+import type {
+ CacheKeyInput,
+ CacheKeysDto,
+ CacheRefreshInput,
+ CacheRemoveKeysInput,
+ CacheSetInput,
+ CacheValueDto,
+ GetCacheKeysInput,
+} from '../types';
+
+import { useRequest } from '@abp/request';
+
+/** 缓存管理API接口 */
+export function useCacheManagementApi() {
+ const apiPrefix = '/api/caching-management/cache';
+ const { cancel, request } = useRequest();
+
+ /**
+ * 获取所有缓存键
+ * @param input 参数
+ */
+ function getKeysApi(input?: GetCacheKeysInput): Promise {
+ return request(`${apiPrefix}/keys`, {
+ method: 'GET',
+ params: input,
+ });
+ }
+
+ /**
+ * 获取缓存值
+ * @param input 参数
+ */
+ function getKeyValueApi(input: CacheKeyInput): Promise {
+ return request(`${apiPrefix}/value`, {
+ method: 'GET',
+ params: input,
+ });
+ }
+
+ /**
+ * 设置缓存值
+ * @param input 参数
+ */
+ function setValueApi(input: CacheSetInput): Promise {
+ return request(`${apiPrefix}/set`, {
+ method: 'PUT',
+ data: input,
+ });
+ }
+
+ /**
+ * 刷新缓存
+ * @param input 参数
+ */
+ function refreshApi(input: CacheRefreshInput): Promise {
+ return request(`${apiPrefix}/refresh`, {
+ method: 'PUT',
+ data: input,
+ });
+ }
+
+ /**
+ * 移除缓存
+ * @param input 参数
+ */
+ function removeApi(input: CacheKeyInput): Promise {
+ return request(`${apiPrefix}/remove`, {
+ method: 'DELETE',
+ params: input,
+ });
+ }
+
+ /**
+ * 批量移除缓存
+ * @param input 参数
+ */
+ function bulkRemoveApi(input: CacheRemoveKeysInput): Promise {
+ return request(`${apiPrefix}/bulk/remove`, {
+ method: 'DELETE',
+ data: input,
+ });
+ }
+
+ return {
+ cancel,
+ getKeysApi,
+ getKeyValueApi,
+ refreshApi,
+ setValueApi,
+ removeApi,
+ bulkRemoveApi,
+ };
+}
diff --git a/apps/vben5/packages/@abp/cache-management/src/components/CacheEditModal.vue b/apps/vben5/packages/@abp/cache-management/src/components/CacheEditModal.vue
new file mode 100644
index 000000000..1af566477
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/components/CacheEditModal.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
diff --git a/apps/vben5/packages/@abp/cache-management/src/components/CacheKeyTable.vue b/apps/vben5/packages/@abp/cache-management/src/components/CacheKeyTable.vue
new file mode 100644
index 000000000..2835294a0
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/components/CacheKeyTable.vue
@@ -0,0 +1,291 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ onGet()" />
+ onGet()" />
+
+
+
diff --git a/apps/vben5/packages/@abp/cache-management/src/components/CacheRefreshModal.vue b/apps/vben5/packages/@abp/cache-management/src/components/CacheRefreshModal.vue
new file mode 100644
index 000000000..22be96ce4
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/components/CacheRefreshModal.vue
@@ -0,0 +1,121 @@
+
+
+
+
+
+
+
+
+
diff --git a/apps/vben5/packages/@abp/cache-management/src/components/index.ts b/apps/vben5/packages/@abp/cache-management/src/components/index.ts
new file mode 100644
index 000000000..915593b48
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/components/index.ts
@@ -0,0 +1 @@
+export { default as CacheKeyTable } from './CacheKeyTable.vue';
diff --git a/apps/vben5/packages/@abp/cache-management/src/constants/permissions.ts b/apps/vben5/packages/@abp/cache-management/src/constants/permissions.ts
new file mode 100644
index 000000000..54c8bdaff
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/constants/permissions.ts
@@ -0,0 +1,8 @@
+const CachePrefix = 'AbpCachingManagement.Cache';
+
+export const CachingManagementPermissions = {
+ Refresh: `${CachePrefix}.Refresh`,
+ Default: CachePrefix,
+ Delete: `${CachePrefix}.Delete`,
+ ManageValue: `${CachePrefix}.ManageValue`,
+};
diff --git a/apps/vben5/packages/@abp/cache-management/src/index.ts b/apps/vben5/packages/@abp/cache-management/src/index.ts
new file mode 100644
index 000000000..314dad0cd
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/index.ts
@@ -0,0 +1,3 @@
+export * from './api';
+export * from './components';
+export * from './types';
diff --git a/apps/vben5/packages/@abp/cache-management/src/types/index.ts b/apps/vben5/packages/@abp/cache-management/src/types/index.ts
new file mode 100644
index 000000000..ea55e7c90
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/src/types/index.ts
@@ -0,0 +1,48 @@
+interface GetCacheKeysInput {
+ filter?: string;
+ marker?: string;
+ prefix?: string;
+}
+
+interface CacheKeyInput {
+ key: string;
+}
+
+interface CacheSetInput {
+ absoluteExpiration?: Date;
+ key: string;
+ slidingExpiration?: Date;
+ value?: string;
+}
+
+interface CacheRefreshInput {
+ absoluteExpiration?: Date;
+ key: string;
+ slidingExpiration?: Date;
+}
+
+interface CacheKeysDto {
+ keys: string[];
+ nextMarker: string;
+}
+
+interface CacheValueDto {
+ expiration?: Date;
+ size: number;
+ type: string;
+ values: Record;
+}
+
+interface CacheRemoveKeysInput {
+ keys: string[];
+}
+
+export type {
+ CacheKeyInput,
+ CacheKeysDto,
+ CacheRefreshInput,
+ CacheRemoveKeysInput,
+ CacheSetInput,
+ CacheValueDto,
+ GetCacheKeysInput,
+};
diff --git a/apps/vben5/packages/@abp/cache-management/tsconfig.json b/apps/vben5/packages/@abp/cache-management/tsconfig.json
new file mode 100644
index 000000000..ce1a891fb
--- /dev/null
+++ b/apps/vben5/packages/@abp/cache-management/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "$schema": "https://json.schemastore.org/tsconfig",
+ "extends": "@vben/tsconfig/web.json",
+ "include": ["src"],
+ "exclude": ["node_modules"]
+}