1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        SpringBoot2.X整合Redis

        共 26298字,需瀏覽 53分鐘

         ·

        2020-09-12 20:29

        點擊上方藍色字體,選擇“標星公眾號”

        優(yōu)質文章,第一時間送達

        66套java從入門到精通實戰(zhàn)課程分享

        項目采用SpringBoot2.3.3
        項目目錄

        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 {
        @Bean public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) throws UnknownHostException { RedisTemplate template = 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;@RestController@RequestMapping(value = "/redis")public class RedisController {
        @Resource RedisService redisService;
        @GetMapping(value = "/getvalue/{key}") public String getvalue(@PathVariable("key") String key){ if (!StringUtils.isEmpty(key)){ if(!redisService.hasKey(key)){ return "key不存在"; } Object o = redisService.get(key); return o.toString(); }else{ return "key不允許為空"; } }
        @PostMapping(value = "/add") 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; }
        @Override 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); } }
        @Override 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;@Servicepublic class RedisService { @Resource private RedisTemplate redisTemplate; /** -------------------key相關操作--------------------- */ /** * 是否存在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的數量 * @throws */ public Long delete(Collection keys) { return redisTemplate.delete(keys); } /** * 設置過期時間 * @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 Set keys(String pattern) { if (null==pattern){ return null; } return redisTemplate.keys(pattern); } /** * 移除 key 的過期時間,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 的剩余的過期時間 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param unit * @return java.lang.Long 當 key 不存在時,返回 -2 。當 key 存在但沒有設置剩余生存時間時,返回 -1 。否 則,以秒為單位,返回 key的剩余生存時間 * @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相關數據類型*************************** /** * 設置指定 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); } /** * 設置key 的值 并設置過期時間 * @Author: 妖妖玖 迎學教育 * @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); } /** * 設置key 的值 并設置過期時間 * key存在 不做操作返回false * key不存在設置值返回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關聯的Value不是string類型,Redis將拋出異常, * 因為GET命令只能用于獲取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值對應的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: 妖妖玖 迎學教育 * @UpdateUser: * @Version: 0.0.1 * @param keys * @return java.util.List * @throws */ public List mget(Collection keys){ if(null==keys){ return Collections.emptyList(); } return redisTemplate.opsForValue().multiGet(keys); } /** * 將指定Key的Value原子性的增加increment。如果該Key不存在,其初始值為0,在incrby之后其值為increment。 * 如果Value的值不能轉換為整型值,如Hi,該操作將執(zhí)行失敗并拋出相應異常。操作成功則返回增加后的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的值不能轉換為整型值, * 如Hi,該操作將執(zhí)行失敗并拋出相應的異常。操作成功則返回減少后的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已經存在,APPEND命令將參數Value的數據追加到已存在Value的末尾。如果該Key不存在, * APPEND命令將會創(chuàng)建一個新的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數據類型********************* /** * 通過key 和 field 獲取指定的 value * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key * @param field 迎學教育 * @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設定Field/Value對,如果Key不存在,該命令將創(chuàng)建新Key以用于存儲參數中的Field/Value對, * 如果參數中的Field在該Key中已經存在,則用新值覆蓋其原有值。 * 返回1表示新的Field被設置了新值,0表示Field已經存在,用新值覆蓋原有值。 * @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表示參數中的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中刪除參數中指定的多個字段,如果不存在的字段將被忽略, * 返回實際刪除的Field數量。如果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 Map hgetall(String key) { if(key==null){ return null; } return redisTemplate.opsForHash().entries(key); } /** * 逐對依次設置參數中給出的Field/Value對。如果其中某個Field已經存在,則用新值覆蓋原有值。 * 如果Key不存在,則創(chuàng)建新Key,同時設定參數中的Field/Value。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key * @param hash * @return * @throws */ public void hmset(String key, Map hash) { if(null==key||null==hash){ return; } redisTemplate.opsForHash().putAll(key,hash); } /** * 獲取和參數中指定Fields關聯的一組Values,其返回順序等同于Fields的請求順序。 * 如果請求的Field不存在,其值對應的value為null。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key * @param fields * @return java.util.List * @throws */ public List hmget(String key, Collection fields) { if(null==key||null==fields){ return null; } return redisTemplate.opsForHash().multiGet(key,fields); } /** * 對應key的字段自增相應的值 * @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數據類型*************** /** * 向列表左邊添加元素。如果該Key不存在,該命令將在插入之前創(chuàng)建一個與該Key關聯的空鏈表,之后再將數據從鏈表的頭部插入。 * 如果該鍵的Value不是鏈表類型,該命令將將會拋出相關異常。操作成功則返回插入后鏈表中元素的數量。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key * @param strs 可以使一個string 也可以使string數組 迎學教育 * @return java.lang.Long 返回操作的value個數 * @throws */ public Long lpush(String key, Object... strs) { if(null==key){ return 0L; } return redisTemplate.opsForList().leftPushAll(key,strs); } /** * 向列表右邊添加元素。如果該Key不存在,該命令將在插入之前創(chuàng)建一個與該Key關聯的空鏈表,之后再將數據從鏈表的尾部插入。 * 如果該鍵的Value不是鏈表類型,該命令將將會拋出相關異常。操作成功則返回插入后鏈表中元素的數量。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key * @param strs 可以使一個string 也可以使string數組 * @return java.lang.Long 返回操作的value個數 * @throws */ public Long rpush(String key, Object... strs) { if(null==key){ return 0L; } return redisTemplate.opsForList().rightPushAll(key,strs); } /** * 返回并彈出指定Key關聯的鏈表中的第一個元素,即頭部元素。如果該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關聯的鏈表中的最后一個元素,即頭部元素。如果該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); } /** *該命令的參數start和end都是0-based。即0表示鏈表頭部(leftmost)的第一個元素。 * 其中start的值也可以為負值,-1將表示鏈表中的最后一個元素,即尾部元素,-2表示倒數第二個并以此類推。 * 該命令在獲取元素時,start和end位置上的元素也會被取出。如果start的值大于鏈表中元素的數量, * 空鏈表將會被返回。如果end的值大于元素的數量,該命令則獲取從start(包括start)開始,鏈表中剩余的所有元素。 * 注:Redis的列表起始索引為0。顯然,LRANGE numbers 0 -1 可以獲取列表中的所有元素。返回指定范圍內元素的列表。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key * @param start * @param end * @return java.util.List 迎學教育 * @throws */ public List lrange(String key, long start, long end) { if(null==key){ return null; } return redisTemplate.opsForList().range(key,start,end); } /** * 讓列表只保留指定區(qū)間內的元素,不在指定區(qū)間之內的元素都將被刪除。 * 下標 0 表示列表的第一個元素,以 1 表示列表的第二個元素,以此類推。 * 你也可以使用負數下標,以 -1 表示列表的最后一個元素, -2 表示列表的倒數第二個元素,以此類推。 * @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關聯的不是鏈表,該命令將返回相關的錯誤信息。如果超出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關聯的鏈表中元素的數量,如果該Key不存在,則返回0。如果與該Key關聯的Value的類型不是鏈表,則拋出相關的異 常。 * @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數據類型************* /** * 如果在插入的過程用,參數中有的成員在Set中已經存在,該成員將被忽略,而其它成員仍將會被正常插入。 * 如果執(zhí)行該命令之前,該Key并不存在,該命令將會創(chuàng)建一個新的Set,此后再將參數中的成員陸續(xù)插入。返回實際插入的成員數量。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param members 可以是一個String 也可以是一個String數組 * @return java.lang.Long 添加成功的個數 迎學教育 * @throws */ public Long sadd(String key, Object... members) { if (null==key){ return 0L; } return redisTemplate.opsForSet().add(key, members); } /** * 返回Set中成員的數量,如果該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); } /** * 判斷參數中指定成員是否已經存在于與Key相關聯的Set集合中。返回true表示已經存在,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一樣,隨機的返回Set中的一個成員,不同的是該命令并不會刪除返回的成員。 * @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一樣,隨機的返回Set中的一個成員,不同的是該命令并不會刪除返回的成員。 * 還可以傳遞count參數來一次隨機獲得多個元素,根據count的正負不同,具體表現也不同。 * 當count 為正數時,SRANDMEMBER 會隨機從集合里獲得count個不重復的元素。 * 如果count的值大于集合中的元素個數,則SRANDMEMBER 會返回集合中的全部元素。 * 當count為負數時,SRANDMEMBER 會隨機從集合里獲得|count|個的元素,如果|count|大與集合中的元素, * 就會返回全部元素不夠的以重復元素補齊,如果key不存在則返回nil。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param count 迎學教育 * @return java.util.List * @throws */ public List srandmember(String key,int count) { if(null==key){ return null; } return redisTemplate.opsForSet().randomMembers(key,count); } /** * 通過key隨機刪除一個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 Set smembers(String key) { if (null==key){ return null; } return redisTemplate.opsForSet().members(key); } /** * 從與Key關聯的Set中刪除參數中指定的成員,不存在的參數成員將被忽略, * 如果該Key并不存在,將視為空Set處理。返回從Set中實際移除的成員數量,如果沒有則返回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從一個集合移到另一個集合 * @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); } /** * 獲取兩個集合的并集 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param otherKeys * @return java.util.Set 返回兩個集合合并值 * @throws */ public Set sUnion(String key, String otherKeys) { if (null==key||otherKeys==null){ return null; } return redisTemplate.opsForSet().union(key, otherKeys); } //**********Sorted Set 數據類型******************** /** *添加參數中指定的所有成員及其分數到指定key的Sorted Set中,在該命令中我們可以指定多組score/member作為參數。 * 如果在添加時參數中的某一成員已經存在,該命令將更新此成員的分數為新值,同時再將該成員基于新值重新排序。 * 如果鍵不存在,該命令將為該鍵創(chuàng)建一個新的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); } /** * 該命令將移除參數中指定的成員,其中不存在的成員將被忽略。 * 如果與該Key關聯的Value不是Sorted Set,相應的錯誤信息將被返回。如果操作成功則返回實際被刪除的成員數量。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param members 可以使一個string 也可以是一個string數組 * @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中的成員數量,如果該Key不存在,返回0。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key * @return java.lang.Long 迎學教育 * @throws */ public Long zcard(String key) { if (null==key){ return 0L; } return redisTemplate.opsForZSet().size(key); } /** * 該命令將為指定Key中的指定成員增加指定的分數。如果成員不存在,該命令將添加該成員并假設其初始分數為0, * 此后再將其分數加上increment。如果Key不存在,該命令將創(chuàng)建該Key及其關聯的Sorted Set, * 并包含參數指定的成員,其分數為increment參數。如果與該Key關聯的不是Sorted Set類型, * 相關的錯誤信息將被返回。如果不報錯則以串形式表示的新分數。 * @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); } /** * 該命令用于獲取分數(score)在min和max之間的成員數量。 * (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中的成員都是按照分數從低到高的順序存儲,該命令將返回參數中指定成員的位置值, * 其中0表示第一個成員,它是Sorted Set中分數最低的成員。如果該成員存在,則返回它的位置索引值。否則返回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); } /** * 如果該成員存在,以字符串的形式返回其分數,否則返回null * @Author: 妖妖玖 * @UpdateUser: 迎學教育 * @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); } /** * 該命令返回順序在參數start和stop指定范圍內的成員,這里start和stop參數都是0-based,即0表示第一個成員,-1表示最后 一個成員。如果start大于該Sorted * Set中的最大索引值,或start > stop,此時一個空集合將被返回。如果stop大于最大索引值, * 該命令將返回從start到集合的最后一個成員。如果命令中帶有可選參數WITHSCORES選項, * 該命令在返回的結果中將包含每個成員的分數值,如value1,score1,value2,score2...。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param min ? * @param max * @return java.util.Set 指定區(qū)間內的有序集成員的列表。 * @throws */ public Set zrange(String key, long min, long max) { if (null==key){ return null; } return redisTemplate.opsForZSet().range(key, min, max); } /** * 該命令的功能和ZRANGE基本相同,唯一的差別在于該命令是通過反向排序獲取指定位置的成員, * 即從高到低的順序。如果成員具有相同的分數,則按降序字典順序排序。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param start ? * @param end * @return java.util.Set * @throws */ public Set zReverseRange(String key, long start, long end) { if (null==key){ return null; } return redisTemplate.opsForZSet().reverseRange(key, start, end); } /** * 該命令將返回分數在min和max之間的所有成員,即滿足表達式min <= score <= max的成員, * 其中返回的成員是按照其分數從低到高的順序返回,如果成員具有相同的分數, * 則按成員的字典順序返回??蛇x參數LIMIT用于限制返回成員的數量范圍。 * 可選參數offset表示從符合條件的第offset個成員開始返回,同時返回count個成員。 * 可選參數WITHSCORES的含義參照ZRANGE中該選項的說明。*最后需要說明的是參數中min和max的規(guī)則可參照命令ZCOUNT。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param max ? * @param min * @return java.util.Set * @throws */ public Set zrangebyscore(String key, double min, double max) { if (null==key){ return null; } return redisTemplate.opsForZSet().rangeByScore(key, min, max); } /** * 該命令除了排序方式是基于從高到低的分數排序之外,其它功能和參數含義均與ZRANGEBYSCORE相同。 * 需要注意的是該命令中的min和max參數的順序和ZRANGEBYSCORE命令是相反的。 * @Author: 妖妖玖 * @UpdateUser: * @Version: 0.0.1 * @param key ? * @param max ? * @param min * @return java.util.Set * @throws */ public Set zrevrangeByScore(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;
        @SpringBootApplicationpublic class SpringBootRedisApplication {
        public static void main(String[] args) { SpringApplication.run(SpringBootRedisApplication.class, args); }
        }



        版權聲明:本文為博主原創(chuàng)文章,遵循?CC 4.0 BY-SA?版權協議,轉載請附上原文出處鏈接和本聲明。

        本文鏈接:

        http://blog.csdn.net/weixin_42341298/article/details/108453504




        粉絲福利:108本java從入門到大神精選電子書領取

        ???

        ?長按上方鋒哥微信二維碼?2 秒
        備注「1234」即可獲取資料以及
        可以進入java1234官方微信群



        感謝點贊支持下哈?

        瀏覽 35
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

          <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            丁香激情网 | 婷婷五月色 | 久久无码性爱视频 | 日韩在线免费观看视频 | 国产精品伦子伦 | 亚洲 中文 欧美 日韩 在线观看 | 亚洲国产精品二二三三区 | 爱爱网站一区 | 卫诗雅大尺度做爰床戏 | 亚洲AV综合色区无码国产网站 |