利用redis統計分佈式集羣中接口緩存命中情況

接口使用了緩存,想看看緩存命中率,到底提升了多少了?固想到做個統計方法,單機情況下使用 AtomicImteger,考慮到分佈式集羣中多臺服務器調用,所以考慮使用redis進行統計 原來的想法很簡單用分佈式鎖  控制每次只有一個線程進行操作,但是需要進行獲取數據 數據+1 再進行數據放入 三步過程 沒有獲取到鎖的線程 進行等待後重試獲取鎖 但是此種情況會出現某些線程餓死,爲了防止線程餓死又要做成 重試次數限制 超過次數就放棄統計 這種統計出來會使的大體趨勢是正確的,數字會有偏差.機制需要考慮 ,就一個統計方法不想廢太多腦細胞,所以pass此方案 看到redis自己有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 ,本文只是淺顯的使用,若有不正確地方,希望大家不吝賜教.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章