方案二说明:
- 提供一个数据库Binlog订阅服务,并解析修改日志;
- 服务获取修改数据,并向Redis服务发送消息;
- Redis数据进行修改,类似MySQL的主从同步机制;
总结描述
分布式架构中,缓存层面的基本需求就是提高响应速度,不断优化,追求数据库和Redis缓存的数据快速一致性,从提供的各种方案中都可以看出,这也在增加缓存层面处理的复杂性,架构逻辑复杂,就容易导致程序错误,所以针对业务选择合理的处理逻辑,这点很关键 。
三、缓存监控1、Redis服务监控通过info命令查看Redis服务的参数信息,可以通过传参查看指定分类配置 。通过config..set设置具体配置参数 。例如:
@Overridepublic Properties info(String var) {if (StringUtils.isEmpty(var)){return redisTemplate.getRequiredConnectionFactory().getConnection().info();}return redisTemplate.getRequiredConnectionFactory().getConnection().info(var);}
传参说明:- memory:内存消耗相关信息
- server:有关Redis服务器的常规信息
- clients:客户端连接部分
- stats:一般统计
- cpu:CPU消耗统计信息
@RestControllerpublic class MonitorController {@Resourceprivate RedisService redisService ;private static final String[] monitorParam = new String[]{"memory","server","clients","stats","cpu"} ;@GetMapping("/monitor")public List<MonitorEntity> monitor (){List<MonitorEntity> monitorEntityList = new ArrayList<>() ;for (String param:monitorParam){Properties properties = redisService.info(param) ;MonitorEntity monitorEntity = new MonitorEntity () ;monitorEntity.setMonitorParam(param);monitorEntity.setProperties(properties);monitorEntityList.add(monitorEntity);}return monitorEntityList ;}}
通过上述参数组合,把Redis相关配置参数打印出来,然后可视化输出,俨然一副高端的感觉 。配置参数说明:
这里只对两个参数说明一下,计算命中率的关键信息:
- keyspace_misses:查找缓存Key失败的次数;
- keyspace_hits:查找缓存Key命中的次数;
2、LRU算法说明Redis的数据是放在内存中的,所以速度快,自然也就受到内存大小的限制,如果内存使用超过配置,Redis有不同的回收处理策略 。
内存模块参数:maxmemory_policy
- noenviction:不回收数据,查询直接返回错误,但可以执行删除;
- allkeys-lru:从所有的数据中挑选最近最少使用的数据淘汰;
- volatile-lru:已设置过期时间的数据中挑选最近最少使用的数据淘汰;
- allkeys-random:从所有数据中任意选择数据淘汰;
- volatile-random:从已设置过期时间的数据中任意选择数据淘汰;
- volatile-ttl:从已设置过期时间的数据中挑选将要过期的数据淘汰;
【缓存管理模式,监控和内存回收策略】
推荐阅读
- 「go-zero」 防止缓存击穿之进程内共享调用
- 250个点位的监控工程,后端合适选什么设备?
- 网上搜索会被监控吗?
- 监控工具之Cacti,搭建和使用
- 缓存只会用!缓存架构没听过?分布式多级缓存大瓶装,你拎包带走
- 运维小工具:Mysql库TPS,QPS实时监控脚本
- Windows 10默认已禁用USB驱动器缓存 1903版本起无需点击安全弹出
- 交换机性能、网络带宽对监控画面有哪些影响?
- Java性能调优:JVM性能监控常用方法
- Windows 10默认已禁用USB驱动器缓存:不用手动“弹出”