Java操作redis

Redis 作为服务器缓存,用处比较多。本文使用 java 操作 redis,对操作进行简单的封装,并介绍如何将其集成到 spring 中,最后介绍 redis 分页查询。

首先定义操作接口,为 redis 的单机操作和集群操作提供标准。

public interface JedisClient
{
    void set(String key, String value);
String get(String key);

</span><span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> hset(String hkey, String key, String value);

String hget(String hkey, String key);

</span><span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> incr(String key);

</span><span style="color: rgba(0, 0, 255, 1)">void</span> expire(String key, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> seconds);

</span><span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> ttl(String key);

</span><span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> del(String key);

</span><span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> hdel(String hkey, String key);

</span><span style="color: rgba(0, 128, 0, 1)">/**</span><span style="color: rgba(0, 128, 0, 1)">
 * redis list操作
 * 
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> name
 * </span><span style="color: rgba(128, 128, 128, 1)">@param</span><span style="color: rgba(0, 128, 0, 1)"> value
 </span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> rpush(String key, String value);

</span><span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> lpush(String key, String value);

String rpop(String key);

String lpop(String key);

</span><span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> llen(String key);

List</span>&lt;String&gt; lrange(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> end);

</span><span style="color: rgba(0, 0, 255, 1)">long</span> zadd(String key, <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> score, String value);

Set</span>&lt;String&gt; zrange(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span> end);<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">递增</span>
Set<String> zrevrange(String key, long start, long end);//递减 }

定义单机版实现类

public class JedisClientSingle implements JedisClient
{
    // 注意,JedisPool 这个类型已经在 spring 中注册过了。这种方式直根据类型来注入
    @Autowired
    private JedisPool jedisPool;
@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> set(String key, String value)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    jedis.set(key, value);
    jedis.close();
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String get(String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    String value </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.get(key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> value;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> hset(String hkey, String key, String value)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    jedis.hset(hkey, key, value);
    jedis.close();
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String hget(String hkey, String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    String value </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.hget(hkey, key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> value;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> incr(String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> value =<span style="color: rgba(0, 0, 0, 1)"> jedis.incr(key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> value;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> expire(String key, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> seconds)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    jedis.expire(key, seconds);
    jedis.close();
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> ttl(String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> value =<span style="color: rgba(0, 0, 0, 1)"> jedis.ttl(key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> value;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> del(String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> result =<span style="color: rgba(0, 0, 0, 1)"> jedis.del(key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> hdel(String hkey, String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> result =<span style="color: rgba(0, 0, 0, 1)"> jedis.hdel(hkey, key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> rpush(String key, String value)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> result =<span style="color: rgba(0, 0, 0, 1)"> jedis.rpush(key, value);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> lpush(String key, String value)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> result =<span style="color: rgba(0, 0, 0, 1)"> jedis.lpush(key, value);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String rpop(String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    String result </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.rpop(key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span><span style="color: rgba(0, 0, 0, 1)"> String lpop(String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    String result </span>=<span style="color: rgba(0, 0, 0, 1)"> jedis.lpop(key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> llen(String key)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> result =<span style="color: rgba(0, 0, 0, 1)"> jedis.llen(key);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;String&gt; lrange(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> end)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    List</span>&lt;String&gt; result =<span style="color: rgba(0, 0, 0, 1)"> jedis.lrange(key, start, end);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">long</span> zadd(String key, <span style="color: rgba(0, 0, 255, 1)">double</span><span style="color: rgba(0, 0, 0, 1)"> score, String value)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    </span><span style="color: rgba(0, 0, 255, 1)">long</span> result =<span style="color: rgba(0, 0, 0, 1)"> jedis.zadd(key, score, value);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> Set&lt;String&gt; zrange(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> end)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    Set</span>&lt;String&gt; result =<span style="color: rgba(0, 0, 0, 1)"> jedis.zrange(key, start, end);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> Set&lt;String&gt; zrevrange(String key, <span style="color: rgba(0, 0, 255, 1)">long</span> start, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> end)
{
    Jedis jedis </span>=<span style="color: rgba(0, 0, 0, 1)"> jedisPool.getResource();
    Set</span>&lt;String&gt; result =<span style="color: rgba(0, 0, 0, 1)"> jedis.zrevrange(key, start, end);
    jedis.close();
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result;
}

}

如下是集群操作实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
public class JedisClientCluster implements JedisClient
{
    // 注意,jedisCluster这个类型已经在spring中注册过了。这种方式直接根据类型来注入,不需要进行关闭操作
    @Autowired
    private JedisCluster jedisCluster;
 
    @Override
    public void set(String key, String value)
    {
        jedisCluster.set(key, value);
    }
 
    @Override
    public String get(String key)
    {
        return jedisCluster.get(key);
    }
 
    @Override
    public void hset(String hkey, String key, String value)
    {
        jedisCluster.hset(hkey, key, value);
    }
 
    @Override
    public String hget(String hkey, String key)
    {
        return jedisCluster.hget(hkey, key);
    }
 
    @Override
    public long incr(String key)
    {
        return jedisCluster.incr(key);
    }
 
    @Override
    public void expire(String key, int seconds)
    {
        jedisCluster.expire(key, seconds);
    }
 
    @Override
    public long ttl(String key)
    {
        return jedisCluster.ttl(key);
    }
 
    @Override
    public long del(String key)
    {
        return jedisCluster.del(key);
    }
 
    @Override
    public long hdel(String hkey, String key)
    {
        return jedisCluster.hdel(hkey, key);
    }
 
    @Override
    public long rpush(String key, String value)
    {
        return jedisCluster.rpush(key, value);
    }
 
    @Override
    public long lpush(String key, String value)
    {
        return jedisCluster.lpush(key, value);
    }
 
    @Override
    public String rpop(String key)
    {
        return jedisCluster.rpop(key);
    }
 
    @Override
    public String lpop(String key)
    {
        return jedisCluster.lpop(key);
    }
 
    @Override
    public long llen(String key)
    {
        return jedisCluster.llen(key);
    }
 
    @Override
    public List<String> lrange(String key, long start, long end)
    {
        return jedisCluster.lrange(key, start, end);
    }
 
    @Override
    public long zadd(String key, double score, String value)
    {
        return jedisCluster.zadd(key, score, value);
    }
 
    @Override
    public Set<String> zrange(String key, long start, long end)
    {
        return jedisCluster.zrange(key, start, end);
    }
 
    @Override
    public Set<String> zrevrange(String key, long start, long end)
    {
        return jedisCluster.zrange(key, start, end);
    }
 
}

  

jedis 相关的 bean 在 spring 中的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!-- <property name="maxIdle" value="300" /> --> <!-- 最大能够保持 idel 状态的对象数 -->
        <!-- <property name="maxTotal" value="60000" />  --><!-- 最大分配的对象数 -->
        <!-- <property name="testOnBorrow" value="true" /> --> <!-- 当调用 borrow Object 方法时,是否进行有效性检查 -->
    </bean>
    <!-- jedis 客户端单机版,开发的时候,都是用单机版 -->
    <bean id="redisClientSingle" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
        <constructor-arg name="host" value="192.168.1.1"></constructor-arg>
        <constructor-arg name="port" value="6379"></constructor-arg>
        <constructor-arg name="timeout" value="2000" type="int"></constructor-arg>
        <constructor-arg name="password" value="xxx"></constructor-arg>
    </bean>
<span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">bean </span><span style="color: rgba(255, 0, 0, 1)">id</span><span style="color: rgba(0, 0, 255, 1)">="jedisClientSingle"</span><span style="color: rgba(255, 0, 0, 1)"> class</span><span style="color: rgba(0, 0, 255, 1)">="org.redis.impl.JedisClientSingle"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">bean</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>

<span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> jedis客户端集群版,生产环境使用 </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>
<span style="color: rgba(0, 128, 0, 1)">&lt;!--</span><span style="color: rgba(0, 128, 0, 1)"> &lt;bean id="redisClientCluster" class="redis.clients.jedis.JedisCluster"&gt; 
    &lt;constructor-arg name="nodes"&gt; &lt;set&gt; &lt;bean class="redis.clients.jedis.HostAndPort"&gt; 
    &lt;constructor-arg name="host" value="192.168.25.128"&gt;&lt;/constructor-arg&gt; &lt;constructor-arg 
    name="port" value="7001"&gt;&lt;/constructor-arg&gt; &lt;/bean&gt; &lt;bean class="redis.clients.jedis.HostAndPort"&gt; 
    &lt;constructor-arg name="host" value="192.168.25.128"&gt;&lt;/constructor-arg&gt; &lt;constructor-arg 
    name="port" value="7002"&gt;&lt;/constructor-arg&gt; &lt;/bean&gt; &lt;bean class="redis.clients.jedis.HostAndPort"&gt; 
    &lt;constructor-arg name="host" value="192.168.25.128"&gt;&lt;/constructor-arg&gt; &lt;constructor-arg 
    name="port" value="7003"&gt;&lt;/constructor-arg&gt; &lt;/bean&gt; &lt;bean class="redis.clients.jedis.HostAndPort"&gt; 
    &lt;constructor-arg name="host" value="192.168.25.128"&gt;&lt;/constructor-arg&gt; &lt;constructor-arg 
    name="port" value="7004"&gt;&lt;/constructor-arg&gt; &lt;/bean&gt; &lt;bean class="redis.clients.jedis.HostAndPort"&gt; 
    &lt;constructor-arg name="host" value="192.168.25.128"&gt;&lt;/constructor-arg&gt; &lt;constructor-arg 
    name="port" value="7005"&gt;&lt;/constructor-arg&gt; &lt;/bean&gt; &lt;bean class="redis.clients.jedis.HostAndPort"&gt; 
    &lt;constructor-arg name="host" value="192.168.25.128"&gt;&lt;/constructor-arg&gt; &lt;constructor-arg 
    name="port" value="7006"&gt;&lt;/constructor-arg&gt; &lt;/bean&gt; &lt;/set&gt; &lt;/constructor-arg&gt; 
    &lt;constructor-arg name="poolConfig" ref="jedisPoolConfig"&gt;&lt;/constructor-arg&gt; 
    &lt;/bean&gt; &lt;bean id="jedisClientCluster" class="org.redis.impl..JedisClientCluster"&gt;&lt;/bean&gt; </span><span style="color: rgba(0, 128, 0, 1)">--&gt;</span>

</beans>

 

java 中 redis 分页查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
package common.model;
 
import java.util.ArrayList;
import java.util.List;
 
public class PageRedis<A>
{
    private int totalNum; // 总行数
    private int totalPage; // 总页数
    private int pageIndex; // 当前页数
    private int pageSize; // 每页几行
 
    private List<A> rows;
 
    public PageRedis()
    {
 
    }
 
    public int getTotalPage()
    {
        return totalPage;
    }
 
    public int getPageIndex()
    {
        return pageIndex;
    }
 
    public void setPageIndex(int pageIndex)
    {
        this.pageIndex = pageIndex;
    }
 
    public int getPageSize()
    {
        return pageSize;
    }
 
    public void setPageSize(int pageSize)
    {
        this.pageSize = pageSize;
    }
 
    public int getTotalNum()
    {
        return totalNum;
    }
 
    public void setTotalNum(int totalNum)
    {
        this.totalNum = totalNum;
    }
 
    // 设置总页数
 
    public List<A> getRows()
    {
        return rows;
    }
 
    public void setRows(List<A> rows)
    {
        this.rows = rows;
    }
 
    public void setTotalPage()
    {
        // 如果总行数整除每页的行数
        if (this.getTotalNum() % this.getPageSize() == 0)
        {
            this.totalPage = this.getTotalNum() / this.getPageSize();
        }
        else
        {
            this.totalPage = this.getTotalNum() / this.getPageSize() + 1;
        }
    }
 
    public <T> List<T> getPage(List<T> list)
    {
        List<T> sub = new ArrayList<T>();
 
        // 当前页的起始记录(非最后一页)
        int start = (this.getPageIndex() - 1) * this.getPageSize();
 
        // 当前页的截止记录(非最后一页)
        int end = this.getPageIndex() * this.getPageSize();
 
        // 最后一页
        int endOfLast = (this.getPageIndex() - 1) * this.getPageSize() + this.getTotalNum() % this.getPageSize();
 
        // 如果说,当前页数等于总页数 并且 总行数除以每页几行不能整除
        if (this.getPageIndex() == this.getTotalPage() && this.getTotalNum() % this.getPageSize() != 0)
        {
            for (int i = start; i < endOfLast; i++)
            {
                if (i < list.size())
                {
                    sub.add(list.get(i));
                }
            }
        }
        else
        {
            for (int i = start; i < end; i++)
            {
                if (i < list.size())
                {
                    sub.add(list.get(i));
                }
            }
        }
 
        return sub;
    }
 
    public static void main(String[] args)
    {
        /*List<Integer> list = new LinkedList<Integer>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
 
        PageRedis page = new PageRedis();
        page.setTotalNum(list.size());
        page.setPageSize(4);
        page.setPageIndex(3);
        page.setTotalPage();
        List<Integer> sub = page.getPage(list);
        System.out.println(sub);*/
 
    }
}

  

 

注意,上文中有几点是个人认为比较麻烦的

1.spring 集成含密码的 redis

2. 利用 redis 的 list 和 sortset 实现分页查询

有问题欢迎讨论