SpringBoot整合Redis实现缓存信息监控

SpringBoot整合Redis可以通过RedisTemplate和Redisson两种方式。

1. RedisTemplate获取Redis信息

根据Connection获取Redis缓存信息

// 方式1:获取Redis缓存全部信息
Properties info = redisTemplate.getRequiredConnectionFactory().getConnection().info();
// 方式2:根据Connection获取Redis缓存指定信息:
Properties info = redisTemplate.getRequiredConnectionFactory().getConnection().info(“section”);

方式2可选参数:

server: 常规信息
clients: 客户端连接部分
memory: 内存消耗相关信息
persistence: RDB和AOF相关信息
stats: 统计信息
replication: 主/从复制信息
cpu: CPU消耗统计
commandstats: Redis命令统计
cluster: 集群部分
keyspace: 数据库、key相关统计

2. Redisson获取Redis信息

2.1 Redisson版本3.18.1及之前

根据Connection获取Redis缓存信息

private final RedissonConnectionFactory connectionFactory;
RedisConnection connection = connectionFactory.getConnection();
// 方式1:获取Redis缓存全部信息
Properties info = connection.info();
// 方式2:根据Connection获取Redis缓存指定信息
Properties info = connection.info(“section”);

2.2 Redisson版本3.19.0及之后

根据Connection获取Redis缓存信息

private final RedissonConnectionFactory connectionFactory;
RedisConnection connection = connectionFactory.getConnection();
// 方式1:获取Redis缓存全部信息
Properties info = connection.commands().info();
// 方式2:根据Connection获取Redis缓存指定信息
Properties info = connection.commands().info(“section”);

2.3 相关集成代码

<!--redisson-->
<dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId>
</dependency>
@RequiredArgsConstructor
public class RedisMonitorUtil {private final RedissonConnectionFactory connectionFactory;/*** 获取redis服务器相关信息* @return*/public CacheListInfoVO getInfo() {CacheListInfoVO infoVo = new CacheListInfoVO();RedisConnection connection = connectionFactory.getConnection();Properties commandStats = connection.info("commandstats");List<CommandstatsVO> pieList = new ArrayList<>();if (commandStats != null) {commandStats.stringPropertyNames().forEach(key -> {CommandstatsVO commandstatsVO = new CommandstatsVO();String property = commandStats.getProperty(key);commandstatsVO.setName(StringUtils.removeStart(key, "cmdstat_"));commandstatsVO.setCalls(StringUtils.substringBetween(property, "calls=", ",usec"));commandstatsVO.setPerCall(StringUtils.substringAfter(property, "usec_per_call="));pieList.add(commandstatsVO);});}try {ObjectMapper objectMapper = new ObjectMapper();CacheInfoVO cacheInfoVO = JSON.parseObject(objectMapper.writeValueAsString(connection.info()), CacheInfoVO.class);infoVo.setInfo(cacheInfoVO);} catch (JsonProcessingException e) {e.printStackTrace();}infoVo.setDbSize(connection.dbSize());infoVo.setCommandStats(pieList);return infoVo;}
}

3. Redis Info命令信息解释

