From 80b6cbfc9c861469146318d0b3dd5f8b8b525b8a Mon Sep 17 00:00:00 2001
From: xiejun <xiejun@vci-tech.com>
Date: 星期五, 01 十一月 2024 15:11:19 +0800
Subject: [PATCH] Revert "集成获取mdm分发通用数据格式接口集成"

---
 Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/cache/BladeRedis.java |  824 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 824 insertions(+), 0 deletions(-)

diff --git a/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/cache/BladeRedis.java b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/cache/BladeRedis.java
new file mode 100644
index 0000000..b8e2826
--- /dev/null
+++ b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/cache/BladeRedis.java
@@ -0,0 +1,824 @@
+/*
+ *      Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+
+package org.springblade.core.redis.cache;
+
+import lombok.Getter;
+import org.springblade.core.tool.utils.CollectionUtil;
+import org.springframework.data.redis.core.*;
+import org.springframework.lang.Nullable;
+import org.springframework.util.Assert;
+
+import java.time.Duration;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Supplier;
+
+/**
+ * redis 宸ュ叿
+ *
+ * @author L.cm
+ */
+@Getter
+@SuppressWarnings("unchecked")
+public class BladeRedis {
+	private final RedisTemplate<String, Object> redisTemplate;
+	private final StringRedisTemplate stringRedisTemplate;
+	private final ValueOperations<String, Object> valueOps;
+	private final HashOperations<String, Object, Object> hashOps;
+	private final ListOperations<String, Object> listOps;
+	private final SetOperations<String, Object> setOps;
+	private final ZSetOperations<String, Object> zSetOps;
+
+	public BladeRedis(RedisTemplate<String, Object> redisTemplate, StringRedisTemplate stringRedisTemplate) {
+		this.redisTemplate = redisTemplate;
+		this.stringRedisTemplate = stringRedisTemplate;
+		Assert.notNull(redisTemplate, "redisTemplate is null");
+		valueOps = redisTemplate.opsForValue();
+		hashOps = redisTemplate.opsForHash();
+		listOps = redisTemplate.opsForList();
+		setOps = redisTemplate.opsForSet();
+		zSetOps = redisTemplate.opsForZSet();
+	}
+
+	/**
+	 * 璁剧疆缂撳瓨
+	 *
+	 * @param cacheKey 缂撳瓨key
+	 * @param value    缂撳瓨value
+	 */
+	public void set(CacheKey cacheKey, Object value) {
+		String key = cacheKey.getKey();
+		Duration expire = cacheKey.getExpire();
+		if (expire == null) {
+			set(key, value);
+		} else {
+			setEx(key, value, expire);
+		}
+	}
+
+	/**
+	 * 瀛樻斁 key value 瀵瑰埌 redis銆�
+	 */
+	public void set(String key, Object value) {
+		valueOps.set(key, value);
+	}
+
+	/**
+	 * 瀛樻斁 key value 瀵瑰埌 redis锛屽苟灏� key 鐨勭敓瀛樻椂闂磋涓� seconds (浠ョ涓哄崟浣�)銆�
+	 * 濡傛灉 key 宸茬粡瀛樺湪锛� SETEX 鍛戒护灏嗚鍐欐棫鍊笺��
+	 */
+	public void setEx(String key, Object value, Duration timeout) {
+		valueOps.set(key, value, timeout);
+	}
+
+	/**
+	 * 瀛樻斁 key value 瀵瑰埌 redis锛屽苟灏� key 鐨勭敓瀛樻椂闂磋涓� seconds (浠ョ涓哄崟浣�)銆�
+	 * 濡傛灉 key 宸茬粡瀛樺湪锛� SETEX 鍛戒护灏嗚鍐欐棫鍊笺��
+	 */
+	public void setEx(String key, Object value, Long seconds) {
+		valueOps.set(key, value, seconds, TimeUnit.SECONDS);
+	}
+
+	/**
+	 * 杩斿洖 key 鎵�鍏宠仈鐨� value 鍊�
+	 * 濡傛灉 key 涓嶅瓨鍦ㄩ偅涔堣繑鍥炵壒娈婂�� nil 銆�
+	 */
+	@Nullable
+	public <T> T get(String key) {
+		return (T) valueOps.get(key);
+	}
+
+	/**
+	 * 鑾峰彇cache 涓� null 鏃朵娇鐢ㄥ姞杞藉櫒锛岀劧鍚庤缃紦瀛�
+	 *
+	 * @param key    cacheKey
+	 * @param loader cache loader
+	 * @param <T>    娉涘瀷
+	 * @return 缁撴灉
+	 */
+	@Nullable
+	public <T> T get(String key, Supplier<T> loader) {
+		T value = this.get(key);
+		if (value != null) {
+			return value;
+		}
+		value = loader.get();
+		if (value == null) {
+			return null;
+		}
+		this.set(key, value);
+		return value;
+	}
+
+	/**
+	 * 杩斿洖 key 鎵�鍏宠仈鐨� value 鍊�
+	 * 濡傛灉 key 涓嶅瓨鍦ㄩ偅涔堣繑鍥炵壒娈婂�� nil 銆�
+	 */
+	@Nullable
+	public <T> T get(CacheKey cacheKey) {
+		return (T) valueOps.get(cacheKey.getKey());
+	}
+
+	/**
+	 * 鑾峰彇cache 涓� null 鏃朵娇鐢ㄥ姞杞藉櫒锛岀劧鍚庤缃紦瀛�
+	 *
+	 * @param cacheKey cacheKey
+	 * @param loader   cache loader
+	 * @param <T>      娉涘瀷
+	 * @return 缁撴灉
+	 */
+	@Nullable
+	public <T> T get(CacheKey cacheKey, Supplier<T> loader) {
+		String key = cacheKey.getKey();
+		T value = this.get(key);
+		if (value != null) {
+			return value;
+		}
+		value = loader.get();
+		if (value == null) {
+			return null;
+		}
+		this.set(cacheKey, value);
+		return value;
+	}
+
+	/**
+	 * 鍒犻櫎缁欏畾鐨勪竴涓� key
+	 * 涓嶅瓨鍦ㄧ殑 key 浼氳蹇界暐銆�
+	 */
+	public Boolean del(String key) {
+		return redisTemplate.delete(key);
+	}
+
+	/**
+	 * 鍒犻櫎缁欏畾鐨勪竴涓� key
+	 * 涓嶅瓨鍦ㄧ殑 key 浼氳蹇界暐銆�
+	 */
+	public Boolean del(CacheKey key) {
+		return redisTemplate.delete(key.getKey());
+	}
+
+	/**
+	 * 鍒犻櫎缁欏畾鐨勫涓� key
+	 * 涓嶅瓨鍦ㄧ殑 key 浼氳蹇界暐銆�
+	 */
+	public Long del(String... keys) {
+		return del(Arrays.asList(keys));
+	}
+
+	/**
+	 * 鍒犻櫎缁欏畾鐨勫涓� key
+	 * 涓嶅瓨鍦ㄧ殑 key 浼氳蹇界暐銆�
+	 */
+	public Long del(Collection<String> keys) {
+		return redisTemplate.delete(keys);
+	}
+
+	/**
+	 * 鏌ユ壘鎵�鏈夌鍚堢粰瀹氭ā寮� pattern 鐨� key 銆�
+	 * KEYS * 鍖归厤鏁版嵁搴撲腑鎵�鏈� key 銆�
+	 * KEYS h?llo 鍖归厤 hello 锛� hallo 鍜� hxllo 绛夈��
+	 * KEYS h*llo 鍖归厤 hllo 鍜� heeeeello 绛夈��
+	 * KEYS h[ae]llo 鍖归厤 hello 鍜� hallo 锛屼絾涓嶅尮閰� hillo 銆�
+	 * 鐗规畩绗﹀彿鐢� \ 闅斿紑
+	 */
+	public Set<String> keys(String pattern) {
+		return redisTemplate.keys(pattern);
+	}
+
+	/**
+	 * 鍚屾椂璁剧疆涓�涓垨澶氫釜 key-value 瀵广��
+	 * 濡傛灉鏌愪釜缁欏畾 key 宸茬粡瀛樺湪锛岄偅涔� MSET 浼氱敤鏂板�艰鐩栧師鏉ョ殑鏃у�硷紝濡傛灉杩欎笉鏄綘鎵�甯屾湜鐨勬晥鏋滐紝璇疯�冭檻浣跨敤 MSETNX 鍛戒护锛氬畠鍙細鍦ㄦ墍鏈夌粰瀹� key 閮戒笉瀛樺湪鐨勬儏鍐典笅杩涜璁剧疆鎿嶄綔銆�
+	 * MSET 鏄竴涓師瀛愭��(atomic)鎿嶄綔锛屾墍鏈夌粰瀹� key 閮戒細鍦ㄥ悓涓�鏃堕棿鍐呰璁剧疆锛屾煇浜涚粰瀹� key 琚洿鏂拌�屽彟涓�浜涚粰瀹� key 娌℃湁鏀瑰彉鐨勬儏鍐碉紝涓嶅彲鑳藉彂鐢熴��
+	 * <pre>
+	 * 渚嬪瓙锛�
+	 * Cache cache = RedisKit.use();			// 浣跨敤 Redis 鐨� cache
+	 * cache.mset("k1", "v1", "k2", "v2");		// 鏀惧叆澶氫釜 key value 閿�煎
+	 * List list = cache.mget("k1", "k2");		// 鍒╃敤澶氫釜閿�煎緱鍒颁笂闈唬鐮佹斁鍏ョ殑鍊�
+	 * </pre>
+	 */
+	public void mSet(Object... keysValues) {
+		valueOps.multiSet(CollectionUtil.toMap(keysValues));
+	}
+
+	/**
+	 * 杩斿洖鎵�鏈�(涓�涓垨澶氫釜)缁欏畾 key 鐨勫�笺��
+	 * 濡傛灉缁欏畾鐨� key 閲岄潰锛屾湁鏌愪釜 key 涓嶅瓨鍦紝閭d箞杩欎釜 key 杩斿洖鐗规畩鍊� nil 銆傚洜姝わ紝璇ュ懡浠ゆ案涓嶅け璐ャ��
+	 */
+	public List<Object> mGet(String... keys) {
+		return mGet(Arrays.asList(keys));
+	}
+
+	/**
+	 * 杩斿洖鎵�鏈�(涓�涓垨澶氫釜)缁欏畾 key 鐨勫�笺��
+	 * 濡傛灉缁欏畾鐨� key 閲岄潰锛屾湁鏌愪釜 key 涓嶅瓨鍦紝閭d箞杩欎釜 key 杩斿洖鐗规畩鍊� nil 銆傚洜姝わ紝璇ュ懡浠ゆ案涓嶅け璐ャ��
+	 */
+	public List<Object> mGet(Collection<String> keys) {
+		return valueOps.multiGet(keys);
+	}
+
+	/**
+	 * 灏� key 涓偍瀛樼殑鏁板瓧鍊煎噺涓�銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝閭d箞 key 鐨勫�间細鍏堣鍒濆鍖栦负 0 锛岀劧鍚庡啀鎵ц DECR 鎿嶄綔銆�
+	 * 濡傛灉鍊煎寘鍚敊璇殑绫诲瀷锛屾垨瀛楃涓茬被鍨嬬殑鍊间笉鑳借〃绀轰负鏁板瓧锛岄偅涔堣繑鍥炰竴涓敊璇��
+	 * 鏈搷浣滅殑鍊奸檺鍒跺湪 64 浣�(bit)鏈夌鍙锋暟瀛楄〃绀轰箣鍐呫��
+	 * 鍏充簬閫掑(increment) / 閫掑噺(decrement)鎿嶄綔鐨勬洿澶氫俊鎭紝璇峰弬瑙� INCR 鍛戒护銆�
+	 */
+	public Long decr(String key) {
+		return stringRedisTemplate.opsForValue().decrement(key);
+	}
+
+	/**
+	 * 灏� key 鎵�鍌ㄥ瓨鐨勫�煎噺鍘诲噺閲� decrement 銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝閭d箞 key 鐨勫�间細鍏堣鍒濆鍖栦负 0 锛岀劧鍚庡啀鎵ц DECRBY 鎿嶄綔銆�
+	 * 濡傛灉鍊煎寘鍚敊璇殑绫诲瀷锛屾垨瀛楃涓茬被鍨嬬殑鍊间笉鑳借〃绀轰负鏁板瓧锛岄偅涔堣繑鍥炰竴涓敊璇��
+	 * 鏈搷浣滅殑鍊奸檺鍒跺湪 64 浣�(bit)鏈夌鍙锋暟瀛楄〃绀轰箣鍐呫��
+	 * 鍏充簬鏇村閫掑(increment) / 閫掑噺(decrement)鎿嶄綔鐨勬洿澶氫俊鎭紝璇峰弬瑙� INCR 鍛戒护銆�
+	 */
+	public Long decrBy(String key, long longValue) {
+		return stringRedisTemplate.opsForValue().decrement(key, longValue);
+	}
+
+	/**
+	 * 灏� key 涓偍瀛樼殑鏁板瓧鍊煎涓�銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝閭d箞 key 鐨勫�间細鍏堣鍒濆鍖栦负 0 锛岀劧鍚庡啀鎵ц INCR 鎿嶄綔銆�
+	 * 濡傛灉鍊煎寘鍚敊璇殑绫诲瀷锛屾垨瀛楃涓茬被鍨嬬殑鍊间笉鑳借〃绀轰负鏁板瓧锛岄偅涔堣繑鍥炰竴涓敊璇��
+	 * 鏈搷浣滅殑鍊奸檺鍒跺湪 64 浣�(bit)鏈夌鍙锋暟瀛楄〃绀轰箣鍐呫��
+	 */
+	public Long incr(String key) {
+		return stringRedisTemplate.opsForValue().increment(key);
+	}
+
+	/**
+	 * 灏� key 鎵�鍌ㄥ瓨鐨勫�煎姞涓婂閲� increment 銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝閭d箞 key 鐨勫�间細鍏堣鍒濆鍖栦负 0 锛岀劧鍚庡啀鎵ц INCRBY 鍛戒护銆�
+	 * 濡傛灉鍊煎寘鍚敊璇殑绫诲瀷锛屾垨瀛楃涓茬被鍨嬬殑鍊间笉鑳借〃绀轰负鏁板瓧锛岄偅涔堣繑鍥炰竴涓敊璇��
+	 * 鏈搷浣滅殑鍊奸檺鍒跺湪 64 浣�(bit)鏈夌鍙锋暟瀛楄〃绀轰箣鍐呫��
+	 * 鍏充簬閫掑(increment) / 閫掑噺(decrement)鎿嶄綔鐨勬洿澶氫俊鎭紝鍙傝 INCR 鍛戒护銆�
+	 */
+	public Long incrBy(String key, long longValue) {
+		return stringRedisTemplate.opsForValue().increment(key, longValue);
+	}
+
+	/**
+	 * 鑾峰彇璁版暟鍣ㄧ殑鍊�
+	 */
+	public Long getCounter(String key) {
+		return Long.valueOf(String.valueOf(valueOps.get(key)));
+	}
+
+	/**
+	 * 妫�鏌ョ粰瀹� key 鏄惁瀛樺湪銆�
+	 */
+	public Boolean exists(String key) {
+		return redisTemplate.hasKey(key);
+	}
+
+	/**
+	 * 浠庡綋鍓嶆暟鎹簱涓殢鏈鸿繑鍥�(涓嶅垹闄�)涓�涓� key 銆�
+	 */
+	public String randomKey() {
+		return redisTemplate.randomKey();
+	}
+
+	/**
+	 * 灏� key 鏀瑰悕涓� newkey 銆�
+	 * 褰� key 鍜� newkey 鐩稿悓锛屾垨鑰� key 涓嶅瓨鍦ㄦ椂锛岃繑鍥炰竴涓敊璇��
+	 * 褰� newkey 宸茬粡瀛樺湪鏃讹紝 RENAME 鍛戒护灏嗚鐩栨棫鍊笺��
+	 */
+	public void rename(String oldkey, String newkey) {
+		redisTemplate.rename(oldkey, newkey);
+	}
+
+	/**
+	 * 灏嗗綋鍓嶆暟鎹簱鐨� key 绉诲姩鍒扮粰瀹氱殑鏁版嵁搴� db 褰撲腑銆�
+	 * 濡傛灉褰撳墠鏁版嵁搴�(婧愭暟鎹簱)鍜岀粰瀹氭暟鎹簱(鐩爣鏁版嵁搴�)鏈夌浉鍚屽悕瀛楃殑缁欏畾 key 锛屾垨鑰� key 涓嶅瓨鍦ㄤ簬褰撳墠鏁版嵁搴擄紝閭d箞 MOVE 娌℃湁浠讳綍鏁堟灉銆�
+	 * 鍥犳锛屼篃鍙互鍒╃敤杩欎竴鐗规�э紝灏� MOVE 褰撲綔閿�(locking)鍘熻(primitive)銆�
+	 */
+	public Boolean move(String key, int dbIndex) {
+		return redisTemplate.move(key, dbIndex);
+	}
+
+	/**
+	 * 涓虹粰瀹� key 璁剧疆鐢熷瓨鏃堕棿锛屽綋 key 杩囨湡鏃�(鐢熷瓨鏃堕棿涓� 0 )锛屽畠浼氳鑷姩鍒犻櫎銆�
+	 * 鍦� Redis 涓紝甯︽湁鐢熷瓨鏃堕棿鐨� key 琚О涓恒�庢槗澶辩殑銆�(volatile)銆�
+	 */
+	public Boolean expire(String key, long seconds) {
+		return redisTemplate.expire(key, seconds, TimeUnit.SECONDS);
+	}
+
+	/**
+	 * 涓虹粰瀹� key 璁剧疆鐢熷瓨鏃堕棿锛屽綋 key 杩囨湡鏃�(鐢熷瓨鏃堕棿涓� 0 )锛屽畠浼氳鑷姩鍒犻櫎銆�
+	 * 鍦� Redis 涓紝甯︽湁鐢熷瓨鏃堕棿鐨� key 琚О涓恒�庢槗澶辩殑銆�(volatile)銆�
+	 */
+	public Boolean expire(String key, Duration timeout) {
+		return expire(key, timeout.getSeconds());
+	}
+
+	/**
+	 * EXPIREAT 鐨勪綔鐢ㄥ拰 EXPIRE 绫讳技锛岄兘鐢ㄤ簬涓� key 璁剧疆鐢熷瓨鏃堕棿銆備笉鍚屽湪浜� EXPIREAT 鍛戒护鎺ュ彈鐨勬椂闂村弬鏁版槸 UNIX 鏃堕棿鎴�(unix timestamp)銆�
+	 */
+	public Boolean expireAt(String key, Date date) {
+		return redisTemplate.expireAt(key, date);
+	}
+
+	/**
+	 * EXPIREAT 鐨勪綔鐢ㄥ拰 EXPIRE 绫讳技锛岄兘鐢ㄤ簬涓� key 璁剧疆鐢熷瓨鏃堕棿銆備笉鍚屽湪浜� EXPIREAT 鍛戒护鎺ュ彈鐨勬椂闂村弬鏁版槸 UNIX 鏃堕棿鎴�(unix timestamp)銆�
+	 */
+	public Boolean expireAt(String key, long unixTime) {
+		return expireAt(key, new Date(unixTime));
+	}
+
+	/**
+	 * 杩欎釜鍛戒护鍜� EXPIRE 鍛戒护鐨勪綔鐢ㄧ被浼硷紝浣嗘槸瀹冧互姣涓哄崟浣嶈缃� key 鐨勭敓瀛樻椂闂达紝鑰屼笉鍍� EXPIRE 鍛戒护閭f牱锛屼互绉掍负鍗曚綅銆�
+	 */
+	public Boolean pexpire(String key, long milliseconds) {
+		return redisTemplate.expire(key, milliseconds, TimeUnit.MILLISECONDS);
+	}
+
+	/**
+	 * 灏嗙粰瀹� key 鐨勫�艰涓� value 锛屽苟杩斿洖 key 鐨勬棫鍊�(old value)銆�
+	 * 褰� key 瀛樺湪浣嗕笉鏄瓧绗︿覆绫诲瀷鏃讹紝杩斿洖涓�涓敊璇��
+	 */
+	public <T> T getSet(String key, Object value) {
+		return (T) valueOps.getAndSet(key, value);
+	}
+
+	/**
+	 * 绉婚櫎缁欏畾 key 鐨勭敓瀛樻椂闂达紝灏嗚繖涓� key 浠庛�庢槗澶辩殑銆�(甯︾敓瀛樻椂闂� key )杞崲鎴愩�庢寔涔呯殑銆�(涓�涓笉甯︾敓瀛樻椂闂淬�佹案涓嶈繃鏈熺殑 key )銆�
+	 */
+	public Boolean persist(String key) {
+		return redisTemplate.persist(key);
+	}
+
+	/**
+	 * 杩斿洖 key 鎵�鍌ㄥ瓨鐨勫�肩殑绫诲瀷銆�
+	 */
+	public String type(String key) {
+		return redisTemplate.type(key).code();
+	}
+
+	/**
+	 * 浠ョ涓哄崟浣嶏紝杩斿洖缁欏畾 key 鐨勫墿浣欑敓瀛樻椂闂�(TTL, time to live)銆�
+	 */
+	public Long ttl(String key) {
+		return redisTemplate.getExpire(key);
+	}
+
+	/**
+	 * 杩欎釜鍛戒护绫讳技浜� TTL 鍛戒护锛屼絾瀹冧互姣涓哄崟浣嶈繑鍥� key 鐨勫墿浣欑敓瀛樻椂闂达紝鑰屼笉鏄儚 TTL 鍛戒护閭f牱锛屼互绉掍负鍗曚綅銆�
+	 */
+	public Long pttl(String key) {
+		return redisTemplate.getExpire(key, TimeUnit.MILLISECONDS);
+	}
+
+	/**
+	 * 灏嗗搱甯岃〃 key 涓殑鍩� field 鐨勫�艰涓� value 銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝涓�涓柊鐨勫搱甯岃〃琚垱寤哄苟杩涜 HSET 鎿嶄綔銆�
+	 * 濡傛灉鍩� field 宸茬粡瀛樺湪浜庡搱甯岃〃涓紝鏃у�煎皢琚鐩栥��
+	 */
+	public void hSet(String key, Object field, Object value) {
+		hashOps.put(key, field, value);
+	}
+
+	/**
+	 * 鍚屾椂灏嗗涓� field-value (鍩�-鍊�)瀵硅缃埌鍝堝笇琛� key 涓��
+	 * 姝ゅ懡浠や細瑕嗙洊鍝堝笇琛ㄤ腑宸插瓨鍦ㄧ殑鍩熴��
+	 * 濡傛灉 key 涓嶅瓨鍦紝涓�涓┖鍝堝笇琛ㄨ鍒涘缓骞舵墽琛� HMSET 鎿嶄綔銆�
+	 */
+	public void hMset(String key, Map<Object, Object> hash) {
+		hashOps.putAll(key, hash);
+	}
+
+	/**
+	 * 杩斿洖鍝堝笇琛� key 涓粰瀹氬煙 field 鐨勫�笺��
+	 */
+	public <T> T hGet(String key, Object field) {
+		return (T) hashOps.get(key, field);
+	}
+
+	/**
+	 * 杩斿洖鍝堝笇琛� key 涓紝涓�涓垨澶氫釜缁欏畾鍩熺殑鍊笺��
+	 * 濡傛灉缁欏畾鐨勫煙涓嶅瓨鍦ㄤ簬鍝堝笇琛紝閭d箞杩斿洖涓�涓� nil 鍊笺��
+	 * 鍥犱负涓嶅瓨鍦ㄧ殑 key 琚綋浣滀竴涓┖鍝堝笇琛ㄦ潵澶勭悊锛屾墍浠ュ涓�涓笉瀛樺湪鐨� key 杩涜 HMGET 鎿嶄綔灏嗚繑鍥炰竴涓彧甯︽湁 nil 鍊肩殑琛ㄣ��
+	 */
+	public List hmGet(String key, Object... fields) {
+		return hmGet(key, Arrays.asList(fields));
+	}
+
+	/**
+	 * 杩斿洖鍝堝笇琛� key 涓紝涓�涓垨澶氫釜缁欏畾鍩熺殑鍊笺��
+	 * 濡傛灉缁欏畾鐨勫煙涓嶅瓨鍦ㄤ簬鍝堝笇琛紝閭d箞杩斿洖涓�涓� nil 鍊笺��
+	 * 鍥犱负涓嶅瓨鍦ㄧ殑 key 琚綋浣滀竴涓┖鍝堝笇琛ㄦ潵澶勭悊锛屾墍浠ュ涓�涓笉瀛樺湪鐨� key 杩涜 HMGET 鎿嶄綔灏嗚繑鍥炰竴涓彧甯︽湁 nil 鍊肩殑琛ㄣ��
+	 */
+	public List hmGet(String key, Collection<Object> hashKeys) {
+		return hashOps.multiGet(key, hashKeys);
+	}
+
+	/**
+	 * 鍒犻櫎鍝堝笇琛� key 涓殑涓�涓垨澶氫釜鎸囧畾鍩燂紝涓嶅瓨鍦ㄧ殑鍩熷皢琚拷鐣ャ��
+	 */
+	public Long hDel(String key, Object... fields) {
+		return hashOps.delete(key, fields);
+	}
+
+	/**
+	 * 鏌ョ湅鍝堝笇琛� key 涓紝缁欏畾鍩� field 鏄惁瀛樺湪銆�
+	 */
+	public Boolean hExists(String key, Object field) {
+		return hashOps.hasKey(key, field);
+	}
+
+	/**
+	 * 杩斿洖鍝堝笇琛� key 涓紝鎵�鏈夌殑鍩熷拰鍊笺��
+	 * 鍦ㄨ繑鍥炲�奸噷锛岀揣璺熸瘡涓煙鍚�(field name)涔嬪悗鏄煙鐨勫��(value)锛屾墍浠ヨ繑鍥炲�肩殑闀垮害鏄搱甯岃〃澶у皬鐨勪袱鍊嶃��
+	 */
+	public Map hGetAll(String key) {
+		return hashOps.entries(key);
+	}
+
+	/**
+	 * 杩斿洖鍝堝笇琛� key 涓墍鏈夊煙鐨勫�笺��
+	 */
+	public List hVals(String key) {
+		return hashOps.values(key);
+	}
+
+	/**
+	 * 杩斿洖鍝堝笇琛� key 涓殑鎵�鏈夊煙銆�
+	 * 搴曞眰瀹炵幇姝ゆ柟娉曞彇鍚嶄负 hfields 鏇翠负鍚堥�傦紝鍦ㄦ浠呬负涓庡簳灞備繚鎸佷竴鑷�
+	 */
+	public Set<Object> hKeys(String key) {
+		return hashOps.keys(key);
+	}
+
+	/**
+	 * 杩斿洖鍝堝笇琛� key 涓煙鐨勬暟閲忋��
+	 */
+	public Long hLen(String key) {
+		return hashOps.size(key);
+	}
+
+	/**
+	 * 涓哄搱甯岃〃 key 涓殑鍩� field 鐨勫�煎姞涓婂閲� increment 銆�
+	 * 澧為噺涔熷彲浠ヤ负璐熸暟锛岀浉褰撲簬瀵圭粰瀹氬煙杩涜鍑忔硶鎿嶄綔銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝涓�涓柊鐨勫搱甯岃〃琚垱寤哄苟鎵ц HINCRBY 鍛戒护銆�
+	 * 濡傛灉鍩� field 涓嶅瓨鍦紝閭d箞鍦ㄦ墽琛屽懡浠ゅ墠锛屽煙鐨勫�艰鍒濆鍖栦负 0 銆�
+	 * 瀵逛竴涓偍瀛樺瓧绗︿覆鍊肩殑鍩� field 鎵ц HINCRBY 鍛戒护灏嗛�犳垚涓�涓敊璇��
+	 * 鏈搷浣滅殑鍊艰闄愬埗鍦� 64 浣�(bit)鏈夌鍙锋暟瀛楄〃绀轰箣鍐呫��
+	 */
+	public Long hIncrBy(String key, Object field, long value) {
+		return hashOps.increment(key, field, value);
+	}
+
+	/**
+	 * 涓哄搱甯岃〃 key 涓殑鍩� field 鍔犱笂娴偣鏁板閲� increment 銆�
+	 * 濡傛灉鍝堝笇琛ㄤ腑娌℃湁鍩� field 锛岄偅涔� HINCRBYFLOAT 浼氬厛灏嗗煙 field 鐨勫�艰涓� 0 锛岀劧鍚庡啀鎵ц鍔犳硶鎿嶄綔銆�
+	 * 濡傛灉閿� key 涓嶅瓨鍦紝閭d箞 HINCRBYFLOAT 浼氬厛鍒涘缓涓�涓搱甯岃〃锛屽啀鍒涘缓鍩� field 锛屾渶鍚庡啀鎵ц鍔犳硶鎿嶄綔銆�
+	 * 褰撲互涓嬩换鎰忎竴涓潯浠跺彂鐢熸椂锛岃繑鍥炰竴涓敊璇細
+	 * 1:鍩� field 鐨勫�间笉鏄瓧绗︿覆绫诲瀷(鍥犱负 redis 涓殑鏁板瓧鍜屾诞鐐规暟閮戒互瀛楃涓茬殑褰㈠紡淇濆瓨锛屾墍浠ュ畠浠兘灞炰簬瀛楃涓茬被鍨嬶級
+	 * 2:鍩� field 褰撳墠鐨勫�兼垨缁欏畾鐨勫閲� increment 涓嶈兘瑙i噴(parse)涓哄弻绮惧害娴偣鏁�(double precision floating point number)
+	 * HINCRBYFLOAT 鍛戒护鐨勮缁嗗姛鑳藉拰 INCRBYFLOAT 鍛戒护绫讳技锛岃鏌ョ湅 INCRBYFLOAT 鍛戒护鑾峰彇鏇村鐩稿叧淇℃伅銆�
+	 */
+	public Double hIncrByFloat(String key, Object field, double value) {
+		return hashOps.increment(key, field, value);
+	}
+
+	/**
+	 * 杩斿洖鍒楄〃 key 涓紝涓嬫爣涓� index 鐨勫厓绱犮��
+	 * 涓嬫爣(index)鍙傛暟 start 鍜� stop 閮戒互 0 涓哄簳锛屼篃灏辨槸璇达紝浠� 0 琛ㄧず鍒楄〃鐨勭涓�涓厓绱狅紝
+	 * 浠� 1 琛ㄧず鍒楄〃鐨勭浜屼釜鍏冪礌锛屼互姝ょ被鎺ㄣ��
+	 * 浣犱篃鍙互浣跨敤璐熸暟涓嬫爣锛屼互 -1 琛ㄧず鍒楄〃鐨勬渶鍚庝竴涓厓绱狅紝 -2 琛ㄧず鍒楄〃鐨勫�掓暟绗簩涓厓绱狅紝浠ユ绫绘帹銆�
+	 * 濡傛灉 key 涓嶆槸鍒楄〃绫诲瀷锛岃繑鍥炰竴涓敊璇��
+	 */
+	public <T> T lIndex(String key, long index) {
+		return (T) listOps.index(key, index);
+	}
+
+	/**
+	 * 杩斿洖鍒楄〃 key 鐨勯暱搴︺��
+	 * 濡傛灉 key 涓嶅瓨鍦紝鍒� key 琚В閲婁负涓�涓┖鍒楄〃锛岃繑鍥� 0 .
+	 * 濡傛灉 key 涓嶆槸鍒楄〃绫诲瀷锛岃繑鍥炰竴涓敊璇��
+	 */
+	public Long lLen(String key) {
+		return listOps.size(key);
+	}
+
+	/**
+	 * 绉婚櫎骞惰繑鍥炲垪琛� key 鐨勫ご鍏冪礌銆�
+	 */
+	public <T> T lPop(String key) {
+		return (T) listOps.leftPop(key);
+	}
+
+	/**
+	 * 灏嗕竴涓垨澶氫釜鍊� value 鎻掑叆鍒板垪琛� key 鐨勮〃澶�
+	 * 濡傛灉鏈夊涓� value 鍊硷紝閭d箞鍚勪釜 value 鍊兼寜浠庡乏鍒板彸鐨勯『搴忎緷娆℃彃鍏ュ埌琛ㄥご锛� 姣斿璇达紝
+	 * 瀵圭┖鍒楄〃 mylist 鎵ц鍛戒护 LPUSH mylist a b c 锛屽垪琛ㄧ殑鍊煎皢鏄� c b a 锛�
+	 * 杩欑瓑鍚屼簬鍘熷瓙鎬у湴鎵ц LPUSH mylist a 銆� LPUSH mylist b 鍜� LPUSH mylist c 涓変釜鍛戒护銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝涓�涓┖鍒楄〃浼氳鍒涘缓骞舵墽琛� LPUSH 鎿嶄綔銆�
+	 * 褰� key 瀛樺湪浣嗕笉鏄垪琛ㄧ被鍨嬫椂锛岃繑鍥炰竴涓敊璇��
+	 */
+	public Long lPush(String key, Object... values) {
+		return listOps.leftPush(key, values);
+	}
+
+	/**
+	 * 灏嗗垪琛� key 涓嬫爣涓� index 鐨勫厓绱犵殑鍊艰缃负 value 銆�
+	 * 褰� index 鍙傛暟瓒呭嚭鑼冨洿锛屾垨瀵逛竴涓┖鍒楄〃( key 涓嶅瓨鍦�)杩涜 LSET 鏃讹紝杩斿洖涓�涓敊璇��
+	 * 鍏充簬鍒楄〃涓嬫爣鐨勬洿澶氫俊鎭紝璇峰弬鑰� LINDEX 鍛戒护銆�
+	 */
+	public void lSet(String key, long index, Object value) {
+		listOps.set(key, index, value);
+	}
+
+	/**
+	 * 鏍规嵁鍙傛暟 count 鐨勫�硷紝绉婚櫎鍒楄〃涓笌鍙傛暟 value 鐩哥瓑鐨勫厓绱犮��
+	 * count 鐨勫�煎彲浠ユ槸浠ヤ笅鍑犵锛�
+	 * count > 0 : 浠庤〃澶村紑濮嬪悜琛ㄥ熬鎼滅储锛岀Щ闄や笌 value 鐩哥瓑鐨勫厓绱狅紝鏁伴噺涓� count 銆�
+	 * count < 0 : 浠庤〃灏惧紑濮嬪悜琛ㄥご鎼滅储锛岀Щ闄や笌 value 鐩哥瓑鐨勫厓绱狅紝鏁伴噺涓� count 鐨勭粷瀵瑰�笺��
+	 * count = 0 : 绉婚櫎琛ㄤ腑鎵�鏈変笌 value 鐩哥瓑鐨勫�笺��
+	 */
+	public Long lRem(String key, long count, Object value) {
+		return listOps.remove(key, count, value);
+	}
+
+	/**
+	 * 杩斿洖鍒楄〃 key 涓寚瀹氬尯闂村唴鐨勫厓绱狅紝鍖洪棿浠ュ亸绉婚噺 start 鍜� stop 鎸囧畾銆�
+	 * 涓嬫爣(index)鍙傛暟 start 鍜� stop 閮戒互 0 涓哄簳锛屼篃灏辨槸璇达紝浠� 0 琛ㄧず鍒楄〃鐨勭涓�涓厓绱狅紝浠� 1 琛ㄧず鍒楄〃鐨勭浜屼釜鍏冪礌锛屼互姝ょ被鎺ㄣ��
+	 * 浣犱篃鍙互浣跨敤璐熸暟涓嬫爣锛屼互 -1 琛ㄧず鍒楄〃鐨勬渶鍚庝竴涓厓绱狅紝 -2 琛ㄧず鍒楄〃鐨勫�掓暟绗簩涓厓绱狅紝浠ユ绫绘帹銆�
+	 * <pre>
+	 * 渚嬪瓙锛�
+	 * 鑾峰彇 list 涓墍鏈夋暟鎹細cache.lrange(listKey, 0, -1);
+	 * 鑾峰彇 list 涓笅鏍� 1 鍒� 3 鐨勬暟鎹細 cache.lrange(listKey, 1, 3);
+	 * </pre>
+	 */
+	public List lRange(String key, long start, long end) {
+		return listOps.range(key, start, end);
+	}
+
+	/**
+	 * 瀵逛竴涓垪琛ㄨ繘琛屼慨鍓�(trim)锛屽氨鏄锛岃鍒楄〃鍙繚鐣欐寚瀹氬尯闂村唴鐨勫厓绱狅紝涓嶅湪鎸囧畾鍖洪棿涔嬪唴鐨勫厓绱犻兘灏嗚鍒犻櫎銆�
+	 * 涓句釜渚嬪瓙锛屾墽琛屽懡浠� LTRIM list 0 2 锛岃〃绀哄彧淇濈暀鍒楄〃 list 鐨勫墠涓変釜鍏冪礌锛屽叾浣欏厓绱犲叏閮ㄥ垹闄ゃ��
+	 * 涓嬫爣(index)鍙傛暟 start 鍜� stop 閮戒互 0 涓哄簳锛屼篃灏辨槸璇达紝浠� 0 琛ㄧず鍒楄〃鐨勭涓�涓厓绱狅紝浠� 1 琛ㄧず鍒楄〃鐨勭浜屼釜鍏冪礌锛屼互姝ょ被鎺ㄣ��
+	 * 浣犱篃鍙互浣跨敤璐熸暟涓嬫爣锛屼互 -1 琛ㄧず鍒楄〃鐨勬渶鍚庝竴涓厓绱狅紝 -2 琛ㄧず鍒楄〃鐨勫�掓暟绗簩涓厓绱狅紝浠ユ绫绘帹銆�
+	 * 褰� key 涓嶆槸鍒楄〃绫诲瀷鏃讹紝杩斿洖涓�涓敊璇��
+	 */
+	public void lTrim(String key, long start, long end) {
+		listOps.trim(key, start, end);
+	}
+
+	/**
+	 * 绉婚櫎骞惰繑鍥炲垪琛� key 鐨勫熬鍏冪礌銆�
+	 */
+	public <T> T rPop(String key) {
+		return (T) listOps.rightPop(key);
+	}
+
+	/**
+	 * 灏嗕竴涓垨澶氫釜鍊� value 鎻掑叆鍒板垪琛� key 鐨勮〃灏�(鏈�鍙宠竟)銆�
+	 * 濡傛灉鏈夊涓� value 鍊硷紝閭d箞鍚勪釜 value 鍊兼寜浠庡乏鍒板彸鐨勯『搴忎緷娆℃彃鍏ュ埌琛ㄥ熬锛氭瘮濡�
+	 * 瀵逛竴涓┖鍒楄〃 mylist 鎵ц RPUSH mylist a b c 锛屽緱鍑虹殑缁撴灉鍒楄〃涓� a b c 锛�
+	 * 绛夊悓浜庢墽琛屽懡浠� RPUSH mylist a 銆� RPUSH mylist b 銆� RPUSH mylist c 銆�
+	 * 濡傛灉 key 涓嶅瓨鍦紝涓�涓┖鍒楄〃浼氳鍒涘缓骞舵墽琛� RPUSH 鎿嶄綔銆�
+	 * 褰� key 瀛樺湪浣嗕笉鏄垪琛ㄧ被鍨嬫椂锛岃繑鍥炰竴涓敊璇��
+	 */
+	public Long rPush(String key, Object... values) {
+		return listOps.rightPush(key, values);
+	}
+
+	/**
+	 * 鍛戒护 RPOPLPUSH 鍦ㄤ竴涓師瀛愭椂闂村唴锛屾墽琛屼互涓嬩袱涓姩浣滐細
+	 * 灏嗗垪琛� source 涓殑鏈�鍚庝竴涓厓绱�(灏惧厓绱�)寮瑰嚭锛屽苟杩斿洖缁欏鎴风銆�
+	 * 灏� source 寮瑰嚭鐨勫厓绱犳彃鍏ュ埌鍒楄〃 destination 锛屼綔涓� destination 鍒楄〃鐨勭殑澶村厓绱犮��
+	 */
+	public <T> T rPopLPush(String srcKey, String dstKey) {
+		return (T) listOps.rightPopAndLeftPush(srcKey, dstKey);
+	}
+
+	/**
+	 * 灏嗕竴涓垨澶氫釜 member 鍏冪礌鍔犲叆鍒伴泦鍚� key 褰撲腑锛屽凡缁忓瓨鍦ㄤ簬闆嗗悎鐨� member 鍏冪礌灏嗚蹇界暐銆�
+	 * 鍋囧 key 涓嶅瓨鍦紝鍒欏垱寤轰竴涓彧鍖呭惈 member 鍏冪礌浣滄垚鍛樼殑闆嗗悎銆�
+	 * 褰� key 涓嶆槸闆嗗悎绫诲瀷鏃讹紝杩斿洖涓�涓敊璇��
+	 */
+	public Long sAdd(String key, Object... members) {
+		return setOps.add(key, members);
+	}
+
+	/**
+	 * 绉婚櫎骞惰繑鍥為泦鍚堜腑鐨勪竴涓殢鏈哄厓绱犮��
+	 * 濡傛灉鍙兂鑾峰彇涓�涓殢鏈哄厓绱狅紝浣嗕笉鎯宠鍏冪礌浠庨泦鍚堜腑琚Щ闄ょ殑璇濓紝鍙互浣跨敤 SRANDMEMBER 鍛戒护銆�
+	 */
+	public <T> T sPop(String key) {
+		return (T) setOps.pop(key);
+	}
+
+	/**
+	 * 杩斿洖闆嗗悎 key 涓殑鎵�鏈夋垚鍛樸��
+	 * 涓嶅瓨鍦ㄧ殑 key 琚涓虹┖闆嗗悎銆�
+	 */
+	public Set sMembers(String key) {
+		return setOps.members(key);
+	}
+
+	/**
+	 * 鍒ゆ柇 member 鍏冪礌鏄惁闆嗗悎 key 鐨勬垚鍛樸��
+	 */
+	public boolean sIsMember(String key, Object member) {
+		return setOps.isMember(key, member);
+	}
+
+	/**
+	 * 杩斿洖澶氫釜闆嗗悎鐨勪氦闆嗭紝澶氫釜闆嗗悎鐢� keys 鎸囧畾
+	 */
+	public Set sInter(String key, String otherKey) {
+		return setOps.intersect(key, otherKey);
+	}
+
+	/**
+	 * 杩斿洖澶氫釜闆嗗悎鐨勪氦闆嗭紝澶氫釜闆嗗悎鐢� keys 鎸囧畾
+	 */
+	public Set sInter(String key, Collection<String> otherKeys) {
+		return setOps.intersect(key, otherKeys);
+	}
+
+	/**
+	 * 杩斿洖闆嗗悎涓殑涓�涓殢鏈哄厓绱犮��
+	 */
+	public <T> T sRandMember(String key) {
+		return (T) setOps.randomMember(key);
+	}
+
+	/**
+	 * 杩斿洖闆嗗悎涓殑 count 涓殢鏈哄厓绱犮��
+	 * 浠� Redis 2.6 鐗堟湰寮�濮嬶紝 SRANDMEMBER 鍛戒护鎺ュ彈鍙�夌殑 count 鍙傛暟锛�
+	 * 濡傛灉 count 涓烘鏁帮紝涓斿皬浜庨泦鍚堝熀鏁帮紝閭d箞鍛戒护杩斿洖涓�涓寘鍚� count 涓厓绱犵殑鏁扮粍锛屾暟缁勪腑鐨勫厓绱犲悇涓嶇浉鍚屻��
+	 * 濡傛灉 count 澶т簬绛変簬闆嗗悎鍩烘暟锛岄偅涔堣繑鍥炴暣涓泦鍚堛��
+	 * 濡傛灉 count 涓鸿礋鏁帮紝閭d箞鍛戒护杩斿洖涓�涓暟缁勶紝鏁扮粍涓殑鍏冪礌鍙兘浼氶噸澶嶅嚭鐜板娆★紝鑰屾暟缁勭殑闀垮害涓� count 鐨勭粷瀵瑰�笺��
+	 * 璇ユ搷浣滃拰 SPOP 鐩镐技锛屼絾 SPOP 灏嗛殢鏈哄厓绱犱粠闆嗗悎涓Щ闄ゅ苟杩斿洖锛岃�� SRANDMEMBER 鍒欎粎浠呰繑鍥為殢鏈哄厓绱狅紝鑰屼笉瀵归泦鍚堣繘琛屼换浣曟敼鍔ㄣ��
+	 */
+	public List sRandMember(String key, int count) {
+		return setOps.randomMembers(key, count);
+	}
+
+	/**
+	 * 绉婚櫎闆嗗悎 key 涓殑涓�涓垨澶氫釜 member 鍏冪礌锛屼笉瀛樺湪鐨� member 鍏冪礌浼氳蹇界暐銆�
+	 */
+	public Long sRem(String key, Object... members) {
+		return setOps.remove(key, members);
+	}
+
+	/**
+	 * 杩斿洖澶氫釜闆嗗悎鐨勫苟闆嗭紝澶氫釜闆嗗悎鐢� keys 鎸囧畾
+	 * 涓嶅瓨鍦ㄧ殑 key 琚涓虹┖闆嗐��
+	 */
+	public Set sUnion(String key, String otherKey) {
+		return setOps.union(key, otherKey);
+	}
+
+	/**
+	 * 杩斿洖澶氫釜闆嗗悎鐨勫苟闆嗭紝澶氫釜闆嗗悎鐢� keys 鎸囧畾
+	 * 涓嶅瓨鍦ㄧ殑 key 琚涓虹┖闆嗐��
+	 */
+	public Set sUnion(String key, Collection<String> otherKeys) {
+		return setOps.union(key, otherKeys);
+	}
+
+	/**
+	 * 杩斿洖涓�涓泦鍚堢殑鍏ㄩ儴鎴愬憳锛岃闆嗗悎鏄墍鏈夌粰瀹氶泦鍚堜箣闂寸殑宸泦銆�
+	 * 涓嶅瓨鍦ㄧ殑 key 琚涓虹┖闆嗐��
+	 */
+	public Set sDiff(String key, String otherKey) {
+		return setOps.difference(key, otherKey);
+	}
+
+	/**
+	 * 杩斿洖涓�涓泦鍚堢殑鍏ㄩ儴鎴愬憳锛岃闆嗗悎鏄墍鏈夌粰瀹氶泦鍚堜箣闂寸殑宸泦銆�
+	 * 涓嶅瓨鍦ㄧ殑 key 琚涓虹┖闆嗐��
+	 */
+	public Set sDiff(String key, Collection<String> otherKeys) {
+		return setOps.difference(key, otherKeys);
+	}
+
+	/**
+	 * 灏嗕竴涓垨澶氫釜 member 鍏冪礌鍙婂叾 score 鍊煎姞鍏ュ埌鏈夊簭闆� key 褰撲腑銆�
+	 * 濡傛灉鏌愪釜 member 宸茬粡鏄湁搴忛泦鐨勬垚鍛橈紝閭d箞鏇存柊杩欎釜 member 鐨� score 鍊硷紝
+	 * 骞堕�氳繃閲嶆柊鎻掑叆杩欎釜 member 鍏冪礌锛屾潵淇濊瘉璇� member 鍦ㄦ纭殑浣嶇疆涓娿��
+	 */
+	public Boolean zAdd(String key, Object member, double score) {
+		return zSetOps.add(key, member, score);
+	}
+
+	/**
+	 * 灏嗕竴涓垨澶氫釜 member 鍏冪礌鍙婂叾 score 鍊煎姞鍏ュ埌鏈夊簭闆� key 褰撲腑銆�
+	 * 濡傛灉鏌愪釜 member 宸茬粡鏄湁搴忛泦鐨勬垚鍛橈紝閭d箞鏇存柊杩欎釜 member 鐨� score 鍊硷紝
+	 * 骞堕�氳繃閲嶆柊鎻掑叆杩欎釜 member 鍏冪礌锛屾潵淇濊瘉璇� member 鍦ㄦ纭殑浣嶇疆涓娿��
+	 */
+	public Long zAdd(String key, Map<Object, Double> scoreMembers) {
+		Set<ZSetOperations.TypedTuple<Object>> tuples = new HashSet<>();
+		scoreMembers.forEach((k, v) -> {
+			tuples.add(new DefaultTypedTuple<>(k, v));
+		});
+		return zSetOps.add(key, tuples);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 鐨勫熀鏁般��
+	 */
+	public Long zCard(String key) {
+		return zSetOps.zCard(key);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 涓紝 score 鍊煎湪 min 鍜� max 涔嬮棿(榛樿鍖呮嫭 score 鍊肩瓑浜� min 鎴� max )鐨勬垚鍛樼殑鏁伴噺銆�
+	 * 鍏充簬鍙傛暟 min 鍜� max 鐨勮缁嗕娇鐢ㄦ柟娉曪紝璇峰弬鑰� ZRANGEBYSCORE 鍛戒护銆�
+	 */
+	public Long zCount(String key, double min, double max) {
+		return zSetOps.count(key, min, max);
+	}
+
+	/**
+	 * 涓烘湁搴忛泦 key 鐨勬垚鍛� member 鐨� score 鍊煎姞涓婂閲� increment 銆�
+	 */
+	public Double zIncrBy(String key, Object member, double score) {
+		return zSetOps.incrementScore(key, member, score);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 涓紝鎸囧畾鍖洪棿鍐呯殑鎴愬憳銆�
+	 * 鍏朵腑鎴愬憳鐨勪綅缃寜 score 鍊奸�掑(浠庡皬鍒板ぇ)鏉ユ帓搴忋��
+	 * 鍏锋湁鐩稿悓 score 鍊肩殑鎴愬憳鎸夊瓧鍏稿簭(lexicographical order )鏉ユ帓鍒椼��
+	 * 濡傛灉浣犻渶瑕佹垚鍛樻寜 score 鍊奸�掑噺(浠庡ぇ鍒板皬)鏉ユ帓鍒楋紝璇蜂娇鐢� ZREVRANGE 鍛戒护銆�
+	 */
+	public Set zRange(String key, long start, long end) {
+		return zSetOps.range(key, start, end);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 涓紝鎸囧畾鍖洪棿鍐呯殑鎴愬憳銆�
+	 * 鍏朵腑鎴愬憳鐨勪綅缃寜 score 鍊奸�掑噺(浠庡ぇ鍒板皬)鏉ユ帓鍒椼��
+	 * 鍏锋湁鐩稿悓 score 鍊肩殑鎴愬憳鎸夊瓧鍏稿簭鐨勯�嗗簭(reverse lexicographical order)鎺掑垪銆�
+	 * 闄や簡鎴愬憳鎸� score 鍊奸�掑噺鐨勬搴忔帓鍒楄繖涓�鐐瑰锛� ZREVRANGE 鍛戒护鐨勫叾浠栨柟闈㈠拰 ZRANGE 鍛戒护涓�鏍枫��
+	 */
+	public Set zRevrange(String key, long start, long end) {
+		return zSetOps.reverseRange(key, start, end);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 涓紝鎵�鏈� score 鍊间粙浜� min 鍜� max 涔嬮棿(鍖呮嫭绛変簬 min 鎴� max )鐨勬垚鍛樸��
+	 * 鏈夊簭闆嗘垚鍛樻寜 score 鍊奸�掑(浠庡皬鍒板ぇ)娆″簭鎺掑垪銆�
+	 */
+	public Set zRangeByScore(String key, double min, double max) {
+		return zSetOps.rangeByScore(key, min, max);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 涓垚鍛� member 鐨勬帓鍚嶃�傚叾涓湁搴忛泦鎴愬憳鎸� score 鍊奸�掑(浠庡皬鍒板ぇ)椤哄簭鎺掑垪銆�
+	 * 鎺掑悕浠� 0 涓哄簳锛屼篃灏辨槸璇达紝 score 鍊兼渶灏忕殑鎴愬憳鎺掑悕涓� 0 銆�
+	 * 浣跨敤 ZREVRANK 鍛戒护鍙互鑾峰緱鎴愬憳鎸� score 鍊奸�掑噺(浠庡ぇ鍒板皬)鎺掑垪鐨勬帓鍚嶃��
+	 */
+	public Long zRank(String key, Object member) {
+		return zSetOps.rank(key, member);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 涓垚鍛� member 鐨勬帓鍚嶃�傚叾涓湁搴忛泦鎴愬憳鎸� score 鍊奸�掑噺(浠庡ぇ鍒板皬)鎺掑簭銆�
+	 * 鎺掑悕浠� 0 涓哄簳锛屼篃灏辨槸璇达紝 score 鍊兼渶澶х殑鎴愬憳鎺掑悕涓� 0 銆�
+	 * 浣跨敤 ZRANK 鍛戒护鍙互鑾峰緱鎴愬憳鎸� score 鍊奸�掑(浠庡皬鍒板ぇ)鎺掑垪鐨勬帓鍚嶃��
+	 */
+	public Long zRevrank(String key, Object member) {
+		return zSetOps.reverseRank(key, member);
+	}
+
+	/**
+	 * 绉婚櫎鏈夊簭闆� key 涓殑涓�涓垨澶氫釜鎴愬憳锛屼笉瀛樺湪鐨勬垚鍛樺皢琚拷鐣ャ��
+	 * 褰� key 瀛樺湪浣嗕笉鏄湁搴忛泦绫诲瀷鏃讹紝杩斿洖涓�涓敊璇��
+	 */
+	public Long zRem(String key, Object... members) {
+		return zSetOps.remove(key, members);
+	}
+
+	/**
+	 * 杩斿洖鏈夊簭闆� key 涓紝鎴愬憳 member 鐨� score 鍊笺��
+	 * 濡傛灉 member 鍏冪礌涓嶆槸鏈夊簭闆� key 鐨勬垚鍛橈紝鎴� key 涓嶅瓨鍦紝杩斿洖 nil 銆�
+	 */
+	public Double zScore(String key, Object member) {
+		return zSetOps.score(key, member);
+	}
+
+}

--
Gitblit v1.9.3