| 229 | } |
| 230 | |
| 231 | @Override |
| 232 | public void clear() { |
| 233 | long start = System.nanoTime(); |
| 234 | try (Jedis resource = jedisPool.getResource()) { |
| 235 | ScanParams params = new ScanParams(); |
| 236 | params.match(cacheKey + ":*"); |
| 237 | |
| 238 | String next; |
| 239 | byte[] nextCursor = CURSOR_0_BYTES; |
| 240 | do { |
| 241 | ScanResult<byte[]> scanResult = resource.scan(nextCursor, params); |
| 242 | List<byte[]> keys = scanResult.getResult(); |
| 243 | nextCursor = scanResult.getCursorAsBytes(); |
| 244 | |
| 245 | if (!keys.isEmpty()) { |
| 246 | byte[][] raw = new byte[keys.size()][]; |
| 247 | for (int i = 0; i < keys.size(); i++) { |
| 248 | raw[i] = keys.get(i); |
| 249 | } |
| 250 | resource.del(raw); |
| 251 | } |
| 252 | next = SafeEncoder.encode(nextCursor); |
| 253 | } while (!next.equals("0")); |
| 254 | metricClear.addSinceNanos(start); |
| 255 | } catch (Exception e) { |
| 256 | errorOnWrite(e); |
| 257 | } |
| 258 | } |
| 259 | |
| 260 | private byte[][] keysAsBytes(Collection<Object> keys) { |
| 261 | byte[][] raw = new byte[keys.size()][]; |