@@ -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