redis> INFO ALL
# Server
redis_version:5.0.5       #Redis服务器的版本
redis_git_sha1:00000000   #Git SHA1
redis_git_dirty:0         #Git dirty flag
redis_build_id:cdff23e4497417f9  #构建ID
redis_mode:cluster        #Redis启动模式:standalone、Sentinel、Cluster
os:Linux 4.4.0-143-generic x86_64  #redis宿主机操作系统
arch_bits:64              #架构:32位、64位
multiplexing_api:epoll    #事件循环机制
atomicvar_api:atomic-builtin   #Atomicvar API
gcc_version:5.4.0             #编译 Redis 时所使用的 GCC 版本
process_id:41450          #进程PID
run_id:7c1db72b9f235c5e52780aeb8817fd272230f1bc  #标识Redis服务器的唯一随机值,由Sentinel和Cluster使用
tcp_port:6379            #TCP、IP侦听端口
uptime_in_seconds:129723    #自Redis服务器启动以来的秒数
uptime_in_days:1            #自Redis服务器启动以来的天数
hz:10                    #调度serverCron每秒运行次数
configured_hz:10         #
lru_clock:10612903       #以分钟为单位进行自增的时钟,用于 LRU 管理
executable:/usr/local/redis5.0/bin/redis-server          #服务器可执行文件的路径
config_file:/usr/local/redis5.0/6379/redis6379.conf      #启动 redis 配置文件# Clients
connected_clients:1                   #已连接客户端的数量(不包括通过从服务器连接的客户端)
client_recent_max_input_buffer:2      #当前连接的客户端当中,最大输入缓存
client_recent_max_output_buffer:0     #当前连接的客户端当中,最长的输出列表
blocked_clients:0                     #正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客户端的数量# Memory
used_memory:2660408                 #由 redis 分配器(标准libc,jemalloc或其他分配器,例如tcmalloc)分配的内存总量,以字节(byte)为单位
used_memory_human:2.54M             #以可读的格式返回 redis 分配的内存总量
used_memory_rss:9154560             #从操作系统的角度,返回 Redis 已分配的内存总量(俗称常驻集大小)。这个值和 top、ps 等命令的输出一致。
used_memory_rss_human:8.73M         #以可读的格式,操作系统角度,返回 redis 分配的内存总量
used_memory_peak:204081928          #redis 的内存消耗峰值(以字节为单位)
used_memory_peak_human:194.63M      #以可读的格式,返回 Redis 的内存消耗峰值
used_memory_peak_perc:1.30%         #used_memory_peak在used_memory中所占的百分比
used_memory_overhead:2565048        #分配用于管理其内部数据结构的所有开销的总字节数
used_memory_startup:1449744         #启动时消耗的初始内存量(以字节为单位)
used_memory_dataset:95360           #数据集的大小(以字节为单位,used_memory - used_memory_overhead)
used_memory_dataset_perc:7.88%      #used_memory_dataset在净内存(used_memory-used_memory_startup)使用量中所占的百分比
allocator_allocated:2770640         #分配器分配的内存
allocator_active:3371008            #分配器活跃的内存
allocator_resident:11554816         #分配器常驻的内存
total_system_memory:1021468672      #主机拥有的内存总量
total_system_memory_human:974.15M   #以可读的格式返回主机拥有的内存总量
used_memory_lua:37888               #Lua引擎使用的字节数
used_memory_lua_human:37.00K        #以可读的格式返回Lua引擎使用内存
used_memory_scripts:0         
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0                         #配置设置的最大可使用内存值,默认0,不限制
maxmemory_human:0B                  #以可读的格式返回最大可使用内存值
maxmemory_policy:noeviction         #内存容量超过maxmemory后的处理策略,noeviction当内存使用达到阈值的时候,所有引起申请内存的命令会报错
allocator_frag_ratio:1.22           #分配器的碎片率
allocator_frag_bytes:600368         #分配器的碎片大小(以字节为单位)
allocator_rss_ratio:3.43            #分配器常驻内存比例
allocator_rss_bytes:8183808         #分配器的常驻内存大小(以字节为单位)
rss_overhead_ratio:0.79             #常驻内存开销比例
rss_overhead_bytes:-2400256         #常驻内存开销大小(以字节为单位)
mem_fragmentation_ratio:3.50         #内存碎片率,used_memory_rss 和 used_memory 之间的比率
mem_fragmentation_bytes:6536432      #内存碎片的大小(以字节为单位)
mem_not_counted_for_evict:0          #被驱逐的大小
mem_replication_backlog:1048576      #repl_backlog
mem_clients_slaves:16922             #clients_slaves
mem_clients_normal:49694             #clients_normal
mem_aof_buffer:0                     #aof时,占用的缓冲
mem_allocator:jemalloc-5.1.0         #内存分配器(在编译时选择)
active_defrag_running:0              #碎片整理是否处于活动状态
lazyfree_pending_objects:0           #等待释放的对象数(由于使用ASYNC选项调用UNLINK或FLUSHDB和FLUSHALL)# Persistence
loading:0                           #记录服务器是否正在载入持久化文件
rdb_changes_since_last_save:0       #最近一次成功创建持久化文件之后,经过了多少秒
rdb_bgsave_in_progress:0            #记录了服务器是否正在创建 RDB 文件
rdb_last_save_time:1570890961       #最近一次成功创建 RDB 文件的 UNIX 时间戳
rdb_last_bgsave_status:ok           #记录最近一次创建 RDB 文件的状态,是成功还是失败
rdb_last_bgsave_time_sec:0          #记录了最近一次创建 RDB 文件耗费的秒数
rdb_current_bgsave_time_sec:-1      #如果正在创建 RDB 文件,记录当前的创建操作已经耗费的秒数
rdb_last_cow_size:249856            #上一次RBD保存操作期间写时复制的大小(以字节为单位)
aof_enabled:1                       #AOF是否开启
aof_rewrite_in_progress:0           #记录了是否正在创建 AOF 文件
aof_rewrite_scheduled:0             #记录了 RDB 文件创建完毕之后,是否需要执行 AOF 重写操作
aof_last_rewrite_time_sec:0         #最近一次创建 AOF 文件耗费的秒数
aof_current_rewrite_time_sec:-1     #如果正在创建 AOF 文件,那么记录当前的创建操作耗费的秒数
aof_last_bgrewrite_status:ok        #记录了最近一次创建 AOF 文件的状态,是成功还是失败
aof_last_write_status:ok            #AOF的最后写入操作的状态,是成功还是失败
aof_last_cow_size:307200            #上一次AOF保存操作期间写时复制的大小(以字节为单位)
aof_current_size:115                #AOF 文件当前的大小
aof_base_size:115                   #最近一次启动或重写时的AOF文件大小
aof_pending_rewrite:0               #记录了是否有 AOF 重写操作在等待 RDB 文件创建完毕之后执行
aof_buffer_length:0                 #AOF缓冲区的大小
aof_rewrite_buffer_length:0         #AOF 重写缓冲区的大小
aof_pending_bio_fsync:0             #后台 I/O 队列里面,等待执行的 fsync 数量
aof_delayed_fsync:0                 #被延迟的 fsync 调用数量,如果该值比较大,可以开启参数:no-appendfsync-on-rewrite=yes如果正在进行加载操作,会有以下状态:
loading_start_time:                #加载操作开始的时间戳
loading_total_bytes:               #加载文件总大小
loading_loaded_bytes:              #已加载的字节数
loading_loaded_perc:               #已加载的百分比
loading_eta_seconds:               #完成加载所需的秒数(以秒为单位)注意:
changes_since_last_save是指自上次调用SAVE或BGSAVE以来在数据集中产生某种更改的操作数。# Stats
total_connections_received:11046    #服务器接受的连接总数
total_commands_processed:2086515    #服务器已执行的命令数量
instantaneous_ops_per_sec:0         #服务器每秒钟执行的命令数量
total_net_input_bytes:116217212     #启动以来,流入的字节总数
total_net_output_bytes:161658834    #启动以来,流出的字节总数
instantaneous_input_kbps:0.02       #接收输入的速率(每秒)
instantaneous_output_kbps:0.00      #输出的速率(每秒)
rejected_connections:0              #由于maxclients限制而被拒绝的连接数
sync_full:1                         #与slave full sync的次数      
sync_partial_ok:14                  #接受的部分重新同步(psync)请求的数量
sync_partial_err:1                  #被拒绝的部分重新同步(psync)请求的数量
expired_keys:0                      #key过期事件总数
expired_stale_perc:0.00             #过期的比率
expired_time_cap_reached_count:0    #过期计数
evicted_keys:0                      #由于最大内存限制而被驱逐的key数量
keyspace_hits:1057312               #key命中次数
keyspace_misses:38734               #key未命中次数
pubsub_channels:0                   #发布/订阅频道的数量
pubsub_patterns:0                   #发布/订阅的模式数量
latest_fork_usec:1460               #最近一次 fork() 操作耗费的毫秒数(以微秒为单位)
migrate_cached_sockets:0            #为迁移而打开的套接字数
slave_expires_tracked_keys:0        #跟踪过期key数量(仅适用于可写从)
active_defrag_hits:0                #活跃碎片执行的值重新分配的数量
active_defrag_misses:0              #活跃碎片执行的中止值重新分配的数量
active_defrag_key_hits:0            #活跃碎片整理的key数
active_defrag_key_misses:0          #活跃碎片整理过程跳过的key数# Replication
role:master                         #角色(master、slave),一个从服务器也可能是另一个服务器的主服务器
connected_slaves:1                  #连接slave实例的个数
slave0:ip=192.168.163.132,port=6382,state=online,offset=64547142,lag=1 #连接的slave的信息
master_replid:1726c598c37f039c4b69db7a4281392a650eb88b                 #服务器的复制ID
master_replid2:0000000000000000000000000000000000000000                #第二服务器复制ID,用于故障转移后的PSYNC,用于集群等高可用之后主从节点的互换
master_repl_offset:64547142                                            #复制偏移量1
second_repl_offset:-1                                                  #第二服务器复制偏移量2
repl_backlog_active:1                                                  #复制缓冲区状态
repl_backlog_size:1048576                                              #复制缓冲区的大小(以字节为单位)
repl_backlog_first_byte_offset:63498567                                #复制缓冲区的偏移量,标识当前缓冲区可用范围
repl_backlog_histlen:1048576                                           #复制缓冲区中数据的大小(以字节为单位)#如果是从节点,会有以下状态:
master_host:192.168.163.132                                      #Master IP
master_port:6379                                                 #Master Port
master_link_status:up                                            #Master的连接状态(up/down)
master_last_io_seconds_ago:8                                     #最近一次主从交互之后的秒数
master_sync_in_progress:0                                        #表示从服务器是否一直在与主服务器进行同步
slave_repl_offset:64547142                                       #复制偏移量
slave_priority:100                                               #从服务器的优先级
slave_read_only:1                                                #从服务是否只读#如果正在进行SYNC操作,会有以下状态:
master_sync_left_bytes:                                          #同步完成前剩余的字节数
master_sync_last_io_seconds_ago:                                 #自SYNC操作以来最后一次传输I/O经过的秒数#如果主服务器和副本服务器之间的链接断开,会有以下状态:
master_link_down_since_seconds:                                  #主从连接断开后经过的秒数
connected_slaves:                                                #已连从的数量#如果服务器配置(的Redis 5)有min-slaves-to-write(或以min-replicas-to-write)指令,会有以下状态:
min_slaves_good_slaves:                                          #当前认为良好的副本数,对于每个副本,添加以下行:
slaveXXX: id, IP address, port, state, offset, lag      # CPU
used_cpu_sys:133.908000                                          #消耗的系统CPU
used_cpu_user:70.692000                                          #消耗的用户CPU
used_cpu_sys_children:0.016000                                   #后台进程占用的系统CPU
used_cpu_user_children:0.044000                                  #后台进程占用的用户CPU# Commandstats   #提供基于命令类型的统计信息,包括调用次数,这些命令消耗的总CPU时间以及每个命令执行消耗的平均CPU时间。
cmdstat_cluster:calls=33169,usec=3835426,usec_per_call=115.63
cmdstat_keys:calls=3,usec=7828,usec_per_call=2609.33
cmdstat_get:calls=1096046,usec=914358,usec_per_call=0.83
cmdstat_set:calls=872138,usec=984030,usec_per_call=1.13
cmdstat_monitor:calls=6,usec=4,usec_per_call=0.67
cmdstat_replconf:calls=74181,usec=103173,usec_per_call=1.3
cmdstat_client:calls=11,usec=2812,usec_per_call=255.64
cmdstat_flushdb:calls=2,usec=23058,usec_per_call=11529.00
cmdstat_dbsize:calls=22,usec=27,usec_per_call=1.23
cmdstat_auth:calls=10883,usec=19716,usec_per_call=1.81
cmdstat_info:calls=14,usec=6987,usec_per_call=499.07
cmdstat_config:calls=9,usec=5819,usec_per_call=646.56
cmdstat_psync:calls=15,usec=4288,usec_per_call=285.87
cmdstat_command:calls=16,usec=98434,usec_per_call=6152.12# Cluster
cluster_enabled:1                              #是否开启集群模式# Keyspace   #键空间部分提供有关每个数据库的统计信息。 统计信息是键的数量,以及带有到期时间的键的数量。
db0:keys=2,expires=0,avg_ttl=0
  • 参考资料
    Redis 的info命令信息解释

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/633752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php 源码解读函数解释

