Skip to content

Commit a262692

Browse files
committed
Optimized and correct implementation of update() for SiteStatsDaoRedisImpl.java. 1. Use Transaction wherever you can. 2. Perform the compare-and-update operations using Lua. The file CompareAndUpdateScript.java contains everything you need.
1 parent b8e1812 commit a262692

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

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

Lines changed: 15 additions & 1 deletion
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

@@ -81,6 +81,20 @@ private void updateBasic(Jedis jedis, String key, MeterReading reading) {
8181
// Challenge #3
8282
private void updateOptimized(Jedis jedis, String key, MeterReading reading) {
8383
// START Challenge #3
84+
String reportingTime = ZonedDateTime.now(ZoneOffset.UTC).toString();
85+
86+
Transaction t = jedis.multi();
87+
CompareAndUpdateScript script = new CompareAndUpdateScript(jedisPool);
88+
89+
t.hset(key, SiteStats.reportingTimeField, reportingTime);
90+
t.hincrBy(key, SiteStats.countField, 1);
91+
t.expire(key, weekSeconds);
92+
93+
script.updateIfGreater(t, key, SiteStats.maxWhField, reading.getWhGenerated());
94+
script.updateIfLess(t, key, SiteStats.minWhField, reading.getWhGenerated());
95+
script.updateIfGreater(t, key, SiteStats.maxCapacityField, getCurrentCapacity(reading));
96+
97+
t.exec();
8498
// END Challenge #3
8599
}
86100

0 commit comments

Comments
 (0)