Skip to content

Commit c067487

Browse files
committed
Implement Challenge redislabs-training#3
1 parent 0430b6c commit c067487

File tree

2 files changed

+15
-3
lines changed

2 files changed

+15
-3
lines changed

src/main/java/com/redislabs/university/RU102J/dao/MetricDaoRedisZsetImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ private void insertMetric(Jedis jedis, long siteId, double value, MetricUnit uni
5151
String metricKey = RedisSchema.getDayMetricKey(siteId, unit, dateTime);
5252
Integer minuteOfDay = getMinuteOfDay(dateTime);
5353
jedis.zadd(metricKey, minuteOfDay, new MeasurementMinute(value, minuteOfDay).toString());
54+
jedis.expire(metricKey, METRIC_EXPIRATION_SECONDS);
5455
}
5556

5657
/**

src/main/java/com/redislabs/university/RU102J/dao/SiteStatsDaoRedisImpl.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public void update(MeterReading reading) {
4747
ZonedDateTime day = reading.getDateTime();
4848
String key = RedisSchema.getSiteStatsKey(siteId, day);
4949

50-
updateBasic(jedis, key, reading);
50+
updateOptimized(jedis, key, reading);
5151
}
5252
}
5353

@@ -80,8 +80,19 @@ private void updateBasic(Jedis jedis, String key, MeterReading reading) {
8080

8181
// Challenge #3
8282
private void updateOptimized(Jedis jedis, String key, MeterReading reading) {
83-
// START Challenge #3
84-
// END Challenge #3
83+
String reportingTime = ZonedDateTime.now(ZoneOffset.UTC).toString();
84+
try(Transaction transaction = jedis.multi()) {
85+
transaction.hset(key, SiteStats.reportingTimeField, reportingTime);
86+
transaction.hincrBy(key, SiteStats.countField, 1);
87+
transaction.expire(key, weekSeconds);
88+
89+
compareAndUpdateScript.updateIfGreater(transaction, key, SiteStats.maxWhField, reading.getWhGenerated());
90+
compareAndUpdateScript.updateIfLess(transaction, key, SiteStats.minWhField, reading.getWhGenerated());
91+
compareAndUpdateScript.updateIfGreater(transaction, key, SiteStats.maxCapacityField, getCurrentCapacity(reading));
92+
93+
transaction.exec();
94+
}
95+
8596
}
8697

8798
private Double getCurrentCapacity(MeterReading reading) {

0 commit comments

Comments
 (0)