zend_hash_num_elements获取一个哈希表中元素的数量扩展Z_TYPE获取变量类型ZEND_HASH_FOREACH_VAL_IND对比第一个参数是否在第二个map里类型array_in()

Pytest参数化-你不知道的使用技巧

前言 unittest单元测试框架使用DDT进行数据驱动测试&#xff0c;那么身为功能更加强大且更加灵活的Pytest框架怎么可能没有数据驱动的概念呢&#xff1f;其实Pytest是使用pytest.mark.parametrize装饰器来实现数据驱动测试的&#xff0c;那么今天我们就简单来说说在它是如何进…

[通知]rust跟我学八:获取指定目录下的所有文件全路径 已上线

大家好&#xff0c;我是带剑书生&#xff0c;开源库get_local_info的作者。目前我的付费专栏已经上线&#xff0c;用于介绍在实现get_local_info过程中&#xff0c;遇到该问题所使用的解决方法&#xff0c;喜欢的朋友可以去订阅了&#xff0c;19.9元&#xff0c;非常便宜的价格…

华为/华三设备巡检常用命令分享

驻场的网络工程师经常会开展网络设备的月度巡检、季度巡检&#xff0c;给各位朋友分享我平时在巡检过程中经常用到的巡检命令&#xff0c;华为华三的设备大部分可以通用。 一、查看硬件状态、IOS版本信息检查 display clock #系统时间 display version #查看版本信息&#…

