22
33import io .ebean .cache .ServerCache ;
44import io .ebean .cache .ServerCacheStatistics ;
5+ import io .ebean .meta .MetricType ;
6+ import io .ebean .metric .MetricFactory ;
7+ import io .ebean .metric .TimedMetric ;
58import io .ebean .redis .encode .Encode ;
6- import io .ebeaninternal .metric .MetricFactory ;
79import redis .clients .jedis .Jedis ;
810import redis .clients .jedis .JedisPool ;
911import redis .clients .jedis .ScanParams ;
@@ -22,18 +24,34 @@ class RedisCache implements ServerCache {
2224 private static final String CURSOR_0 = "0" ;
2325 private static final byte [] CURSOR_0_BYTES = SafeEncoder .encode (CURSOR_0 );
2426
25- // MetricFactory.get();
26-
2727 private final JedisPool jedisPool ;
2828 private final String cacheKey ;
2929 private final Encode keyEncode ;
3030 private final Encode valueEncode ;
3131
32+ private final TimedMetric metricGet ;
33+ private final TimedMetric metricGetAll ;
34+ private final TimedMetric metricPut ;
35+ private final TimedMetric metricPutAll ;
36+ private final TimedMetric metricRemove ;
37+ private final TimedMetric metricRemoveAll ;
38+ private final TimedMetric metricClear ;
39+
3240 RedisCache (JedisPool jedisPool , String cacheKey , Encode keyEncode , Encode valueEncode ) {
3341 this .jedisPool = jedisPool ;
3442 this .cacheKey = cacheKey ;
3543 this .keyEncode = keyEncode ;
3644 this .valueEncode = valueEncode ;
45+
46+ String prefix = "ebean.l2cache." + cacheKey ;
47+
48+ metricGet = MetricFactory .get ().createTimedMetric (MetricType .L2 , prefix + ".get" );
49+ metricGetAll = MetricFactory .get ().createTimedMetric (MetricType .L2 , prefix + ".getAll" );
50+ metricPut = MetricFactory .get ().createTimedMetric (MetricType .L2 , prefix + ".put" );
51+ metricPutAll = MetricFactory .get ().createTimedMetric (MetricType .L2 , prefix + ".putAll" );
52+ metricRemove = MetricFactory .get ().createTimedMetric (MetricType .L2 , prefix + ".remove" );
53+ metricRemoveAll = MetricFactory .get ().createTimedMetric (MetricType .L2 , prefix + ".removeAll" );
54+ metricClear = MetricFactory .get ().createTimedMetric (MetricType .L2 , prefix + ".clear" );
3755 }
3856
3957 private byte [] key (Object id ) {
@@ -57,6 +75,7 @@ private Object valueDecode(byte[] data) {
5775 @ Override
5876 public Map <Object , Object > getAll (Set <Object > keys ) {
5977
78+ long start = System .nanoTime ();
6079 Map <Object , Object > map = new LinkedHashMap <>();
6180
6281 List <Object > keyList = new ArrayList <>(keys );
@@ -65,28 +84,35 @@ public Map<Object, Object> getAll(Set<Object> keys) {
6584 for (int i = 0 ; i < keyList .size (); i ++) {
6685 map .put (keyList .get (i ), valueDecode (valsAsBytes .get (i )));
6786 }
87+ metricGetAll .add ((System .nanoTime () - start ) / 1000L , keyList .size ());
6888 return map ;
6989 }
7090 }
7191
7292
7393 @ Override
7494 public Object get (Object id ) {
95+ long start = System .nanoTime ();
7596 try (Jedis resource = jedisPool .getResource ()) {
76- return valueDecode (resource .get (key (id )));
97+ Object val = valueDecode (resource .get (key (id )));
98+ metricGet .add ((System .nanoTime () - start ) / 1000L );
99+ return val ;
77100 }
78101 }
79102
80103
81104 @ Override
82105 public void put (Object id , Object value ) {
106+ long start = System .nanoTime ();
83107 try (Jedis resource = jedisPool .getResource ()) {
84108 resource .set (key (id ), value (value ));
109+ metricPut .add ((System .nanoTime () - start ) / 1000L );
85110 }
86111 }
87112
88113 @ Override
89114 public void putAll (Map <Object , Object > keyValues ) {
115+ long start = System .nanoTime ();
90116 try (Jedis resource = jedisPool .getResource ()) {
91117 byte [][] raw = new byte [keyValues .size () * 2 ][];
92118 int pos = 0 ;
@@ -95,20 +121,25 @@ public void putAll(Map<Object, Object> keyValues) {
95121 raw [pos ++] = value (entry .getValue ());
96122 }
97123 resource .mset (raw );
124+ metricPutAll .add ((System .nanoTime () - start ) / 1000L , keyValues .size ());
98125 }
99126 }
100127
101128 @ Override
102129 public void remove (Object id ) {
130+ long start = System .nanoTime ();
103131 try (Jedis resource = jedisPool .getResource ()) {
104132 resource .del (key (id ));
133+ metricRemove .add ((System .nanoTime () - start ) / 1000L );
105134 }
106135 }
107136
108137 @ Override
109138 public void removeAll (Set <Object > keys ) {
139+ long start = System .nanoTime ();
110140 try (Jedis resource = jedisPool .getResource ()) {
111141 resource .del (keysAsBytes (keys ));
142+ metricRemoveAll .add ((System .nanoTime () - start ) / 1000L , keys .size ());
112143 }
113144 }
114145
@@ -123,7 +154,7 @@ private byte[][] keysAsBytes(Collection<Object> keys) {
123154
124155 @ Override
125156 public void clear () {
126-
157+ long start = System . nanoTime ();
127158 try (Jedis resource = jedisPool .getResource ()) {
128159
129160 ScanParams params = new ScanParams ();
@@ -144,8 +175,9 @@ public void clear() {
144175
145176 next = SafeEncoder .encode (nextCursor );
146177 } while (!next .equals ("0" ));
147- }
148178
179+ metricClear .add ((System .nanoTime () - start ) / 1000L );
180+ }
149181 }
150182
151183 @ Override
0 commit comments