利用redis统计分布式集群中接口缓存命中情况
2018-09-21 20:02
585 查看
接口使用了缓存,想看看缓存命中率,到底提升了多少了?固想到做个统计方法,单机情况下使用 AtomicImteger,考虑到分布式集群中多台服务器调用,所以考虑使用redis进行统计 原来的想法很简单用分布式锁 控制每次只有一个线程进行操作,但是需要进行获取数据 数据+1 再进行数据放入 三步过程 没有获取到锁的线程 进行等待后重试获取锁 但是此种情况会出现某些线程饿死,为了防止线程饿死又要做成 重试次数限制 超过次数就放弃统计 这种统计出来会使的大体趋势是正确的,数字会有偏差.机制需要考虑 ,就一个统计方法不想废太多脑细胞,所以pass此方案 看到redis自己有RedisAtomicLong 这个所以考虑使用这个去做.
直接甩代码
本人的逻辑是只统计一天所以设置超时时间为24小时,key也加了日期区分
具体使用用法可以百度RedisAtomicLong ,本文只是浅显的使用,若有不正确地方,希望大家不吝赐教.
直接甩代码
/** * * @Title: incrementAndGet * @Description: 计数+1 * @param @param redisTemplate * @param @param key 设定文件 * @return void 返回类型 * @throws */ private static void incrementAndGet (String key) { ExecutorService es = Executors.newFixedThreadPool(1); try { es.execute(new Runnable() { @SuppressWarnings("unchecked") @Override public void run() { boolean flag = false; RedisTemplate<Serializable, Serializable> redisTemplate =(RedisTemplate<Serializable, Serializable>) ApplicationContextHolder.getBean("redisTemplate"); //判断存在key if(!CacheUtil.getCache().exists(key)){ flag = true; } RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory()); //不存在设置过期时间 if(flag){ counter.expire(DataConstants.GOOD_TTL, TimeUnit.SECONDS); } counter.incrementAndGet(); } }); } finally { es.shutdown(); } } /** * * @Title: countAll * @Description: 获取计数 * @param @param redisTemplate * @param @return 设定文件 * @return long 返回类型 * @throws */ @SuppressWarnings("unchecked") private static String countAll(String key) { RedisTemplate<Serializable, Serializable> redisTemplate = (RedisTemplate<Serializable, Serializable>) ApplicationContextHolder.getBean("redisTemplate"); RedisAtomicLong counter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory()); return String.valueOf(counter.get()); }
本人的逻辑是只统计一天所以设置超时时间为24小时,key也加了日期区分
具体使用用法可以百度RedisAtomicLong ,本文只是浅显的使用,若有不正确地方,希望大家不吝赐教.
相关文章推荐
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- 分布式缓存技术redis学习(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- PHP 利用redis 做统计缓存mysql的压力
- 使用redis实现分布式锁,可以解决集群中需要单例的情况
- 分布式缓存技术redis学习系列(八)——JedisCluster源码解读:集群初始化、slot(槽)的分配、值的存取
- Net分布式系统之五:C#使用Redis集群缓存
- Redis官网——如何利用Redis做服务器集群的分布式锁
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
- ssm springboot springcloud redis shiro dubbo 分布式集群 支付结算等架构教程视频
- 分布式缓存Redis使用心得
- 分布式缓存技术redis学习(一)——redis简介以及linux上的安装
- 分布式缓存Redis之bitmap、setbit
- 用REDIS实现分布式缓存
- 高性能网站架构缓存——redis集群