shopee店铺选品规划:如何在Shopee平台上进行店铺选品规划

在如今激烈竞争的电商市场上&#xff0c;一个有效的选品策略对于卖家来说至关重要。在Shopee平台上进行店铺选品规划时&#xff0c;卖家可以遵循以下步骤来制定一个成功的选品策略。 先给大家推荐一款shopee知虾数据运营工具知虾免费体验地址&#xff08;复制浏览器打开&#…

高德地图绘制 GPX 数据路线

高德地图绘制 GPX 数据路线 .gpx 文件是在分享地图路径时最常用的一种数据格式。里面包含了路径点的相关信息&#xff0c;每个点还有可能拥有自己的时间、距离等信息。 一直想自己导出自己的 gpx 路线&#xff0c;然后导入到地图中查看这个路线的具体信息&#xff0c;今天细致…

CentOS 7上安装Anaconda 详细教程

目录 1. 下载Anaconda安装脚本2. 校验数据完整性&#xff08;可选&#xff09;3. 运行安装脚本4. 遵循安装指南5. 选择安装位置6. 初始化Anaconda7. 激活安装8. 测试安装9. 更新Anaconda10. 使用Anaconda 1. 下载Anaconda安装脚本 首先需要从Anaconda的官方网站下载最新的Anac…

