SpringBoot2.X整合Redis
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
66套java從入門到精通實(shí)戰(zhàn)課程分享
項(xiàng)目采用SpringBoot2.3.3
項(xiàng)目目錄
pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0modelVersion><parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>2.3.3.RELEASEversion><relativePath/>parent><groupId>net.auiogroupId><artifactId>spring-boot-redisartifactId><version>0.0.1-SNAPSHOTversion><name>spring-boot-redisname><description>Demo project for Spring Bootdescription><properties><java.version>1.8java.version><springboot.version>2.2.3.RELEASEspringboot.version><fastjson.version>1.2.54fastjson.version>properties><dependencies><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId><version>${springboot.version}version>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-data-redisartifactId>dependency><dependency><groupId>org.apache.commonsgroupId><artifactId>commons-pool2artifactId>dependency><dependency><groupId>com.alibabagroupId><artifactId>fastjsonartifactId><version>${fastjson.version}version>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-devtoolsartifactId><scope>runtimescope><optional>trueoptional>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId><scope>testscope><exclusions><exclusion><groupId>org.junit.vintagegroupId><artifactId>junit-vintage-engineartifactId>exclusion>exclusions>dependency>dependencies><build><plugins><plugin><groupId>org.springframework.bootgroupId><artifactId>spring-boot-maven-pluginartifactId><configuration><fork>truefork>configuration>plugin>plugins>build>project>
application.properties
spring.redis.host=localhostspring.redis.port=6379spring.redis.jedis.pool.max-active=8spring.redis.jedis.pool.max-idle=500spring.redis.jedis.pool.max-wait=-1spring.redis.jedis.pool.min-idle=0spring.redis.lettuce.shutdown-timeout=0
RedisConfig.java
package net.auio.springboot.config;import net.auio.springboot.Initializr.MyRedisSerInitializr;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.serializer.StringRedisSerializer;import java.net.UnknownHostException;@Configurationpublic class RedisConfig {@Beanpublic RedisTemplateredisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplatetemplate = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory);StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();MyRedisSerInitializr myRedisSerInitializr = new MyRedisSerInitializr();template.setKeySerializer(stringRedisSerializer);template.setValueSerializer(myRedisSerInitializr);template.setHashKeySerializer(stringRedisSerializer);template.setHashValueSerializer(myRedisSerInitializr);return template;}}
RedisController.java
package net.auio.springboot.controller;import net.auio.springboot.exception.BusinessException;import net.auio.springboot.service.RedisService;import org.springframework.util.StringUtils;import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;public class RedisController {RedisService redisService;public String getvalue( String key){if (!StringUtils.isEmpty(key)){if(!redisService.hasKey(key)){return "key不存在";}Object o = redisService.get(key);return o.toString();}else{return "key不允許為空";}}public String addStringRedis(String key,String value){try {redisService.set(key,value);return key+"添加成功";} catch (Exception e) {e.printStackTrace();throw new BusinessException(1001,e.getMessage());}}}
BusinessException.java
package net.auio.springboot.exception;public class BusinessException extends RuntimeException {private final int messageCode;private final String detailMessage;public BusinessException(int messageCode,String message){super(message);this.messageCode=messageCode;this.detailMessage =message;}public int getMessageCode() {return messageCode;}public String getDetailMessage() {return detailMessage;}}
MyRedisSerInitializr.java
package net.auio.springboot.Initializr;import com.alibaba.fastjson.JSON;import org.springframework.data.redis.serializer.RedisSerializer;import org.springframework.data.redis.serializer.SerializationException;import java.nio.charset.Charset;import java.nio.charset.StandardCharsets;public class MyRedisSerInitializr implements RedisSerializer<Object> {private final Charset charset;public MyRedisSerInitializr() {this(StandardCharsets.UTF_8);}public MyRedisSerInitializr(Charset charset) {this.charset = charset;}public byte[] serialize(Object o) throws SerializationException {if(o==null){return new byte[0];}if (o instanceof String){return o.toString().getBytes(charset);}else {String string=JSON.toJSONString(o);return string.getBytes(charset);}}public Object deserialize(byte[] bytes) throws SerializationException {return (bytes==null ? null : new String(bytes,charset));}}
RedisService.java
package net.auio.springboot.service;import net.auio.springboot.exception.BusinessException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.stereotype.Service;import javax.annotation.Resource;import java.util.*;import java.util.concurrent.TimeUnit;public class RedisService {private RedisTemplateredisTemplate; /** -------------------key相關(guān)操作--------------------- *//*** 是否存在key* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Boolean* @throws*/public Boolean hasKey(String key) {if (null==key){return false;}return redisTemplate.hasKey(key);}/*** 刪除key* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return Boolean 成功返回true 失敗返回false* @throws*/public Boolean delete(String key) {if (null==key){return false;}return redisTemplate.delete(key);}/*** 批量刪除key* @Author: 妖妖玖* @CreateDate: 2019/8/27 20:27* @UpdateUser:* @UpdateDate: 2019/8/27 20:27* @Version: 0.0.1* @param keys* @return Long 返回成功刪除key的數(shù)量* @throws*/public Long delete(Collectionkeys) { return redisTemplate.delete(keys);}/*** 設(shè)置過期時(shí)間* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param timeout? * @param unit* @return java.lang.Boolean* @throws*/public Boolean expire(String key, long timeout, TimeUnit unit) {if (null==key||null==unit){return false;}return redisTemplate.expire(key, timeout, unit);}/*** 查找匹配的key* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param pattern* @return java.util.Set* @throws*/public Setkeys(String pattern) { if (null==pattern){return null;}return redisTemplate.keys(pattern);}/*** 移除 key 的過期時(shí)間,key 將持久保持* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Boolean* @throws*/public Boolean persist(String key) {if (null==key){return false;}return redisTemplate.persist(key);}/*** 返回 key 的剩余的過期時(shí)間* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param unit* @return java.lang.Long 當(dāng) key 不存在時(shí),返回 -2 。當(dāng) key 存在但沒有設(shè)置剩余生存時(shí)間時(shí),返回 -1 。否則,以秒為單位,返回 key的剩余生存時(shí)間* @throws*/public Long getExpire(String key, TimeUnit unit) {if(null==key||null==unit){throw new BusinessException(4001004,"key or TomeUnit 不能為空");}return redisTemplate.getExpire(key, unit);}//*************String相關(guān)數(shù)據(jù)類型***************************/*** 設(shè)置指定 key 的值* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param value* @return void* @throws*/public void set(String key, Object value) {if(null==key||null==value){return;}redisTemplate.opsForValue().set(key, value);}/*** 設(shè)置key 的值 并設(shè)置過期時(shí)間* @Author: 妖妖玖迎學(xué)教育* @UpdateUser:* @Version: 0.0.1* @param key? * @param value? * @param time? * @param unit* @return void* @throws*/public void set(String key,Object value,long time,TimeUnit unit){if(null==key||null==value||null==unit){return;}redisTemplate.opsForValue().set(key,value,time,unit);}/*** 設(shè)置key 的值 并設(shè)置過期時(shí)間* key存在 不做操作返回false* key不存在設(shè)置值返回true* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param value? * @param time? * @param unit* @return java.lang.Boolean* @throws*/public Boolean setifAbsen(String key,Object value,long time,TimeUnit unit){if(null==key||null==value||null==unit){throw new BusinessException(4001004,"kkey、value、unit都不能為空");}return redisTemplate.opsForValue().setIfAbsent(key,value,time,unit);}/*** 獲取指定Key的Value。如果與該Key關(guān)聯(lián)的Value不是string類型,Redis將拋出異常,* 因?yàn)镚ET命令只能用于獲取string Value,如果該Key不存在,返回null* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Object* @throws*/public Object get(String key){if(null==key){return null;}return redisTemplate.opsForValue().get(key);}/*** 很明顯先get再set就說先獲取key值對應(yīng)的value然后再set 新的value 值。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param value* @return java.lang.Object* @throws*/public Object getSet(String key,Object value){if(null==key){return null;}return redisTemplate.opsForValue().getAndSet(key,value);}/*** 通過批量的key獲取批量的value* @Author: 妖妖玖迎學(xué)教育* @UpdateUser:* @Version: 0.0.1* @param keys* @return java.util.List* @throws*/public Listif(null==keys){return Collections.emptyList();}return redisTemplate.opsForValue().multiGet(keys);}/*** 將指定Key的Value原子性的增加increment。如果該Key不存在,其初始值為0,在incrby之后其值為increment。* 如果Value的值不能轉(zhuǎn)換為整型值,如Hi,該操作將執(zhí)行失敗并拋出相應(yīng)異常。操作成功則返回增加后的value值。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param increment* @return long* @throws*/public long incrby(String key,long increment){if(null==key){throw new BusinessException(4001004,"key不能為空");}return redisTemplate.opsForValue().increment(key,increment);}/**** 將指定Key的Value原子性的減少decrement。如果該Key不存在,其初始值為0,* 在decrby之后其值為-decrement。如果Value的值不能轉(zhuǎn)換為整型值,* 如Hi,該操作將執(zhí)行失敗并拋出相應(yīng)的異常。操作成功則返回減少后的value值。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param decrement* @return java.lang.Long* @throws*/public Long decrby(String key,long decrement){if(null==key){throw new BusinessException(4001004,"key不能為空");}return redisTemplate.opsForValue().decrement(key,decrement);}/*** 如果該Key已經(jīng)存在,APPEND命令將參數(shù)Value的數(shù)據(jù)追加到已存在Value的末尾。如果該Key不存在,* APPEND命令將會(huì)創(chuàng)建一個(gè)新的Key/Value。返回追加后Value的字符串長度。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param value* @return java.lang.Integer* @throws*/public Integer append(String key,String value){if(key==null){throw new BusinessException(4001004,"key不能為空");}return redisTemplate.opsForValue().append(key,value);}//******************hash數(shù)據(jù)類型*********************/*** 通過key 和 field 獲取指定的 value* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param field迎學(xué)教育* @return java.lang.Object* @throws*/public Object hget(String key, Object field) {if(null==key||null==field){return null;}return redisTemplate.opsForHash().get(key,field);}/*** 為指定的Key設(shè)定Field/Value對,如果Key不存在,該命令將創(chuàng)建新Key以用于存儲(chǔ)參數(shù)中的Field/Value對,* 如果參數(shù)中的Field在該Key中已經(jīng)存在,則用新值覆蓋其原有值。* 返回1表示新的Field被設(shè)置了新值,0表示Field已經(jīng)存在,用新值覆蓋原有值。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param field* @param value* @return* @throws*/public void hset(String key, Object field, Object value) {if(null==key||null==field){return;}redisTemplate.opsForHash().put(key,field,value);}/*** 判斷指定Key中的指定Field是否存在,返回true表示存在,false表示參數(shù)中的Field或Key不存在。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param field* @return java.lang.Boolean* @throws*/public Boolean hexists(String key, Object field) {if(null==key||null==field){return false;}return redisTemplate.opsForHash().hasKey(key,field);}/*** 從指定Key的Hashes Value中刪除參數(shù)中指定的多個(gè)字段,如果不存在的字段將被忽略,* 返回實(shí)際刪除的Field數(shù)量。如果Key不存在,則將其視為空Hashes,并返回0。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param fields* @return java.lang.Long* @throws*/public Long hdel(String key, Object... fields) {if(null==key||null==fields||fields.length==0){return 0L;}return redisTemplate.opsForHash().delete(key,fields);}/*** 通過key獲取所有的field和value* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.util.Map* @throws*/public Mapif(key==null){return null;}return redisTemplate.opsForHash().entries(key);}/*** 逐對依次設(shè)置參數(shù)中給出的Field/Value對。如果其中某個(gè)Field已經(jīng)存在,則用新值覆蓋原有值。* 如果Key不存在,則創(chuàng)建新Key,同時(shí)設(shè)定參數(shù)中的Field/Value。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param hash* @return* @throws*/public void hmset(String key, Maphash) { if(null==key||null==hash){return;}redisTemplate.opsForHash().putAll(key,hash);}/*** 獲取和參數(shù)中指定Fields關(guān)聯(lián)的一組Values,其返回順序等同于Fields的請求順序。* 如果請求的Field不存在,其值對應(yīng)的value為null。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param fields* @return java.util.List* @throws*/public Listif(null==key||null==fields){return null;}return redisTemplate.opsForHash().multiGet(key,fields);}/*** 對應(yīng)key的字段自增相應(yīng)的值* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param field? * @param increment* @return java.lang.Long* @throws*/public Long hIncrBy(String key,Object field,long increment){if (null==key||null==field){throw new BusinessException(4001004,"key or field 不能為空");}return redisTemplate.opsForHash().increment(key,field,increment);}//***************List數(shù)據(jù)類型***************/*** 向列表左邊添加元素。如果該Key不存在,該命令將在插入之前創(chuàng)建一個(gè)與該Key關(guān)聯(lián)的空鏈表,之后再將數(shù)據(jù)從鏈表的頭部插入。* 如果該鍵的Value不是鏈表類型,該命令將將會(huì)拋出相關(guān)異常。操作成功則返回插入后鏈表中元素的數(shù)量。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param strs 可以使一個(gè)string 也可以使string數(shù)組迎學(xué)教育* @return java.lang.Long 返回操作的value個(gè)數(shù)* @throws*/public Long lpush(String key, Object... strs) {if(null==key){return 0L;}return redisTemplate.opsForList().leftPushAll(key,strs);}/*** 向列表右邊添加元素。如果該Key不存在,該命令將在插入之前創(chuàng)建一個(gè)與該Key關(guān)聯(lián)的空鏈表,之后再將數(shù)據(jù)從鏈表的尾部插入。* 如果該鍵的Value不是鏈表類型,該命令將將會(huì)拋出相關(guān)異常。操作成功則返回插入后鏈表中元素的數(shù)量。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param strs 可以使一個(gè)string 也可以使string數(shù)組* @return java.lang.Long 返回操作的value個(gè)數(shù)* @throws*/public Long rpush(String key, Object... strs) {if(null==key){return 0L;}return redisTemplate.opsForList().rightPushAll(key,strs);}/*** 返回并彈出指定Key關(guān)聯(lián)的鏈表中的第一個(gè)元素,即頭部元素。如果該Key不存在,* 返回nil。LPOP命令執(zhí)行兩步操作:第一步是將列表左邊的元素從列表中移除,第二步是返回被移除的元素值。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Object* @throws*/public Object lpop(String key) {if(null==key){return null;}return redisTemplate.opsForList().leftPop(key);}/*** 返回并彈出指定Key關(guān)聯(lián)的鏈表中的最后一個(gè)元素,即頭部元素。如果該Key不存在,返回nil。* RPOP命令執(zhí)行兩步操作:第一步是將列表右邊的元素從列表中移除,第二步是返回被移除的元素值。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Object* @throws*/public Object rpop(String key) {if(null==key){return null;}return redisTemplate.opsForList().rightPop(key);}/***該命令的參數(shù)start和end都是0-based。即0表示鏈表頭部(leftmost)的第一個(gè)元素。* 其中start的值也可以為負(fù)值,-1將表示鏈表中的最后一個(gè)元素,即尾部元素,-2表示倒數(shù)第二個(gè)并以此類推。* 該命令在獲取元素時(shí),start和end位置上的元素也會(huì)被取出。如果start的值大于鏈表中元素的數(shù)量,* 空鏈表將會(huì)被返回。如果end的值大于元素的數(shù)量,該命令則獲取從start(包括start)開始,鏈表中剩余的所有元素。* 注:Redis的列表起始索引為0。顯然,LRANGE numbers 0 -1 可以獲取列表中的所有元素。返回指定范圍內(nèi)元素的列表。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param start* @param end* @return java.util.List迎學(xué)教育* @throws*/public Listlrange(String key, long start, long end) { if(null==key){return null;}return redisTemplate.opsForList().range(key,start,end);}/*** 讓列表只保留指定區(qū)間內(nèi)的元素,不在指定區(qū)間之內(nèi)的元素都將被刪除。* 下標(biāo) 0 表示列表的第一個(gè)元素,以 1 表示列表的第二個(gè)元素,以此類推。* 你也可以使用負(fù)數(shù)下標(biāo),以 -1 表示列表的最后一個(gè)元素, -2 表示列表的倒數(shù)第二個(gè)元素,以此類推。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param start* @param end* @return* @throws*/public void ltrim(String key, long start, long end) {if(null==key){return;}redisTemplate.opsForList().trim(key,start,end);}/*** 該命令將返回鏈表中指定位置(index)的元素,index是0-based,表示從頭部位置開始第index的元素,* 如果index為-1,表示尾部元素。如果與該Key關(guān)聯(lián)的不是鏈表,該命令將返回相關(guān)的錯(cuò)誤信息。如果超出index返回這返回nil。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @param index* @return java.lang.Object* @throws*/public Object lindex(String key, long index) {if(null==key){return null;}return redisTemplate.opsForList().index(key,index);}/*** 返回指定Key關(guān)聯(lián)的鏈表中元素的數(shù)量,如果該Key不存在,則返回0。如果與該Key關(guān)聯(lián)的Value的類型不是鏈表,則拋出相關(guān)的異常。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Long* @throws*/public Long llen(String key) {if(null==key){return 0L;}return redisTemplate.opsForList().size(key);}//***************Set數(shù)據(jù)類型*************/*** 如果在插入的過程用,參數(shù)中有的成員在Set中已經(jīng)存在,該成員將被忽略,而其它成員仍將會(huì)被正常插入。* 如果執(zhí)行該命令之前,該Key并不存在,該命令將會(huì)創(chuàng)建一個(gè)新的Set,此后再將參數(shù)中的成員陸續(xù)插入。返回實(shí)際插入的成員數(shù)量。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param members 可以是一個(gè)String 也可以是一個(gè)String數(shù)組* @return java.lang.Long 添加成功的個(gè)數(shù)迎學(xué)教育* @throws*/public Long sadd(String key, Object... members) {if (null==key){return 0L;}return redisTemplate.opsForSet().add(key, members);}/*** 返回Set中成員的數(shù)量,如果該Key并不存在,返回0。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Long* @throws*/public Long scard(String key) {if (null==key){return 0L;}return redisTemplate.opsForSet().size(key);}/*** 判斷參數(shù)中指定成員是否已經(jīng)存在于與Key相關(guān)聯(lián)的Set集合中。返回true表示已經(jīng)存在,false表示不存在,或該Key本身并不存在。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param member* @return java.lang.Boolean* @throws*/public Boolean sismember(String key, Object member) {if (null==key){return false;}return redisTemplate.opsForSet().isMember(key,member);}/*** 和SPOP一樣,隨機(jī)的返回Set中的一個(gè)成員,不同的是該命令并不會(huì)刪除返回的成員。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.String* @throws*/public Object srandmember(String key) {if (null==key){return null;}return redisTemplate.opsForSet().randomMember(key);}/*** 和SPOP一樣,隨機(jī)的返回Set中的一個(gè)成員,不同的是該命令并不會(huì)刪除返回的成員。* 還可以傳遞count參數(shù)來一次隨機(jī)獲得多個(gè)元素,根據(jù)count的正負(fù)不同,具體表現(xiàn)也不同。* 當(dāng)count 為正數(shù)時(shí),SRANDMEMBER 會(huì)隨機(jī)從集合里獲得count個(gè)不重復(fù)的元素。* 如果count的值大于集合中的元素個(gè)數(shù),則SRANDMEMBER 會(huì)返回集合中的全部元素。* 當(dāng)count為負(fù)數(shù)時(shí),SRANDMEMBER 會(huì)隨機(jī)從集合里獲得|count|個(gè)的元素,如果|count|大與集合中的元素,* 就會(huì)返回全部元素不夠的以重復(fù)元素補(bǔ)齊,如果key不存在則返回nil。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param count迎學(xué)教育* @return java.util.List* @throws*/public Listsrandmember(String key,int count) { if(null==key){return null;}return redisTemplate.opsForSet().randomMembers(key,count);}/*** 通過key隨機(jī)刪除一個(gè)set中的value并返回該值* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.String* @throws*/public Object spop(String key) {if (null==key){return null;}return redisTemplate.opsForSet().pop(key);}/*** 通過key獲取set中所有的value* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.util.Set* @throws*/public Setsmembers(String key) { if (null==key){return null;}return redisTemplate.opsForSet().members(key);}/*** 從與Key關(guān)聯(lián)的Set中刪除參數(shù)中指定的成員,不存在的參數(shù)成員將被忽略,* 如果該Key并不存在,將視為空Set處理。返回從Set中實(shí)際移除的成員數(shù)量,如果沒有則返回0。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param members* @return java.lang.Long* @throws*/public Long srem(String key, Object... members) {if (null==key){return 0L;}return redisTemplate.opsForSet().remove(key,members);}/*** 將元素value從一個(gè)集合移到另一個(gè)集合* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param srckey? * @param dstkey? * @param member* @return java.lang.Long* @throws*/public Boolean smove(String srckey, String dstkey, Object member) {if (null==srckey||null==dstkey){return false;}return redisTemplate.opsForSet().move(srckey,member,dstkey);}/*** 獲取兩個(gè)集合的并集* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param otherKeys* @return java.util.Set返回兩個(gè)集合合并值 * @throws*/public SetsUnion(String key, String otherKeys) { if (null==key||otherKeys==null){return null;}return redisTemplate.opsForSet().union(key, otherKeys);}//**********Sorted Set 數(shù)據(jù)類型********************/***添加參數(shù)中指定的所有成員及其分?jǐn)?shù)到指定key的Sorted Set中,在該命令中我們可以指定多組score/member作為參數(shù)。* 如果在添加時(shí)參數(shù)中的某一成員已經(jīng)存在,該命令將更新此成員的分?jǐn)?shù)為新值,同時(shí)再將該成員基于新值重新排序。* 如果鍵不存在,該命令將為該鍵創(chuàng)建一個(gè)新的Sorted Set Value,并將score/member對插入其中。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param score? * @param member* @return java.lang.Long* @throws*/public Boolean zadd(String key, double score, Object member) {if (null==key){return false;}return redisTemplate.opsForZSet().add(key,member,score);}/*** 該命令將移除參數(shù)中指定的成員,其中不存在的成員將被忽略。* 如果與該Key關(guān)聯(lián)的Value不是Sorted Set,相應(yīng)的錯(cuò)誤信息將被返回。如果操作成功則返回實(shí)際被刪除的成員數(shù)量。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param members 可以使一個(gè)string 也可以是一個(gè)string數(shù)組* @return java.lang.Long* @throws*/public Long zrem(String key, Object... members) {if(null==key||null==members){return 0L;}return redisTemplate.opsForZSet().remove(key,members);}/*** 返回Sorted Set中的成員數(shù)量,如果該Key不存在,返回0。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key* @return java.lang.Long迎學(xué)教育* @throws*/public Long zcard(String key) {if (null==key){return 0L;}return redisTemplate.opsForZSet().size(key);}/*** 該命令將為指定Key中的指定成員增加指定的分?jǐn)?shù)。如果成員不存在,該命令將添加該成員并假設(shè)其初始分?jǐn)?shù)為0,* 此后再將其分?jǐn)?shù)加上increment。如果Key不存在,該命令將創(chuàng)建該Key及其關(guān)聯(lián)的Sorted Set,* 并包含參數(shù)指定的成員,其分?jǐn)?shù)為increment參數(shù)。如果與該Key關(guān)聯(lián)的不是Sorted Set類型,* 相關(guān)的錯(cuò)誤信息將被返回。如果不報(bào)錯(cuò)則以串形式表示的新分?jǐn)?shù)。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param score? * @param member* @return java.lang.Double* @throws*/public Double zincrby(String key, double score, Object member) {if (null==key){throw new BusinessException(4001004,"key 不能為空");}return redisTemplate.opsForZSet().incrementScore(key,member,score);}/*** 該命令用于獲取分?jǐn)?shù)(score)在min和max之間的成員數(shù)量。* (min=* 同理zcount key min (max 則表明(min=* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param min? * @param max* @return java.lang.Long* @throws*/public Long zcount(String key, double min, double max) {if (null==key){return 0L;}return redisTemplate.opsForZSet().count(key, min, max);}/*** Sorted Set中的成員都是按照分?jǐn)?shù)從低到高的順序存儲(chǔ),該命令將返回參數(shù)中指定成員的位置值,* 其中0表示第一個(gè)成員,它是Sorted Set中分?jǐn)?shù)最低的成員。如果該成員存在,則返回它的位置索引值。否則返回nil。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param member* @return java.lang.Long* @throws*/public Long zrank(String key, Object member) {if (null==key){return null;}return redisTemplate.opsForZSet().rank(key,member);}/*** 如果該成員存在,以字符串的形式返回其分?jǐn)?shù),否則返回null* @Author: 妖妖玖* @UpdateUser:迎學(xué)教育* @Version: 0.0.1* @param key? * @param member* @return java.lang.Double* @throws*/public Double zscore(String key, Object member) {if (null==key){return null;}return redisTemplate.opsForZSet().score(key,member);}/*** 該命令返回順序在參數(shù)start和stop指定范圍內(nèi)的成員,這里start和stop參數(shù)都是0-based,即0表示第一個(gè)成員,-1表示最后一個(gè)成員。如果start大于該Sorted* Set中的最大索引值,或start > stop,此時(shí)一個(gè)空集合將被返回。如果stop大于最大索引值,* 該命令將返回從start到集合的最后一個(gè)成員。如果命令中帶有可選參數(shù)WITHSCORES選項(xiàng),* 該命令在返回的結(jié)果中將包含每個(gè)成員的分?jǐn)?shù)值,如value1,score1,value2,score2...。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param min? * @param max* @return java.util.Set指定區(qū)間內(nèi)的有序集成員的列表。 * @throws*/public Setzrange(String key, long min, long max) { if (null==key){return null;}return redisTemplate.opsForZSet().range(key, min, max);}/*** 該命令的功能和ZRANGE基本相同,唯一的差別在于該命令是通過反向排序獲取指定位置的成員,* 即從高到低的順序。如果成員具有相同的分?jǐn)?shù),則按降序字典順序排序。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param start? * @param end* @return java.util.Set* @throws*/public SetzReverseRange(String key, long start, long end) { if (null==key){return null;}return redisTemplate.opsForZSet().reverseRange(key, start, end);}/*** 該命令將返回分?jǐn)?shù)在min和max之間的所有成員,即滿足表達(dá)式min <= score <= max的成員,* 其中返回的成員是按照其分?jǐn)?shù)從低到高的順序返回,如果成員具有相同的分?jǐn)?shù),* 則按成員的字典順序返回。可選參數(shù)LIMIT用于限制返回成員的數(shù)量范圍。* 可選參數(shù)offset表示從符合條件的第offset個(gè)成員開始返回,同時(shí)返回count個(gè)成員。* 可選參數(shù)WITHSCORES的含義參照ZRANGE中該選項(xiàng)的說明。*最后需要說明的是參數(shù)中min和max的規(guī)則可參照命令ZCOUNT。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param max? * @param min* @return java.util.Set* @throws*/public Setzrangebyscore(String key, double min, double max) { if (null==key){return null;}return redisTemplate.opsForZSet().rangeByScore(key, min, max);}/*** 該命令除了排序方式是基于從高到低的分?jǐn)?shù)排序之外,其它功能和參數(shù)含義均與ZRANGEBYSCORE相同。* 需要注意的是該命令中的min和max參數(shù)的順序和ZRANGEBYSCORE命令是相反的。* @Author: 妖妖玖* @UpdateUser:* @Version: 0.0.1* @param key? * @param max? * @param min* @return java.util.Set* @throws*/public SetzrevrangeByScore(String key,double min,double max) { if (null==key){return null;}return redisTemplate.opsForZSet().reverseRangeByScore(key, min, max);}}
SpringBootRedisApplication .java
package net.auio.springboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;public class SpringBootRedisApplication {public static void main(String[] args) {SpringApplication.run(SpringBootRedisApplication.class, args);}}
版權(quán)聲明:本文為博主原創(chuàng)文章,遵循?CC 4.0 BY-SA?版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。
本文鏈接:
http://blog.csdn.net/weixin_42341298/article/details/108453504
粉絲福利:108本java從入門到大神精選電子書領(lǐng)取
???
?長按上方鋒哥微信二維碼?2 秒 備注「1234」即可獲取資料以及 可以進(jìn)入java1234官方微信群
感謝點(diǎn)贊支持下哈?
評論
圖片
表情
