diff --git a/src/main/java/redis/clients/util/Hashing.java b/src/main/java/redis/clients/util/Hashing.java index 3323347..1460f03 100644 --- a/src/main/java/redis/clients/util/Hashing.java +++ b/src/main/java/redis/clients/util/Hashing.java @@ -5,23 +5,22 @@ import java.security.NoSuchAlgorithmException; public interface Hashing { public static final Hashing MURMUR_HASH = new MurmurHash(); + public ThreadLocal md5Holder = new ThreadLocal(); public static final Hashing MD5 = new Hashing() { - private MessageDigest md5 = null; // avoid recurring construction - public long hash(String key) { return hash(SafeEncoder.encode(key)); } public long hash(byte[] key) { - if (md5 == null) { - try { - md5 = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException e) { - throw new IllegalStateException( - "++++ no md5 algorythm found"); + try { + if (md5Holder.get() == null) { + md5Holder.set(MessageDigest.getInstance("MD5")); } + } catch (NoSuchAlgorithmException e) { + throw new IllegalStateException("++++ no md5 algorythm found"); } + MessageDigest md5 = md5Holder.get(); md5.reset(); md5.update(key);