zset

 
<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post">
                    <div class="markdown_views">
                <p>引用:Redis 有序集合和无序集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。有序集合的成员是唯一的,但分数(score)却可以重复。redis正是通过分数来为集合中的成员进行从小到大的排序。此处我们使用redisTemplate,配置如下(详情请见链接:<a href="http://blog.csdn.net/weixin_37490221/article/details/78134105" target="_blank">RedisTemplate访问Redis数据结构(前言)</a>)</p>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering"><bean id=<span class="hljs-string">"redisTemplate"</span> class=<span class="hljs-string">"org.springframework.data.redis.core.RedisTemplate"</span>>  
    <property name=<span class="hljs-string">"connectionFactory"</span> ref=<span class="hljs-string">"jedisConnFactory"</span>/>  
    <property name=<span class="hljs-string">"keySerializer"</span>>
        <bean class=<span class="hljs-string">"org.springframework.data.redis.serializer.StringRedisSerializer"</span>/>
    </property>
    <property name=<span class="hljs-string">"hashKeySerializer"</span>>
        <bean class=<span class="hljs-string">"org.springframework.data.redis.serializer.StringRedisSerializer"</span>/>
    </property>
    <property name=<span class="hljs-string">"valueSerializer"</span>>
        <bean class=<span class="hljs-string">"org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"</span>/>
    </property>
    <property name=<span class="hljs-string">"hashValueSerializer"</span>>
        <bean class=<span class="hljs-string">"org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"</span>/>
    </property>
</bean> </code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li></ul></pre>

<p>ZSetOperations提供了一系列方法对有序集合进行操作。首先初始化spring工厂获得redisTemplate和opsForZSet </p>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-keyword">private</span> RedisTemplate<String,Object> redisTemplate;
    <span class="hljs-keyword">private</span> ZSetOperations<String, Object> opsForZSet;

    <span class="hljs-annotation">@SuppressWarnings</span>(<span class="hljs-string">"unchecked"</span>)
    <span class="hljs-annotation">@Before</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">before</span>(){
        <span class="hljs-annotation">@SuppressWarnings</span>(<span class="hljs-string">"resource"</span>)
        ApplicationContext context = <span class="hljs-keyword">new</span> ClassPathXmlApplicationContext(<span class="hljs-string">"/applicationContext.xml"</span>);
        redisTemplate = (RedisTemplate<String,Object>)context.getBean(<span class="hljs-string">"redisTemplate"</span>);
        opsForZSet = redisTemplate.opsForZSet();
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>



<h5 id="boolean-addk-key-v-value-double-score">Boolean add(K key, V value, double score);</h5>



<h5 id="set-v-rangek-key-long-start-long-end">Set< V > range(K key, long start, long end);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testAdd</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan1"</span>);
        <span class="hljs-comment">//将值添加到键中的排序集合,如果已存在,则更新其分数。</span>
        System.out.println(opsForZSet.add(<span class="hljs-string">"fan1"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>));<span class="hljs-comment">//true (这里的1.0可以用1代替,因为用double收参) </span>
        ZSetOperations.TypedTuple<Object> objectTypedTuple1 = <span class="hljs-keyword">new</span> DefaultTypedTuple<Object>(<span class="hljs-string">"b"</span>,<span class="hljs-number">2.0</span>);<span class="hljs-comment">//这里必须是2.0,因为那边是用Double收参</span>
        ZSetOperations.TypedTuple<Object> objectTypedTuple2 = <span class="hljs-keyword">new</span> DefaultTypedTuple<Object>(<span class="hljs-string">"c"</span>,<span class="hljs-number">3.0</span>);
        Set<ZSetOperations.TypedTuple<Object>> tuples = <span class="hljs-keyword">new</span> HashSet<ZSetOperations.TypedTuple<Object>>();
        tuples.add(objectTypedTuple1);
        tuples.add(objectTypedTuple2);
        System.out.println(opsForZSet.add(<span class="hljs-string">"fan1"</span>,tuples));<span class="hljs-comment">//2</span>
        <span class="hljs-comment">//通过索引区间返回有序集合指定区间内的成员,其中有序集成员按分数值递增(从小到大)顺序排列</span>
        System.out.println(opsForZSet.range(<span class="hljs-string">"fan1"</span>,<span class="hljs-number">0</span>,-<span class="hljs-number">1</span>));<span class="hljs-comment">//[a, b, c]</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre>



