Redis Zset實現統計模組

2022-10-08 18:12:15 字數 2885 閱讀 1642

檢視總體配置的數量以及活躍的數量

檢視每一條配置的使用量

直接在mysql中count即可得到

實現方式有很多,經過選擇之後,選取了用redis的zset來實現

使用hashmap, 當獲取到配置的使用,那配置的key獲取value加1即可

可能存在的問題,併發問題,集群中每個節點的資料怎麼聚合

在mysql的配置表中增加乙個使用次數字段,當每次獲取配置時,更新此欄位

可能存在的問題,效能問題,頻繁更新必然會影響mysql的效能,這個功能相比提供配置來說,算作是乙個輔助的、可有可無的功能,不能影響主要的業務

redis儲存效能比較高,可以使用string的incr或者zset的incr命令對執行id的配置進行計數,我選擇了zset, 原因是查詢的時候方便聚合

以下**是從線上**中排除業務相關**的示例

經典的三層結構

儲存層,也就是dao,主要使用redistemplate和redis進行互動

服務層,也就是service, 主要用來實現具體的業務

控制層,業績是controller, 主要用來通過http介面收集資料和展示資料

覆蓋收集資料,永久儲存不過期,用來收集儲存配置總數類似的資料

/**

* 覆蓋收集資料,永久儲存

* * @param key 資料分類(類似mysql表)

* @param metrictocount 指標-數量

*/public void collect( string key, mapmetrictocount ) );

}

按天儲存,並儲存30天,用來收集每條配置用量的資料

/**

* 按天增量收集資料,儲存30天

* * @param key 資料分類(類似mysql表)

* @param metrictocount 指標-數量

*/public void collectdaily( string key, mapmetrictocount ) );

long expire = redistemplate.getexpire( finalkey );

if( expire != null && expire == -1 )

}

查詢單個資料

private mapquerydirectly( string key )

}} return rs;

} /**

* 根據資料分類查詢資料

* * @param key 資料分類

* @return 指標-數量

*/public mapquery( string key )

查詢時間聚合資料, 其中使用redis管道操作來提高效能

/**

* 根據資料分類和指定時間段查詢資料

* * @param key 資料分類

* @param start 開始時間

* @param end 結束時間

* @return 指標-數量

*/public map> querytimerange( string key, localdate start, localdate end )

return null;

} );

for( int i = 0; i < keys.size(); i++ )

}rs.put( keys.get( i ).tostring(), metrictocount );

} return rs;

}

這裡的**是和業務相關的,因為不方便展示線上的**,所以稍微調整了一下

收集和展示系統資訊指標

@postconstruct

public void collecteveryconfignum()

public listconfigstat()

return rs;

}

統計乙個月內某個配置的使用量

public maplastmonthusecount(string key) 

}return rs;

} catch (exception e)

}

按天收集特定指標, 可以用於每條配置的使用量統計,也可以用做其他,例如,前端頁面訪問量統計

public void collect(string key, mapmetrictocount)
主要是通過對serivce**的呼叫,對外層提供收集和展示服務,在這就不展示了,可以到文尾的原始碼中檢視

收集好的資料在redis中是這樣儲存的

127.0.0.1:6379> keys *

1) "cc_statistic:2022-03-08:api"

2) "cc_statistic:system_info"

127.0.0.1:6379> zrange cc_statistic:system_info 0 -1 withscores

1) "max_mem"

2) "-477102080"

3) "cpu_num"

4) "8"

5) "free_mem"

6) "349881120"

7) "jvm_mem"

8) "376963072"

前端的展示如圖

github 中的redisstatistic模組是此文章的原始碼

Redis Zset實現延時佇列

前言 本篇博文意在使用redis模擬實現延時佇列.redis中的有序集合zset可以實現延時佇列,zset可以看作是縮小版的redis,可以看作是用來儲存鍵值對的集合,是集合名 k v的結構,在zset中,會按照score進行排序。有序集合中鍵值對的鍵被稱為成員,值被稱為分值,分值必須為浮點數。命令...

Redis Zset實現排行榜功能

使用redis 的zset資料結構 首先搞清楚zset 新增儲存的命令 對理解和設計排行榜起到至關重要的作用 zadd key value1 member1 value2 member2.key string型別 value 數值型別 member string型別 zset底層根據value自動進...

Redis zset實現多條件排序思路

某應用使用者排行規則 第一排行維度 使用者積分 積分越高,排行越靠前 第二排行維度 使用者是否為會員 積分相同時,會員排前面 第三排行維度 使用者最近一次登入時間 前兩個維度值相同時,使用者最後一次登入時間越近越靠前 以下是原始資料 使用者 積分 是否會員 最近一次登入時間戳 a 100 1 161...