千万不要在方法上打断点!千万不要!

我上周遇到了一个莫名其妙的搞心态的问题&#xff0c;浪费了我好几个小时。 气死我了&#xff0c;拿这几个小时来敲&#xff08;摸&#xff09;代&#xff08;摸&#xff09;码&#xff08;鱼&#xff09;不香吗&#xff1f; 主要是最后问题的解决方式也让我特别的无语&#…

C#设计模式教程(2):工厂方法模式

工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 C# 代码实现 以下是C#中实现工厂方法模式的一个简单示例: 首先,定义一个抽象产品(Product)类,它是所有具体产品的基类。 pu…

2024年1月18日

1 vue3相较于vue2的优点 性能提升&#xff1a;Vue3通过优化虚拟DOM和渲染过程&#xff0c;提高了性能。它的虚拟DOM更轻量级&#xff0c;渲染过程更快&#xff0c;并且引入了编译时优化&#xff0c;使得代码体积更小&#xff0c;加载更快。例如&#xff0c;初次渲染快55%&#…

Redis实现好友功能

好友功能是目前社交场景的必备功能之一&#xff0c;一般好友相关的功能包含有&#xff1a;关注/取关、我&#xff08;他&#xff09;的关注、我&#xff08;他&#xff09;的粉丝、共同关注等这样一些功能。 1.关注和取关 1.设计思路 总体思路我们采用MySQL Redis的方式结合…

