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