├── .idea
└── icon.png
├── .workflow
└── pipeline-20250221.yml
├── LICENSE
├── README.md
├── README_EN.md
├── assets
├── jetbrains.svg
├── linux
│ └── RedisFront.png
├── logo.png
├── mac
│ └── RedisFront.icns
├── qq.jpg
├── version.json
├── weixin.jpg
└── windows
│ └── RedisFront.ico
├── build.gradle.kts
├── gradlew
├── gradlew.bat
├── screenshot
├── 2024.1
│ ├── 2024.1-dark-1.png
│ ├── 2024.1-dark-2.png
│ ├── 2024.1-dark-3.png
│ ├── 2024.1-dark-4.png
│ ├── 2024.1-dark-5.png
│ ├── 2024.1-light-1.png
│ ├── 2024.1-light-2.png
│ ├── 2024.1-light-3.png
│ ├── 2024.1-light-4.png
│ └── 2024.1-light-5.png
├── history
│ ├── redisfront-win11.png
│ └── redisfront.png
└── latest
│ ├── 2025.1-dark-1.png
│ ├── 2025.1-dark-2.png
│ ├── 2025.1-dark-3.png
│ ├── 2025.1-dark-4.png
│ └── 2025.1-dark-5.png
├── settings.gradle.kts
└── src
├── main
├── java
│ └── org
│ │ └── dromara
│ │ └── redisfront
│ │ ├── RedisFrontContext.java
│ │ ├── RedisFrontEventListener.java
│ │ ├── RedisFrontMain.java
│ │ ├── RedisFrontPrefs.java
│ │ ├── commons
│ │ ├── constant
│ │ │ └── Constants.java
│ │ ├── enums
│ │ │ ├── ConnectType.java
│ │ │ ├── KeyTypeEnum.java
│ │ │ ├── RedisMode.java
│ │ │ └── RedisNodeRole.java
│ │ ├── exception
│ │ │ ├── RedisFrontException.java
│ │ │ └── RedisFrontTimeoutException.java
│ │ ├── jsch
│ │ │ ├── JschManager.java
│ │ │ └── JschUtils.java
│ │ ├── lettuce
│ │ │ ├── AddressMappingResolver.java
│ │ │ └── LettuceUtils.java
│ │ ├── pool
│ │ │ ├── CleanMode.java
│ │ │ ├── ConnectionSupplier.java
│ │ │ ├── RedisConnectionFactory.java
│ │ │ └── RedisConnectionPoolManager.java
│ │ ├── resources
│ │ │ └── Icons.java
│ │ └── utils
│ │ │ ├── AlertUtils.java
│ │ │ ├── FutureUtils.java
│ │ │ ├── MD5Util.java
│ │ │ ├── RedisFrontUtils.java
│ │ │ ├── TreeUtils.java
│ │ │ └── UpgradeUtils.kt
│ │ ├── dao
│ │ ├── ConnectDetailDao.java
│ │ └── ConnectGroupDao.java
│ │ ├── model
│ │ ├── ClusterNode.java
│ │ ├── DbInfo.java
│ │ ├── LogInfo.java
│ │ ├── MessageInfo.java
│ │ ├── RedisNode.java
│ │ ├── context
│ │ │ └── RedisConnectContext.java
│ │ ├── entity
│ │ │ ├── ConnectDetailEntity.java
│ │ │ └── ConnectGroupEntity.java
│ │ ├── event
│ │ │ └── RedisFrontEvent.java
│ │ ├── table
│ │ │ ├── HashTableModel.java
│ │ │ ├── ListTableModel.java
│ │ │ ├── PubSubTableModel.java
│ │ │ ├── SetTableModel.java
│ │ │ ├── SortedSetTableModel.java
│ │ │ └── StreamTableModel.java
│ │ ├── tree
│ │ │ └── TreeNodeInfo.java
│ │ └── turbo
│ │ │ ├── Turbo1.java
│ │ │ ├── Turbo2.java
│ │ │ ├── Turbo3.java
│ │ │ ├── Turbo4.java
│ │ │ ├── Turbo5.java
│ │ │ └── Turbo6.java
│ │ ├── service
│ │ ├── RedisBasicService.java
│ │ ├── RedisHashService.java
│ │ ├── RedisListService.java
│ │ ├── RedisPubSubService.java
│ │ ├── RedisSetService.java
│ │ ├── RedisStreamService.java
│ │ ├── RedisStringService.java
│ │ ├── RedisZSetService.java
│ │ └── impl
│ │ │ ├── RedisBasicServiceImpl.java
│ │ │ ├── RedisHashServiceImpl.java
│ │ │ ├── RedisListServiceImpl.java
│ │ │ ├── RedisPubSubServiceImpl.java
│ │ │ ├── RedisSetServiceImpl.java
│ │ │ ├── RedisStreamServiceImpl.java
│ │ │ ├── RedisStringServiceImpl.java
│ │ │ └── RedisZSetServiceImpl.java
│ │ └── ui
│ │ ├── components
│ │ ├── chart
│ │ │ ├── AbstractRedisChart.java
│ │ │ ├── RedisClientConnectionsChart.java
│ │ │ ├── RedisCommandStatsChart.java
│ │ │ ├── RedisMemoryChart.java
│ │ │ └── RedisNetworkChart.java
│ │ ├── editor
│ │ │ └── TextEditor.java
│ │ ├── extend
│ │ │ └── BoldTitleTabbedPaneUI.java
│ │ ├── info
│ │ │ ├── LogInfoData.java
│ │ │ ├── LogStatusHolder.java
│ │ │ └── RedisInfoView.java
│ │ ├── loading
│ │ │ ├── SyncLoadingDialog.java
│ │ │ └── SyncLoadingWaiter.java
│ │ ├── monitor
│ │ │ ├── RedisMonitor.java
│ │ │ └── RedisUsageInfo.java
│ │ ├── panel
│ │ │ ├── BorderNonePanel.java
│ │ │ ├── NonePanel.java
│ │ │ └── WrapperPanel.java
│ │ ├── scanner
│ │ │ ├── AbstractRedisDataScanner.java
│ │ │ ├── RedisDataScanner.java
│ │ │ ├── context
│ │ │ │ ├── RedisScanContext.java
│ │ │ │ └── RedisScanContextManager.java
│ │ │ ├── core
│ │ │ │ ├── HashRedisDataScanner.java
│ │ │ │ ├── ListRedisDataScanner.java
│ │ │ │ ├── SetRedisDataScanner.java
│ │ │ │ ├── StreamRedisDataScanner.java
│ │ │ │ ├── StringRedisDataScanner.java
│ │ │ │ └── ZSetRedisDataScanner.java
│ │ │ ├── handler
│ │ │ │ └── ScanDataRefreshHandler.java
│ │ │ └── model
│ │ │ │ └── ScanDataResult.java
│ │ └── terminal
│ │ │ └── AbstractTerminal.java
│ │ ├── dialog
│ │ ├── AddConnectDialog.form
│ │ ├── AddConnectDialog.java
│ │ ├── AddKeyDialog.form
│ │ ├── AddKeyDialog.java
│ │ ├── AddOrUpdateValueDialog.form
│ │ ├── AddOrUpdateValueDialog.java
│ │ ├── ImportConfigDialog.form
│ │ ├── ImportConfigDialog.java
│ │ ├── SettingDialog.form
│ │ └── SettingDialog.java
│ │ ├── event
│ │ ├── AddKeySuccessEvent.java
│ │ ├── ClickKeyTreeNodeEvent.java
│ │ ├── CommandExecuteEvent.java
│ │ ├── DrawerChangeEvent.java
│ │ ├── KeyDeleteSuccessEvent.java
│ │ ├── OpenRedisConnectEvent.java
│ │ └── RefreshConnectTreeEvent.java
│ │ ├── handler
│ │ ├── ConnectHandler.java
│ │ └── DrawerHandler.java
│ │ └── widget
│ │ ├── RedisFrontComponent.java
│ │ ├── RedisFrontWidget.java
│ │ ├── main
│ │ ├── MainComponent.java
│ │ ├── about
│ │ │ └── MainAboutPanel.java
│ │ ├── fragment
│ │ │ ├── MainTabView.java
│ │ │ └── scaffold
│ │ │ │ ├── PageScaffold.java
│ │ │ │ ├── index
│ │ │ │ ├── IndexPageView.java
│ │ │ │ ├── LeftSearchFragment.form
│ │ │ │ ├── LeftSearchFragment.java
│ │ │ │ ├── RightViewFragment.form
│ │ │ │ └── RightViewFragment.java
│ │ │ │ ├── pubsub
│ │ │ │ ├── PubSubPageView.form
│ │ │ │ └── PubSubPageView.java
│ │ │ │ ├── report
│ │ │ │ ├── ReportPageView.form
│ │ │ │ └── ReportPageView.java
│ │ │ │ └── terminal
│ │ │ │ ├── RedisFrontTerminal.java
│ │ │ │ └── TerminalPageView.java
│ │ └── listener
│ │ │ └── MouseDraggedListener.java
│ │ └── sidebar
│ │ ├── SidebarComponent.java
│ │ ├── drawer
│ │ ├── DrawerAnimationAction.java
│ │ └── DrawerMenuItemEvent.java
│ │ ├── panel
│ │ ├── LogoPanel.java
│ │ └── ThemesChangePanel.java
│ │ └── tree
│ │ ├── RedisConnectTree.java
│ │ ├── RedisConnectTreeCellRenderer.java
│ │ └── RedisConnectTreeNode.java
└── resources
│ ├── icons
│ ├── CPU.svg
│ ├── CPU_dark.svg
│ ├── DataTables.svg
│ ├── RecentlyUsed.svg
│ ├── RedisFront.ico
│ ├── add.svg
│ ├── add_conn.svg
│ ├── add_dark.svg
│ ├── buildLoadChanges.svg
│ ├── cmd_add.svg
│ ├── cmd_add_dark.svg
│ ├── command.svg
│ ├── command_dark.svg
│ ├── commit.svg
│ ├── copy.svg
│ ├── db_cli2.svg
│ ├── db_report2.svg
│ ├── delete.svg
│ ├── delete_a.svg
│ ├── delete_b.svg
│ ├── delete_b_dark.svg
│ ├── delete_dark.svg
│ ├── diff.svg
│ ├── download.svg
│ ├── favorite.svg
│ ├── folder.svg
│ ├── forward.svg
│ ├── github.svg
│ ├── github_dark.svg
│ ├── home.svg
│ ├── info.svg
│ ├── link.svg
│ ├── listFiles.svg
│ ├── logo.png
│ ├── memory.svg
│ ├── memory_dark.svg
│ ├── menu-cut.svg
│ ├── menu-paste.svg
│ ├── mode.svg
│ ├── mode_dark.svg
│ ├── mq.svg
│ ├── none.svg
│ ├── none_dark.svg
│ ├── project.svg
│ ├── redisInfo.svg
│ ├── refresh.svg
│ ├── refresh_a.svg
│ ├── refresh_dark.svg
│ ├── regex.svg
│ ├── regexHovered.svg
│ ├── regexSelected.svg
│ ├── save.svg
│ ├── save_a.svg
│ ├── search.svg
│ ├── setting.svg
│ ├── setting_dark.svg
│ ├── show.svg
│ ├── status_error.svg
│ ├── status_ok.svg
│ ├── table.svg
│ ├── test-connect.svg
│ ├── tree_key.svg
│ ├── undo.svg
│ ├── wifi.svg
│ └── wifi_dark.svg
│ ├── org
│ └── dromara
│ │ └── redisfront
│ │ ├── RedisFront.properties
│ │ ├── RedisFront_zh_CN.properties
│ │ └── theme
│ │ ├── FlatDarkLaf.properties
│ │ └── FlatLightLaf.properties
│ └── svg
│ ├── actions
│ ├── colors.svg
│ ├── copy.svg
│ ├── execute.svg
│ ├── intentionBulb.svg
│ ├── quickfixOffBulb.svg
│ └── suspend.svg
│ ├── close_.svg
│ ├── dark.svg
│ ├── errorDialog.svg
│ ├── informationDialog.svg
│ ├── light.svg
│ ├── publish.svg
│ ├── publish_dark.svg
│ ├── redis-a.svg
│ ├── redisfront.svg
│ ├── redisfront_text.svg
│ ├── redisfront_text_dark.svg
│ ├── subscribe.svg
│ ├── subscribe_dark.svg
│ ├── testBtn.svg
│ ├── unSubscribe.svg
│ ├── unSubscribe_dark.svg
│ └── warningDialog.svg
└── test
└── java
└── org
└── dromara
└── redisfront
└── commons
└── utils
├── DerbyUtilTest.java
├── FutureUtilsTest.java
├── LettuceUtilsTest.java
├── TreeTableTest.java
└── TreeUtilsTest.java
/.idea/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/.idea/icon.png
--------------------------------------------------------------------------------
/.workflow/pipeline-20250221.yml:
--------------------------------------------------------------------------------
1 | version: '1.0'
2 | name: pipeline-20250221
3 | displayName: pipeline-20250221
4 | triggers:
5 | trigger: auto
6 | push:
7 | branches:
8 | prefix:
9 | - release-
10 | stages:
11 | - name: stage-571cb146
12 | displayName: 版本构建
13 | strategy: naturally
14 | trigger: auto
15 | executor: []
16 | steps:
17 | - step: build@gradle
18 | name: build_gradle
19 | displayName: Gradle 构建
20 | jdkVersion: '22'
21 | gradleVersion: '4.4'
22 | commands:
23 | - '# Gradle默认构建命令'
24 | - chmod +x ./gradlew
25 | - ./gradlew build
26 | artifacts:
27 | - name: BUILD_ARTIFACT
28 | path:
29 | - ./target
30 | caches:
31 | - ~/.gradle/caches
32 | notify: []
33 | strategy:
34 | retry: '0'
35 | - step: publish@release_artifacts
36 | name: publish_release_artifacts
37 | displayName: 发布
38 | dependArtifact: output
39 | version: 2025.1.1.1
40 | autoIncrement: true
41 | notify: []
42 | strategy:
43 | retry: '0'
44 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | #
RedisFront - Cross-platform redis GUI
2 |
3 | -------
4 |
5 | 
6 | 
7 | 
8 |
9 | RedisFront 是一款基于 Java Swing 开发的跨平台 Redis 客户端工具,兼容多种主流操作系统 ( 包括 Windows, macOS 和 Linux ) , 通过可视化界面实现 Redis 数据管理与服务器状态监测,适用于开发调试与生产运维场景。
10 |
11 | * **多模式支持**:无缝对接单机部署、集群架构、哨兵模式等不同 Redis 部署形态,满足多样化环境需求
12 |
13 | * **安全连接**:内置 SSH 隧道功能,保障远程访问 Redis 服务时的数据传输安全性
14 |
15 | * **数据管理**:提供键值浏览、增删改查、过期时间设置、导入导出等完整数据操作功能
16 |
17 | * **状态监控**:实时展示内存用量、连接数、命令统计等关键指标,辅助性能优化
18 |
19 |
20 | [>> Click here to "README.md" with English!](./README_EN.md)
21 |
22 | 
23 | 
24 | 
25 |
26 | ### 🌱 下载
27 |
28 | [https://gitcode.com/dromara/RedisFront/releases](https://gitcode.com/dromara/RedisFront/releases)
29 |
30 | [https://gitee.com/dromara/RedisFront/releases](https://gitee.com/dromara/RedisFront/releases)
31 |
32 | [https://github.com/dromara/RedisFront/releases](https://github.com/dromara/RedisFront/releases)
33 |
34 | ### ⛳ 反馈
35 |
36 | - 微信 `capf4xj`
37 |
38 |
39 |
40 | - QQ群 `579454329` `验证信息:RedisFront`
41 |
42 |
43 |
44 | ### ❤️ 感谢
45 | * [FlatLaf](https://github.com/JFormDesigner/FlatLaf?from=RedisFront)
46 | * [Lettuce](https://github.com/lettuce-io/lettuce-core?from=RedisFront)
47 | * [Hutool](https://hutool.cn?from=RedisFront)
48 | * [JetBrains](https://www.jetbrains.com?from=RedisFront)
49 |
50 | 
51 |
--------------------------------------------------------------------------------
/README_EN.md:
--------------------------------------------------------------------------------
1 | #
RedisFront - Cross-platform redis GUI
2 |
3 | -------
4 |
5 | 
6 | 
7 | 
8 |
9 | RedisFront is a cross-platform Redis client tool developed with Java Swing, compatible with major operating systems (Windows, macOS,Linux). Its visualized interface enables Redis data management and server monitoring, suitable for development debugging and production operations.
10 |
11 | * **Multi-mode Support**: Seamlessly connects to standalone deployments, Cluster mode, and Sentinel mode configurations
12 |
13 | * **Secure Connectivity**: Built-in SSH tunneling ensures secure data transmission for remote Redis access
14 |
15 | * **Data Operations**: Offers complete key-value management including CRUD, TTL settings, and import/export functions
16 |
17 | * **Real-time Monitoring**: Displays critical metrics like memory usage, connection counts, and command statistics for performance optimization
18 |
19 | 
20 | 
21 | 
22 |
23 | ### 🌱 Download
24 |
25 | [https://gitcode.com/dromara/RedisFront/releases](https://gitcode.com/dromara/RedisFront/releases)
26 |
27 | [https://gitee.com/dromara/RedisFront/releases](https://gitee.com/dromara/RedisFront/releases)
28 |
29 | [https://github.com/dromara/RedisFront/releases](https://github.com/dromara/RedisFront/releases)
30 |
31 | ### ❤️ Thanks
32 | * [FlatLaf](https://github.com/JFormDesigner/FlatLaf?from=RedisFront)
33 | * [Lettuce](https://github.com/lettuce-io/lettuce-core?from=RedisFront)
34 | * [Hutool](https://hutool.cn?from=RedisFront)
35 | * [JetBrains](https://www.jetbrains.com?from=RedisFront)
36 |
37 | 
38 |
39 |
--------------------------------------------------------------------------------
/assets/linux/RedisFront.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/assets/linux/RedisFront.png
--------------------------------------------------------------------------------
/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/assets/logo.png
--------------------------------------------------------------------------------
/assets/mac/RedisFront.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/assets/mac/RedisFront.icns
--------------------------------------------------------------------------------
/assets/qq.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/assets/qq.jpg
--------------------------------------------------------------------------------
/assets/version.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2025.1",
3 | "download": "https://gitee.com/dromara/RedisFront/releases/"
4 | }
--------------------------------------------------------------------------------
/assets/weixin.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/assets/weixin.jpg
--------------------------------------------------------------------------------
/assets/windows/RedisFront.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/assets/windows/RedisFront.ico
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-dark-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-dark-1.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-dark-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-dark-2.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-dark-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-dark-3.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-dark-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-dark-4.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-dark-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-dark-5.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-light-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-light-1.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-light-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-light-2.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-light-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-light-3.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-light-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-light-4.png
--------------------------------------------------------------------------------
/screenshot/2024.1/2024.1-light-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/2024.1/2024.1-light-5.png
--------------------------------------------------------------------------------
/screenshot/history/redisfront-win11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/history/redisfront-win11.png
--------------------------------------------------------------------------------
/screenshot/history/redisfront.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/history/redisfront.png
--------------------------------------------------------------------------------
/screenshot/latest/2025.1-dark-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/latest/2025.1-dark-1.png
--------------------------------------------------------------------------------
/screenshot/latest/2025.1-dark-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/latest/2025.1-dark-2.png
--------------------------------------------------------------------------------
/screenshot/latest/2025.1-dark-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/latest/2025.1-dark-3.png
--------------------------------------------------------------------------------
/screenshot/latest/2025.1-dark-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/latest/2025.1-dark-4.png
--------------------------------------------------------------------------------
/screenshot/latest/2025.1-dark-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dromara/RedisFront/fe63cae3002a5b98a4c620f8b7a1e74b4b6c87b0/screenshot/latest/2025.1-dark-5.png
--------------------------------------------------------------------------------
/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "RedisFront"
2 |
3 |
4 |
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/RedisFrontEventListener.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront;
2 |
3 | import org.dromara.quickswing.events.QSEvent;
4 | import org.dromara.quickswing.events.QSEventListener;
5 | import org.dromara.redisfront.model.event.RedisFrontEvent;
6 | import org.dromara.redisfront.ui.widget.RedisFrontWidget;
7 |
8 | import java.util.HashMap;
9 | import java.util.Map;
10 | import java.util.concurrent.ConcurrentHashMap;
11 | import java.util.function.Consumer;
12 |
13 | public class RedisFrontEventListener extends QSEventListener {
14 | private static final Map listener = new ConcurrentHashMap<>();
15 |
16 | public RedisFrontEventListener(RedisFrontWidget source) {
17 | super(source);
18 | RedisFrontContext context = (RedisFrontContext) source.getContext();
19 | context.getEventBus().subscribe(this);
20 | }
21 |
22 | @Override
23 | protected void onEvent(QSEvent qsEvent) {
24 | if (qsEvent instanceof RedisFrontEvent redisFrontEvent) {
25 | if (redisFrontEvent.getRedisConnectContext() != null) {
26 | EventConsumer eventConsumer = listener.get(redisFrontEvent.getRedisConnectContext().getId());
27 | if (eventConsumer != null) {
28 | eventConsumer.forEach((name, consumer) -> {
29 | if (name.equals(redisFrontEvent.getClass().getName())) {
30 | consumer.accept(redisFrontEvent);
31 | }
32 | });
33 | }
34 | }
35 | } else {
36 | listener.forEach((_, eventConsumer) -> eventConsumer.forEach((_, consumer) -> consumer.accept(qsEvent)));
37 | }
38 | }
39 |
40 | public void bind(int id, Class extends QSEvent> clazz, Consumer consumer) {
41 | String name = clazz.getName();
42 | if (listener.containsKey(id)) {
43 | EventConsumer eventConsumer = listener.get(id);
44 | if (!eventConsumer.containsKey(name)) {
45 | eventConsumer.put(name, consumer);
46 | }
47 | } else {
48 | listener.put(id, new EventConsumer(name, consumer));
49 | }
50 | }
51 |
52 | public void unbind(int id) {
53 | listener.remove(id);
54 | }
55 |
56 | private static class EventConsumer extends HashMap> {
57 | public EventConsumer(String name, Consumer consumer) {
58 | this.put(name, consumer);
59 | }
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/RedisFrontMain.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront;
2 | import lombok.extern.slf4j.Slf4j;
3 | import org.dromara.quickswing.QSApplicationInitializer;
4 | import org.dromara.quickswing.ui.app.QSWidget;
5 | import org.dromara.redisfront.commons.constant.Constants;
6 |
7 | /**
8 | * Application
9 | *
10 | * @author Jin
11 | */
12 | @Slf4j
13 | public class RedisFrontMain {
14 | public static void main(String[] args) {
15 | QSApplicationInitializer.initialize(args, Constants.APP_NAME, () -> {
16 | RedisFrontContext context = new RedisFrontContext();
17 | QSWidget application = context.createApplication(args);
18 | application.setLocationRelativeTo(null);
19 | application.setVisible(true);
20 | });
21 | log.info("RedisFront started");
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/RedisFrontPrefs.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront;
2 |
3 |
4 | import lombok.extern.slf4j.Slf4j;
5 | import org.dromara.quickswing.ui.app.QSPrefs;
6 |
7 | @Slf4j
8 | public class RedisFrontPrefs extends QSPrefs {
9 | @Override
10 | protected String getKeyPrefix() {
11 | return "redis-front";
12 | }
13 |
14 | public RedisFrontPrefs(String rootPath) {
15 | super(rootPath);
16 | }
17 |
18 |
19 | @Override
20 | protected void initDefaults() {
21 | setDbFileName("redis-front.db");
22 | }
23 |
24 | public boolean getDBInitialized() {
25 | return getState().getBoolean("redis-front-databaseInitialized", false);
26 | }
27 |
28 | public void setDBInitialized(boolean databaseInitialized) {
29 | getState().putBoolean("redis-front-databaseInitialized", databaseInitialized);
30 | }
31 |
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/commons/constant/Constants.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront.commons.constant;
2 |
3 | import cn.hutool.core.io.FileUtil;
4 | import cn.hutool.setting.dialect.PropsUtil;
5 |
6 | import java.io.File;
7 |
8 | /**
9 | * Constant
10 | *
11 | * @author Jin
12 | */
13 |
14 | public class Constants {
15 |
16 | public static final String APP_NAME = "RedisFront";
17 | public static final String APP_THEME_PACKAGE = "org.dromara.redisfront.theme";
18 | public static final String APP_RESOURCE_BUNDLE = "org.dromara.redisfront.RedisFront";
19 |
20 | public static final String SQL_CREATE_CONNECT_DETAIL = """
21 | create table connect_detail
22 | (
23 | id integer not null
24 | constraint connect_detail_pk
25 | primary key autoincrement,
26 | name TEXT,
27 | group_id integer,
28 | host TEXT,
29 | port integer,
30 | username TEXT,
31 | password TEXT,
32 | connect_mode TEXT,
33 | redis_mode TEXT,
34 | setting TEXT,
35 | enable_ssl integer,
36 | ssl_config TEXT,
37 | ssh_config TEXT
38 | );
39 | """;
40 | public static final String SQL_CREATE_CONNECT_GROUP = """
41 | create table connect_group
42 | (
43 | group_id integer not null
44 | constraint connect_group_pk
45 | primary key autoincrement,
46 | group_name TEXT,
47 | enable_ssh integer default 0,
48 | ssh_config TEXT
49 | );
50 | """;
51 |
52 |
53 | public static final String KEY_THEME = "theme1";
54 | public static final String KEY_THEME_SELECT_INDEX = "selectThemeIndex";
55 |
56 | public static final String KEY_FONT_NAME = "fontName";
57 |
58 | public static final String KEY_FONT_SIZE = "fontSize";
59 | public static final String KEY_SSH_TIMEOUT = "sshTimeout";
60 | public static final String KEY_REDIS_TIMEOUT = "redisTimeout";
61 |
62 | public static final String KEY_KEY_SEPARATOR = "keySeparator";
63 |
64 | public static final String KEY_KEY_MAX_LOAD_NUM = "keyMaxLoadNum";
65 |
66 | public static final String KEY_APP_DATABASE_INIT = "appDatabaseInit";
67 |
68 | public static final String KEY_LANGUAGE = "language";
69 |
70 | @Deprecated
71 | public static final String DATA_PATH = FileUtil.getUserHomePath() + File.separator + "redis-front";
72 | @Deprecated
73 | public static final String CONFIG_DATA_PATH = DATA_PATH + File.separator + "config";
74 |
75 | }
76 |
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/commons/enums/ConnectType.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront.commons.enums;
2 |
3 | public enum ConnectType {
4 | NORMAL,
5 | SSH;
6 |
7 | public static ConnectType of(String type) {
8 | for (ConnectType connectType : values()) {
9 | if (connectType.name().equals(type)) {
10 | return connectType;
11 | }
12 | }
13 | return NORMAL;
14 | }
15 | }
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/commons/enums/KeyTypeEnum.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront.commons.enums;
2 |
3 | import java.awt.*;
4 |
5 | public enum KeyTypeEnum {
6 | STRING("String", new Color(20, 92, 205)),
7 | LIST("List", new Color(222, 138, 4)),
8 | HASH("Hash", new Color(56, 176, 63)),
9 | SET("Set", new Color(3, 148, 166)),
10 | ZSET("ZSet", new Color(174, 30, 20)),
11 | JSON("Json", new Color(134, 102, 184)),
12 | STREAM("Stream", new Color(234, 100, 74));
13 |
14 |
15 | private final Color color;
16 | private final String typeName;
17 |
18 | KeyTypeEnum(String typeName, Color color) {
19 | this.color = color;
20 | this.typeName = typeName;
21 | }
22 |
23 | public String typeName() {
24 | return typeName;
25 | }
26 |
27 | public Color color() {
28 | return color;
29 | }
30 | }
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/commons/enums/RedisMode.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront.commons.enums;
2 |
3 | public enum RedisMode {
4 | STANDALONE("MainTabbedPanel.RedisMode.standalone"),
5 | SENTINEL("MainTabbedPanel.RedisMode.sentinel"),
6 | CLUSTER("MainTabbedPanel.RedisMode.cluster");
7 |
8 | public final String modeName;
9 |
10 | RedisMode(String modeName) {
11 | this.modeName = modeName;
12 | }
13 |
14 | public static RedisMode of(String modeName) {
15 | for (RedisMode redisMode : values()) {
16 | if (redisMode.modeName.equals(modeName)) {
17 | return redisMode;
18 | }
19 | }
20 | return STANDALONE;
21 | }
22 | }
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/commons/enums/RedisNodeRole.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront.commons.enums;
2 |
3 | public enum RedisNodeRole {
4 | MASTER,
5 | SLAVE,
6 | NORMAL;
7 |
8 | }
9 |
--------------------------------------------------------------------------------
/src/main/java/org/dromara/redisfront/commons/exception/RedisFrontException.java:
--------------------------------------------------------------------------------
1 | package org.dromara.redisfront.commons.exception;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 |
6 | import javax.swing.*;
7 | import java.util.function.Supplier;
8 |
9 | public class RedisFrontException extends RuntimeException implements Supplier