<h5 id="long-removek-key-object-values">Long remove(K key, Object… values);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testRemove</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan2"</span>);
        opsForZSet.add(<span class="hljs-string">"fan2"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        System.out.println(opsForZSet.range(<span class="hljs-string">"fan2"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));<span class="hljs-comment">//[a]</span>
        opsForZSet.remove(<span class="hljs-string">"fan2"</span>, <span class="hljs-string">"a"</span>);
        System.out.println(opsForZSet.range(<span class="hljs-string">"fan2"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));<span class="hljs-comment">//[]</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>



<h5 id="public-set-k-keysk-pattern">public Set< K > keys(K pattern)</h5>



<h5 id="double-incrementscorek-key-v-value-double-delta">Double incrementScore(K key, V value, double delta);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testIncrementScore</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan3"</span>);
        System.out.println(redisTemplate.keys(<span class="hljs-string">"fan3"</span>));<span class="hljs-comment">//[]</span>
        <span class="hljs-comment">//通过增量增加排序集中的元素的分数</span>
        System.out.println(opsForZSet.incrementScore(<span class="hljs-string">"fan3"</span>, <span class="hljs-string">"a"</span>, -<span class="hljs-number">1</span>));<span class="hljs-comment">//-1.0(可见默认技术为0)</span>
        System.out.println(redisTemplate.keys(<span class="hljs-string">"fan3"</span>));<span class="hljs-comment">//[fan3]</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre>



<h5 id="long-rankk-key-object-o">Long rank(K key, Object o);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testRank</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan4"</span>);
        opsForZSet.add(<span class="hljs-string">"fan4"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan4"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan4"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan4"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        System.out.println(opsForZSet.range(<span class="hljs-string">"fan4"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>));<span class="hljs-comment">//[d, a, c, b](从小到大)</span>
        <span class="hljs-comment">//在排序集中确定具有值的元素的索引,并返回其索引(从低到高)</span>
        System.out.println(opsForZSet.rank(<span class="hljs-string">"fan4"</span>, <span class="hljs-string">"b"</span>));<span class="hljs-comment">//3(从小到大且从零开始)</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>



<h5 id="long-reverserankk-key-object-o">Long reverseRank(K key, Object o);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testReverseRank</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan5"</span>);
        opsForZSet.add(<span class="hljs-string">"fan5"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan5"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan5"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan5"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//当从高到低时,确定排序集中的值的元素的索引。</span>
        System.out.println(opsForZSet.reverseRank(<span class="hljs-string">"fan5"</span>, <span class="hljs-string">"b"</span>));<span class="hljs-comment">//0(从大到小且从零开始)</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li></ul></pre>



<h5 id="set-typedtuple-v-rangewithscoresk-key-long-start-long-end">Set< TypedTuple< V >> rangeWithScores(K key, long start, long end);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testRangeWithScores</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan6"</span>);
        opsForZSet.add(<span class="hljs-string">"fan6"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan6"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan6"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan6"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//从排序集中获取开始和结束之间的元组(Tuple)。</span>
        Set<TypedTuple<Object>> rangeWithScores = opsForZSet.rangeWithScores(<span class="hljs-string">"fan6"</span>, <span class="hljs-number">0</span>  , -<span class="hljs-number">1</span>);
        Iterator<TypedTuple<Object>> iterator = rangeWithScores.iterator();
        <span class="hljs-keyword">while</span>(iterator.hasNext()){
            TypedTuple<Object> next = iterator.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
        <span class="hljs-comment">/*
            value:d score:-1.0
            value:a score:1.0
            value:c score:2.0
            value:b score:3.0
         */</span>
        }
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li></ul></pre>



<h5 id="set-v-rangebyscorek-key-double-min-double-max">Set< V > rangeByScore(K key, double min, double max);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testRangeByScore</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan7"</span>);
        opsForZSet.add(<span class="hljs-string">"fan7"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan7"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan7"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan7"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//得到分数在最小和最大值之间的元素。(从小到大)</span>
        Set<Object> rangeByScore = opsForZSet.rangeByScore(<span class="hljs-string">"fan7"</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
        System.out.println(rangeByScore);<span class="hljs-comment">//[a, c]</span>
        <span class="hljs-comment">//从开始到结束的范围内获取元素,其中分数在分类集合的最小值和最大值之间。</span>
        Set<Object> rangeByScore2 = opsForZSet.rangeByScore(<span class="hljs-string">"fan7"</span>, <span class="hljs-number">0</span>, <span class="hljs-number">10</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
        System.out.println(rangeByScore2);<span class="hljs-comment">//[a, c, b]</span>
        Set<Object> rangeByScore3 = opsForZSet.rangeByScore(<span class="hljs-string">"fan7"</span>, -<span class="hljs-number">1</span>, <span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>);
        System.out.println(rangeByScore3);<span class="hljs-comment">//[d]</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li></ul></pre>



<h5 id="set-typedtuple-v-rangebyscorewithscoresk-key-double-min-double-max">Set< TypedTuple< V >> rangeByScoreWithScores(K key, double min, double max);</h5>



<h5 id="set-typedtuple-v-rangebyscorewithscoresk-key-double-min-double-max-long-offset-long-count">Set< TypedTuple< V >> rangeByScoreWithScores(K key, double min, double max, long offset, long count);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testRangeByScoreWithScores</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan8"</span>);
        opsForZSet.add(<span class="hljs-string">"fan8"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan8"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan8"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan8"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//得到一组元组,其中分数在分类集合的最小值和最大值之间</span>
        Set<TypedTuple<Object>> rangeByScoreWithScores = opsForZSet.rangeByScoreWithScores(<span class="hljs-string">"fan8"</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>);<span class="hljs-comment">//注意("fan8",2,1)是获取不到数据的</span>
        Iterator<TypedTuple<Object>> iterator = rangeByScoreWithScores.iterator();
        <span class="hljs-keyword">while</span>(iterator.hasNext()){
            TypedTuple<Object> next = iterator.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
        <span class="hljs-comment">/*
            value:a score:1.0
            value:c score:2.0
         */</span>
        }
        <span class="hljs-comment">//从开始到结束的范围内获取一组元组,其中分数在分类集中的最小值和最大值之间。</span>
        Set<TypedTuple<Object>> rangeByScoreWithScores2 = opsForZSet.rangeByScoreWithScores(<span class="hljs-string">"fan8"</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
        Iterator<TypedTuple<Object>> iterator2 = rangeByScoreWithScores2.iterator();
        <span class="hljs-keyword">while</span>(iterator2.hasNext()){
            TypedTuple<Object> next = iterator2.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
        <span class="hljs-comment">/*
            value:c score:2.0
         */</span>
        }
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li></ul></pre>



<h5 id="set-reverserangek-key-long-start-long-end">Set reverseRange(K key, long start, long end);</h5>



<h5 id="set-typedtuple-v-reverserangewithscoresk-key-long-start-long-end">Set< TypedTuple< V >> reverseRangeWithScores(K key, long start, long end);</h5>



<h5 id="set-v-reverserangebyscorek-key-double-min-double-max">Set< V > reverseRangeByScore(K key, double min, double max);</h5>



<h5 id="set-typedtuple-v-reverserangebyscorewithscoresk-key-double-min-double-max">Set< TypedTuple< V >> reverseRangeByScoreWithScores(K key, double min, double max);</h5>



<h5 id="set-v-reverserangebyscorek-key-double-min-double-max-long-offset-long-count">Set< V > reverseRangeByScore(K key, double min, double max, long offset, long count);</h5>



<h5 id="set-typedtuple-v-reverserangebyscorewithscoresk-key-double-min-double-max-long-offset-long-count">Set< TypedTuple< V >> reverseRangeByScoreWithScores(K key, double min, double max, long offset, long count);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testReverseRange</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan9"</span>);
        opsForZSet.add(<span class="hljs-string">"fan9"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan9"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan9"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan9"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//从从高到低的排序集中获取从头(start)到尾(end)内的元素。</span>
        Set<Object> reverseRange = opsForZSet.reverseRange(<span class="hljs-string">"fan9"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
        System.out.println(reverseRange);<span class="hljs-comment">//[b, c, a, d]</span>
        <span class="hljs-comment">//从开始(start)到结束(end),从排序从高到低的排序集中获取元组的集合</span>
        Set<TypedTuple<Object>> reverseRangeWithScores = opsForZSet.reverseRangeWithScores(<span class="hljs-string">"fan9"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
        Iterator<TypedTuple<Object>> iterator = reverseRangeWithScores.iterator();
        <span class="hljs-keyword">while</span>(iterator.hasNext()){
            TypedTuple<Object> next = iterator.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
            <span class="hljs-comment">/*
                value:b score:3.0
                value:c score:2.0
                value:a score:1.0
                value:d score:-1.0 
             */</span>
        }
        <span class="hljs-comment">//从高到低的排序集中获取分数在最小和最大值之间的元素。</span>
        Set<Object> reverseRangeByScore = opsForZSet.reverseRangeByScore(<span class="hljs-string">"fan9"</span>, -<span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
        System.out.println(reverseRangeByScore);<span class="hljs-comment">//[c, a, d]</span>
        <span class="hljs-comment">//从开始到结束的范围内获取元素,其中分数在最小和最大之间,从排序集排序高 - >低。</span>
        Set<Object> reverseRangeByScore2 = opsForZSet.reverseRangeByScore(<span class="hljs-string">"fan9"</span>, -<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>);
        System.out.println(reverseRangeByScore2);<span class="hljs-comment">//[d]</span>
        <span class="hljs-comment">//得到一组元组,其中分数在最小和最大之间,从排序从高到低</span>
        Set<TypedTuple<Object>> reverseRangeByScoreWithScores = opsForZSet.reverseRangeByScoreWithScores(<span class="hljs-string">"fan9"</span>, -<span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
        Iterator<TypedTuple<Object>> iterator2 = reverseRangeByScoreWithScores.iterator();
        <span class="hljs-keyword">while</span>(iterator2.hasNext()){
            TypedTuple<Object> next = iterator2.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
            <span class="hljs-comment">/*
                value:c score:2.0
                value:a score:1.0
                value:d score:-1.0
             */</span>
        }
        <span class="hljs-comment">//从开始到结束的范围内获取一组元组,其中分数在最小和最大之间,从排序集排序高 - >低。</span>
        Set<TypedTuple<Object>> reverseRangeByScoreWithScores2 = opsForZSet.reverseRangeByScoreWithScores(<span class="hljs-string">"fan9"</span>, -<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>, <span class="hljs-number">3</span>);
        Iterator<TypedTuple<Object>> iterator3 = reverseRangeByScoreWithScores2.iterator();
        <span class="hljs-keyword">while</span>(iterator3.hasNext()){
            TypedTuple<Object> next = iterator3.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
            <span class="hljs-comment">/*
                value:a score:1.0
                value:d score:-1.0
             */</span>
        }

    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li><li style="color: rgb(153, 153, 153);">49</li><li style="color: rgb(153, 153, 153);">50</li><li style="color: rgb(153, 153, 153);">51</li><li style="color: rgb(153, 153, 153);">52</li><li style="color: rgb(153, 153, 153);">53</li><li style="color: rgb(153, 153, 153);">54</li></ul></pre>



<h5 id="long-countk-key-double-min-double-max">Long count(K key, double min, double max);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testCount</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan10"</span>);
        opsForZSet.add(<span class="hljs-string">"fan10"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan10"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan10"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan10"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//计算排序集中在最小和最大分数之间的元素数。</span>
        Long count = opsForZSet.count(<span class="hljs-string">"fan10"</span>, -<span class="hljs-number">1</span>, <span class="hljs-number">2</span>);
        System.out.println(count);<span class="hljs-comment">//3</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>



<h5 id="long-sizek-key">Long size(K key);</h5>



<h5 id="long-zcardk-key">Long zCard(K key);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testSizeAndZCard</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan11"</span>);
        opsForZSet.add(<span class="hljs-string">"fan11"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan11"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan11"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan11"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//返回使用给定键存储的排序集的元素数(其实size()底层就是调用的zCard())</span>
        Long size = opsForZSet.size(<span class="hljs-string">"fan11"</span>);
        System.out.println(size);<span class="hljs-comment">//4</span>
        <span class="hljs-comment">//使用键获取排序集的大小。</span>
        Long zCard = opsForZSet.zCard(<span class="hljs-string">"fan11"</span>);
        System.out.println(zCard);<span class="hljs-comment">//4</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li></ul></pre>



<h5 id="double-scorek-key-object-o">Double score(K key, Object o);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testScore</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan12"</span>);
        opsForZSet.add(<span class="hljs-string">"fan12"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan12"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan12"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan12"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//使用键值从排序集中获取具有值的元素的分数</span>
        Double score = opsForZSet.score(<span class="hljs-string">"fan12"</span>, <span class="hljs-string">"b"</span>);
        System.out.println(score);<span class="hljs-comment">//3.0</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>



<h5 id="long-removerangek-key-long-start-long-end">Long removeRange(K key, long start, long end);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testRemoveRange</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan13"</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//使用键从排序集中删除开始和结束之间范围内的元素</span>
        Long removeRange = opsForZSet.removeRange(<span class="hljs-string">"fan13"</span>, <span class="hljs-number">1</span>, <span class="hljs-number">3</span>);
        System.out.println(removeRange);<span class="hljs-comment">//3</span>
        System.out.println(opsForZSet.zCard(<span class="hljs-string">"fan13"</span>));<span class="hljs-comment">//1</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li></ul></pre>



<h5 id="long-removerangebyscorek-key-double-min-double-max">Long removeRangeByScore(K key, double min, double max);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testRemoveRangeByScore</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan13"</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan13"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//使用键从排序集中移除最小和最大值之间的元素</span>
        Long removeRangeByScore = opsForZSet.removeRangeByScore(<span class="hljs-string">"fan13"</span>, <span class="hljs-number">2</span>, <span class="hljs-number">100</span>);
        System.out.println(removeRangeByScore);<span class="hljs-comment">//2</span>
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li></ul></pre>



<h5 id="long-unionandstorek-key-k-otherkey-k-destkey">Long unionAndStore(K key, K otherKey, K destKey);</h5>



<h5 id="long-unionandstorek-key-collection-k-otherkeys-k-destkey">Long unionAndStore(K key, Collection< K > otherKeys, K destKey);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testUnionAndStore</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan14"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan15"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan16"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan17"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan18"</span>);
        opsForZSet.add(<span class="hljs-string">"fan14"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan14"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan14"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan14"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);

        opsForZSet.add(<span class="hljs-string">"fan15"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan15"</span>, <span class="hljs-string">"d"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan15"</span>, <span class="hljs-string">"e"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan15"</span>, <span class="hljs-string">"f"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//在键和其他键上的联合排序集合,并将结果存储在目标destIny中(注意相交的元素分数相加)</span>
        Long unionAndStore = opsForZSet.unionAndStore(<span class="hljs-string">"fan14"</span>, <span class="hljs-string">"fan15"</span>, <span class="hljs-string">"fan16"</span>);
        System.out.println(unionAndStore);<span class="hljs-comment">//6</span>
        Set<TypedTuple<Object>> rangeWithScores = opsForZSet.rangeWithScores(<span class="hljs-string">"fan16"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
        Iterator<TypedTuple<Object>> iterator = rangeWithScores.iterator();
        <span class="hljs-keyword">while</span>(iterator.hasNext()){
            TypedTuple<Object> next = iterator.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
            <span class="hljs-comment">/*
                value:f score:-1.0
                value:a score:1.0
                value:d score:2.0
                value:e score:2.0
                value:b score:3.0
                value:c score:3.0   可以看出,score相加了
             */</span>
        }
        opsForZSet.add(<span class="hljs-string">"fan17"</span>, <span class="hljs-string">"e"</span>, <span class="hljs-number">5</span>);
        opsForZSet.add(<span class="hljs-string">"fan17"</span>, <span class="hljs-string">"f"</span>, -<span class="hljs-number">7</span>);
        opsForZSet.add(<span class="hljs-string">"fan17"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-number">31</span>);
        opsForZSet.add(<span class="hljs-string">"fan17"</span>, <span class="hljs-string">"h"</span>, -<span class="hljs-number">11</span>);
        opsForZSet.add(<span class="hljs-string">"fan17"</span>, <span class="hljs-string">"c"</span>, -<span class="hljs-number">11</span>);
        <span class="hljs-comment">//计算给定的多个有序集的并集,并存储在新的 destKey中</span>
        Long unionAndStore2 = opsForZSet.unionAndStore(<span class="hljs-string">"fan14"</span>, Arrays.asList(<span class="hljs-string">"fan15"</span>,<span class="hljs-string">"fan17"</span>), <span class="hljs-string">"fan18"</span>);
        System.out.println(unionAndStore2);<span class="hljs-comment">//8</span>
        Set<TypedTuple<Object>> rangeWithScores2 = opsForZSet.rangeWithScores(<span class="hljs-string">"fan18"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
        Iterator<TypedTuple<Object>> iterator2 = rangeWithScores2.iterator();
        <span class="hljs-keyword">while</span>(iterator2.hasNext()){
            TypedTuple<Object> next = iterator2.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
            <span class="hljs-comment">/*
                value:h score:-11.0
                value:c score:-8.0
                value:f score:-8.0
                value:a score:1.0
                value:d score:2.0
                value:b score:3.0
                value:e score:7.0
                value:g score:31.0
             */</span>
        }
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li><li style="color: rgb(153, 153, 153);">49</li><li style="color: rgb(153, 153, 153);">50</li><li style="color: rgb(153, 153, 153);">51</li><li style="color: rgb(153, 153, 153);">52</li><li style="color: rgb(153, 153, 153);">53</li><li style="color: rgb(153, 153, 153);">54</li><li style="color: rgb(153, 153, 153);">55</li><li style="color: rgb(153, 153, 153);">56</li><li style="color: rgb(153, 153, 153);">57</li><li style="color: rgb(153, 153, 153);">58</li></ul></pre>



<h5 id="long-intersectandstorek-key-k-otherkey-k-destkey">Long intersectAndStore(K key, K otherKey, K destKey);</h5>



<h5 id="long-intersectandstorek-key-collection-k-otherkeys-k-destkey">Long intersectAndStore(K key, Collection< K > otherKeys, K destKey);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testIntersectAndStore</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan19"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan20"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan21"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan22"</span>);
        redisTemplate.delete(<span class="hljs-string">"fan23"</span>);
        opsForZSet.add(<span class="hljs-string">"fan19"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan19"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan19"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan19"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);

        opsForZSet.add(<span class="hljs-string">"fan20"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan20"</span>, <span class="hljs-string">"d"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan20"</span>, <span class="hljs-string">"e"</span>, <span class="hljs-number">8</span>);
        opsForZSet.add(<span class="hljs-string">"fan20"</span>, <span class="hljs-string">"f"</span>, -<span class="hljs-number">5</span>);

        opsForZSet.add(<span class="hljs-string">"fan21"</span>, <span class="hljs-string">"e"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan21"</span>, <span class="hljs-string">"f"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan21"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan21"</span>, <span class="hljs-string">"h"</span>, -<span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan21"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">9</span>);
        <span class="hljs-comment">//计算给定的一个与另一个有序集的交集并将结果集存储在新的有序集合 key 中</span>
        Long intersectAndStore = opsForZSet.intersectAndStore(<span class="hljs-string">"fan19"</span>, <span class="hljs-string">"fan20"</span>, <span class="hljs-string">"fan22"</span>);
        System.out.println(intersectAndStore);<span class="hljs-comment">//2</span>
        Set<TypedTuple<Object>> rangeWithScores = opsForZSet.rangeWithScores(<span class="hljs-string">"fan22"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
        Iterator<TypedTuple<Object>> iterator = rangeWithScores.iterator();
        <span class="hljs-keyword">while</span>(iterator.hasNext()){
            TypedTuple<Object> next = iterator.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
            <span class="hljs-comment">/*
                value:d score:2.0
                value:c score:3.0
             */</span>
        }
        <span class="hljs-comment">//计算给定的一个或多个有序集的交集并将结果集存储在新的有序集合 key 中</span>
        Long intersectAndStore2 = opsForZSet.intersectAndStore(<span class="hljs-string">"fan19"</span>, Arrays.asList(<span class="hljs-string">"fan20"</span>,<span class="hljs-string">"fan21"</span>), <span class="hljs-string">"fan23"</span>);
        System.out.println(intersectAndStore2);<span class="hljs-comment">//1</span>
        Set<TypedTuple<Object>> rangeWithScores2 = opsForZSet.rangeWithScores(<span class="hljs-string">"fan23"</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">1</span>);
        Iterator<TypedTuple<Object>> iterator2 = rangeWithScores2.iterator();
        <span class="hljs-keyword">while</span>(iterator2.hasNext()){
            TypedTuple<Object> next = iterator2.next();
            System.out.println(<span class="hljs-string">"value:"</span>+next.getValue()+<span class="hljs-string">" score:"</span>+next.getScore());
            <span class="hljs-comment">/*
                value:c score:12.0
             */</span>
        }
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li><li style="color: rgb(153, 153, 153);">21</li><li style="color: rgb(153, 153, 153);">22</li><li style="color: rgb(153, 153, 153);">23</li><li style="color: rgb(153, 153, 153);">24</li><li style="color: rgb(153, 153, 153);">25</li><li style="color: rgb(153, 153, 153);">26</li><li style="color: rgb(153, 153, 153);">27</li><li style="color: rgb(153, 153, 153);">28</li><li style="color: rgb(153, 153, 153);">29</li><li style="color: rgb(153, 153, 153);">30</li><li style="color: rgb(153, 153, 153);">31</li><li style="color: rgb(153, 153, 153);">32</li><li style="color: rgb(153, 153, 153);">33</li><li style="color: rgb(153, 153, 153);">34</li><li style="color: rgb(153, 153, 153);">35</li><li style="color: rgb(153, 153, 153);">36</li><li style="color: rgb(153, 153, 153);">37</li><li style="color: rgb(153, 153, 153);">38</li><li style="color: rgb(153, 153, 153);">39</li><li style="color: rgb(153, 153, 153);">40</li><li style="color: rgb(153, 153, 153);">41</li><li style="color: rgb(153, 153, 153);">42</li><li style="color: rgb(153, 153, 153);">43</li><li style="color: rgb(153, 153, 153);">44</li><li style="color: rgb(153, 153, 153);">45</li><li style="color: rgb(153, 153, 153);">46</li><li style="color: rgb(153, 153, 153);">47</li><li style="color: rgb(153, 153, 153);">48</li></ul></pre>



<h5 id="cursor-typedtuple-v-scank-key-scanoptions-options">Cursor< TypedTuple< V >> scan(K key, ScanOptions options);</h5>



<pre class="prettyprint" name="code"><code class="language-java hljs  has-numbering">    <span class="hljs-annotation">@Test</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">testScan</span>(){
        redisTemplate.delete(<span class="hljs-string">"fan24"</span>);
        opsForZSet.add(<span class="hljs-string">"fan24"</span>, <span class="hljs-string">"a"</span>, <span class="hljs-number">1</span>);
        opsForZSet.add(<span class="hljs-string">"fan24"</span>, <span class="hljs-string">"b"</span>, <span class="hljs-number">3</span>);
        opsForZSet.add(<span class="hljs-string">"fan24"</span>, <span class="hljs-string">"c"</span>, <span class="hljs-number">2</span>);
        opsForZSet.add(<span class="hljs-string">"fan24"</span>, <span class="hljs-string">"d"</span>, -<span class="hljs-number">1</span>);
        <span class="hljs-comment">//跟iterator一毛一样,遍历集合</span>
        Cursor<TypedTuple<Object>> scan = opsForZSet.scan(<span class="hljs-string">"fan24"</span>, ScanOptions.NONE);
        <span class="hljs-keyword">while</span> (scan.hasNext()){
            ZSetOperations.TypedTuple<Object> item = scan.next();
            System.out.println(item.getValue() + <span class="hljs-string">":"</span> + item.getScore());
            <span class="hljs-comment">/*
                d:-1.0
                a:1.0
                c:2.0
                b:3.0
             */</span>
        }
    }</code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li><li style="color: rgb(153, 153, 153);">9</li><li style="color: rgb(153, 153, 153);">10</li><li style="color: rgb(153, 153, 153);">11</li><li style="color: rgb(153, 153, 153);">12</li><li style="color: rgb(153, 153, 153);">13</li><li style="color: rgb(153, 153, 153);">14</li><li style="color: rgb(153, 153, 153);">15</li><li style="color: rgb(153, 153, 153);">16</li><li style="color: rgb(153, 153, 153);">17</li><li style="color: rgb(153, 153, 153);">18</li><li style="color: rgb(153, 153, 153);">19</li><li style="color: rgb(153, 153, 153);">20</li></ul></pre>

<p><a href="http://blog.csdn.net/weixin_37490221/article/details/78134105" target="_blank">RedisTemplate访问Redis数据结构(前言)</a> <br>
<a href="http://blog.csdn.net/weixin_37490221/article/details/78134521" target="_blank">RedisTemplate访问Redis数据结构(一)——String</a> <br>
<a href="http://blog.csdn.net/weixin_37490221/article/details/78134748" target="_blank">RedisTemplate访问Redis数据结构(二)——List</a> <br>
<a href="http://blog.csdn.net/weixin_37490221/article/details/78135036" target="_blank">RedisTemplate访问Redis数据结构(三)——Hash</a> <br>
<a href="http://blog.csdn.net/weixin_37490221/article/details/78135202" target="_blank">RedisTemplate访问Redis数据结构(四)——Set</a> <br>
<a href="http://blog.csdn.net/weixin_37490221/article/details/78135815" target="_blank">RedisTemplate访问Redis数据结构(五)——ZSet</a></p>            </div>
            <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
                </div>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值