|
13 | 13 |
|
14 | 14 | public class SiteStatsDaoRedisImpl implements SiteStatsDao { |
15 | 15 |
|
16 | | - private final int weekSeconds = 60 * 60 * 24 * 7; |
| 16 | + private static final int weekSeconds = 60 * 60 * 24 * 7; |
17 | 17 | private final JedisPool jedisPool; |
18 | 18 | private final CompareAndUpdateScript compareAndUpdateScript; |
19 | 19 |
|
@@ -47,7 +47,7 @@ public void update(MeterReading reading) { |
47 | 47 | ZonedDateTime day = reading.getDateTime(); |
48 | 48 | String key = RedisSchema.getSiteStatsKey(siteId, day); |
49 | 49 |
|
50 | | - updateBasic(jedis, key, reading); |
| 50 | + updateOptimized(jedis, key, reading); |
51 | 51 | } |
52 | 52 | } |
53 | 53 |
|
@@ -81,6 +81,16 @@ private void updateBasic(Jedis jedis, String key, MeterReading reading) { |
81 | 81 | // Challenge #3 |
82 | 82 | private void updateOptimized(Jedis jedis, String key, MeterReading reading) { |
83 | 83 | // START Challenge #3 |
| 84 | + Transaction transaction = jedis.multi(); |
| 85 | + String reportingTime = ZonedDateTime.now(ZoneOffset.UTC).toString(); |
| 86 | + transaction.hset(key, SiteStats.reportingTimeField, reportingTime); |
| 87 | + transaction.hincrBy(key, SiteStats.countField, 1); |
| 88 | + transaction.expire(key, weekSeconds); |
| 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(); |
84 | 94 | // END Challenge #3 |
85 | 95 | } |
86 | 96 |
|
|
0 commit comments