【Ant Design of Vue】Modal.confirm无法关闭的bug

一、问题 在使用 Ant Design Vue 的 Modal.confirm 确认框时&#xff0c;出现了点击取消和确定后 Modal.confirm 确认框无法关闭的问题 二、代码 代码完全是 copy 的官网的代码&#xff0c;但是 copy 到本地后就会出现上述问题 <template><a-button click"sho…

48-DOM节点,innerHTML,innerText,outerHTML,outerText,静态获取,单机click,cssText

1.DOM基础 Document Object Module,文档对象模型,window对象,document文档,都可以获取和操作 1)文档节点 2)属性节点(标签内的属性href,src) 3)文本节点(标签内的文字) 4)注释节点 5)元素节点(标签) 2.获取元素节点 2.1通过标签名获取getElementsByTagName() …

Python中HTTP代理的配置和使用

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中配置和使用HTTP代理。 一、配置HTTP代理…

Unity 编辑器篇|(十一)Gizmos (全面总结 | 建议收藏)

目录 1. 前言2 参数总览3 Gizmos绘制3.1 立方体&#xff1a;DrawCube3.2 视锥&#xff1a;DrawFrustum3.3 贴图&#xff1a;DrawGUITexture3.4 图标&#xff1a;DrawIcon3.5 线段&#xff1a;DrawLine3.6 网格&#xff1a;DrawMesh3.7 射线&#xff1a;DrawRay3.8 球体&#xf…

寒假刷题-递归与递推

寒假刷题 92. 递归实现指数型枚举 解法1递归 使用递归对每一个坑位进行选择&#xff0c;每个坑位有两种选择&#xff0c;填或者不填&#xff0c;使用st数组来记录每个坑位的状态&#xff0c;u来记录已经有多少坑位有了选择。 每个坑位有2钟选择&#xff0c;n个坑位的复杂度就…

Java根据二叉树的先序和后序得到二叉树

一般情况下&#xff0c;我们会根据先序和后序写出二叉树&#xff0c;但是用代码怎末写呢&#xff1f; 例如&#xff1a; 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二…

pdf怎么查看?6个不能错过的软件!

PDF&#xff0c;作为一种常用的文件格式&#xff0c;已经成为了我们工作、学习中的必备工具。然而&#xff0c;对于许多新手来说&#xff0c;如何查看和编辑PDF文件却是一个不小的挑战。今天&#xff0c;我们就来为大家详细介绍一下如何查看和编辑PDF文件&#xff0c;以及一些必…

01_泛型

文章目录 泛型泛型类泛型接口泛型方法泛型的通配泛型的擦除 泛型 参数化类型。 泛型的好处&#xff1a; 省去了类型强转的麻烦&#xff08;比如&#xff1a;Object类、interface接口等都需要类型强转&#xff09;将运行期遇到的问题转移到了编译期 泛型类 所谓泛型类, 就是…

R语言【cli】——ansi_columns():把字符向量格式化为多个列

Package cli version 3.6.0 Description 这个函数有助于ANSI样式字符串的多列输出。它可以很好地与boxx()一起工作。 Usage ansi_columns(text,width console_width(),sep " ",fill c("rows", "cols"),max_cols 4,align c("left&quo…