diff --git a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java index c3abc3cdf54c9f2998c017b4a77bb2c5555d6906..1c71e7c0725d984bcfcb60f91bc9174cb44ed7e4 100644 --- a/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java +++ b/redisson/src/main/java/org/redisson/RedissonLocalCachedMap.java @@ -18,9 +18,7 @@ package org.redisson; import java.io.IOException; import java.io.Serializable; import java.math.BigDecimal; -import java.util.AbstractCollection; import java.util.AbstractMap; -import java.util.AbstractSet; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -29,7 +27,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.NoSuchElementException; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -680,266 +677,6 @@ public class RedissonLocalCachedMap extends RedissonMap implements R msgEncoded, invalidateEntryOnChange); } - @Override - public Set keySet(String pattern) { - return new KeySet(pattern); - } - - @Override - public Collection values(String keyPattern) { - return new Values(keyPattern); - } - - @Override - public Set> entrySet(String keyPattern) { - return new EntrySet(keyPattern); - } - - private Iterator> cacheEntrySetIterator() { - final Iterator> iter = cache.entrySet().iterator(); - - return new Iterator>() { - - @Override - public boolean hasNext() { - return iter.hasNext(); - } - - @Override - public java.util.Map.Entry next() { - Map.Entry entry = iter.next(); - return new AbstractMap.SimpleEntry(entry.getValue().getKey(), entry.getValue().getValue()); - } - - @Override - public void remove() { - iter.remove(); - } - - }; - } - - private Iterator cacheKeySetIterator() { - final Iterator iter = cache.values().iterator(); - - return new Iterator() { - - @Override - public boolean hasNext() { - return iter.hasNext(); - } - - @Override - public K next() { - CacheValue value = iter.next(); - return (K) value.getKey(); - } - - @Override - public void remove() { - iter.remove(); - } - - }; - } - - - final class KeySet extends AbstractSet { - - private final String pattern; - - public KeySet(String pattern) { - this.pattern = pattern; - } - - @Override - public Iterator iterator() { - return new CompositeIterable(cacheKeySetIterator(), RedissonLocalCachedMap.super.keySet(pattern).iterator()) { - - @Override - boolean isCacheContains(Object object) { - CacheKey cacheKey = toCacheKey(object); - return cache.containsKey(cacheKey); - } - - }; - } - - @Override - public boolean contains(Object o) { - return RedissonLocalCachedMap.this.containsKey(o); - } - - @Override - public boolean remove(Object o) { - return RedissonLocalCachedMap.this.remove(o) != null; - } - - @Override - public int size() { - return RedissonLocalCachedMap.this.size(); - } - - @Override - public void clear() { - RedissonLocalCachedMap.this.clear(); - } - - } - - final class Values extends AbstractCollection { - - private final String keyPattern; - - public Values(String keyPattern) { - this.keyPattern = keyPattern; - } - - @Override - public Iterator iterator() { - final Iterator> iter = RedissonLocalCachedMap.this.entrySet(keyPattern).iterator(); - return new Iterator() { - - @Override - public boolean hasNext() { - return iter.hasNext(); - } - - @Override - public V next() { - return iter.next().getValue(); - } - - @Override - public void remove() { - iter.remove(); - } - }; - } - - @Override - public boolean contains(Object o) { - return RedissonLocalCachedMap.this.containsValue(o); - } - - @Override - public int size() { - return RedissonLocalCachedMap.this.size(); - } - - @Override - public void clear() { - RedissonLocalCachedMap.this.clear(); - } - - } - - final class EntrySet extends AbstractSet> { - - private final String keyPattern; - - public EntrySet(String keyPattern) { - this.keyPattern = keyPattern; - } - - public final Iterator> iterator() { - return new CompositeIterable>(cacheEntrySetIterator(), RedissonLocalCachedMap.super.entrySet(keyPattern).iterator()) { - - @Override - boolean isCacheContains(Map.Entry entry) { - CacheKey cacheKey = toCacheKey(entry.getKey()); - return cache.containsKey(cacheKey); - } - - }; - } - - public final boolean contains(Object o) { - if (!(o instanceof Map.Entry)) - return false; - Map.Entry e = (Map.Entry) o; - Object key = e.getKey(); - V value = get(key); - return value != null && value.equals(e); - } - - public final boolean remove(Object o) { - if (o instanceof Map.Entry) { - Map.Entry e = (Map.Entry) o; - Object key = e.getKey(); - Object value = e.getValue(); - return RedissonLocalCachedMap.super.remove(key, value); - } - return false; - } - - public final int size() { - return RedissonLocalCachedMap.this.size(); - } - - public final void clear() { - RedissonLocalCachedMap.this.clear(); - } - - } - - abstract class CompositeIterable implements Iterator { - - private T currentObject; - private Iterator cacheIterator; - private Iterator mapIterator; - - public CompositeIterable(Iterator cacheIterator, Iterator mapIterator) { - this.cacheIterator = cacheIterator; - this.mapIterator = mapIterator; - } - - @Override - public boolean hasNext() { - if (!cacheIterator.hasNext()) { - while (true) { - if (mapIterator.hasNext()) { - currentObject = mapIterator.next(); - if (!isCacheContains(currentObject)) { - return true; - } - } else { - break; - } - } - return false; - } - return true; - } - - abstract boolean isCacheContains(T object); - - @Override - public T next() { - if (currentObject != null) { - T val = currentObject; - currentObject = null; - return val; - } - if (!hasNext()) { - throw new NoSuchElementException(); - } - return cacheIterator.next(); - } - - @Override - public void remove() { - if (currentObject != null) { - mapIterator.remove(); - currentObject = null; - return; - } - - cacheIterator.remove(); - } - - } - @Override public RFuture> getAllAsync(Set keys) { final Map result = new HashMap(); @@ -1339,8 +1076,7 @@ public class RedissonLocalCachedMap extends RedissonMap implements R @Override public RFuture replaceAsync(final K key, V oldValue, final V newValue) { - final ByteBuf keyState = encodeMapKey(key); - final CacheKey cacheKey = toCacheKey(keyState); + final CacheKey cacheKey = toCacheKey(key); RFuture future = super.replaceAsync(key, oldValue, newValue); future.addListener(new FutureListener() { @@ -1386,8 +1122,7 @@ public class RedissonLocalCachedMap extends RedissonMap implements R @Override public RFuture removeAsync(Object key, Object value) { - final ByteBuf keyState = encodeMapKey(key); - final CacheKey cacheKey = toCacheKey(keyState); + final CacheKey cacheKey = toCacheKey(key); RFuture future = super.removeAsync(key, value); future.addListener(new FutureListener() {