Java对Redis基本使用

1 引入 jar 包

  java 是通过 Jedis 对 redis 进行操作的,首先引入 jedis.jar

  <dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
  </dependency>


2 建立 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
import java.util.ArrayList;
import java.util.List;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
 
public class RedisPool {
     
    // 非切片客户端链接对象
    private Jedis jedis;
    // 非切片链接池对象
    private JedisPool jedisPool;
    // 切片客户端链接对象
    private ShardedJedis shardedJedis;
    // 切片链接池
    private ShardedJedisPool shardedJedisPool;
     
    private String ip = "127.0.0.1";
    private int port = 6379;
 
    public RedisPool(){
        initializePool();
        initializeShardedPool();
        setJedis(jedisPool.getResource());
        setShardedJedis(shardedJedisPool.getResource());
    }
     
    public RedisPool(String ip){
        this.ip = ip;
        initializePool();
        initializeShardedPool();
        setJedis(jedisPool.getResource());
        setShardedJedis(shardedJedisPool.getResource());
    }
     
    public RedisPool(String ip, int port){
        this.ip = ip;
        this.port = port;
        initializePool();
        initializeShardedPool();
        setJedis(jedisPool.getResource());
        setShardedJedis(shardedJedisPool.getResource());
         
    }
     
    // 初始化非切片池
    public void initializePool(){
        //池的配置
        JedisPoolConfig jpc = new JedisPoolConfig();
        //最大空闲连接数
        jpc.setMaxIdle(20);
        jpc.setMaxIdle(5);
        //获取连接时的最大等待毫秒数 
        jpc.setMaxWaitMillis(1000);
        //在空闲时检查有效性, 默认false 
        jpc.setTestOnBorrow(false);
        jedisPool = new JedisPool(jpc, ip, port);
    }
     
    // 初始化切片池
    public void initializeShardedPool(){
        //池的配置
        JedisPoolConfig config = new JedisPoolConfig();
        config.setMaxIdle(20);
        config.setMaxWaitMillis(1000);
        config.setTestOnBorrow(false);
        // slave链接
        //可以实现集群的功能,配置多个redis服务实现请求的分配进行负载均衡 
        List<JedisShardInfo> shards = new ArrayList<JedisShardInfo>();
        shards.add(new JedisShardInfo(ip, port, "master"));
        // 构造池
        shardedJedisPool = new ShardedJedisPool(config, shards);
    }
     
    public void closeJedisPool(){
        jedisPool.close();
    }
    public void closeShardedJedisPool(){
        shardedJedisPool.close();
    }
 
    public Jedis getJedis() {
        return jedis;
    }
 
    public void setJedis(Jedis jedis) {
        this.jedis = jedis;
    }
 
    public ShardedJedis getShardedJedis() {
        return shardedJedis;
    }
 
    public void setShardedJedis(ShardedJedis shardedJedis) {
        this.shardedJedis = shardedJedis;
    }
}

  

3 定义操作接口

  

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
import java.util.Map;
import java.util.Set;
 
public interface IRedisService {
 
     
    public Boolean setString(String key, String value);
    public String getString(String key);
    public Boolean existsKey(String key);
    public Long delKey(String key);
    public String typeKey(String key);
    public Set<String> keys(String key);
     
    /**
     * 获得map数据集
     * @param key
     * @return
     */
    public Map<String, String> getMap(String key);
     
    /**
     * 设置map数据集
     * @param key
     * @param map
     * @return
     */
    public Boolean setMap(String key, Map<String, String> map);
     
    /**
     * 获得map字段中的值
     * @param key
     * @param fieldKey
     * @return
     */
    public String getMapFieldValue(String key, String fieldKey);
     
    /**
     * 获得map中多个字段值
     * @param key
     * @param fieldKeys
     * @return
     */
    public Map<String, String> getMapFieldValues(String key, String[] fieldKeys);
     
    /**
     * 设置map中具体的字段值
     * 参考存储格式:{key,map{fieldKey, fieldValue}}
     * @param key
     * @param fieldKey
     * @param fieldValue
     * @return
     */
    public Boolean setMapFieldValue(String key, String fieldKey, String fieldValue);
     
     
}

  

4 接口实现类

  

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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
 
import com.robert.redis.client.config.RedisPool;
 
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ShardedJedis;
 
public class RedisService implements IRedisService{
 
    private RedisPool redisPool;
     
    public RedisService(){
        redisPool = new RedisPool();
    }
     
    public RedisService(String host){
        redisPool = new RedisPool(host);
    }
     
    public RedisService(String host, int port){
        redisPool = new RedisPool(host, port);
    }
     
    private Jedis getJResource(){
        Jedis jResource = null;
        jResource = redisPool.getJedis();
        return jResource;
    }
    private ShardedJedis getShardResource(){
        ShardedJedis sResource = null;
        sResource = redisPool.getShardedJedis();
        return sResource;
    }
     
    public Boolean setString(String key, String value) {
        boolean result = false;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null){
                resource.set(key, value);
                result = true;
            }
             
        }catch(Exception e){
            result = false;
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return result;
    }
 
    public String getString(String key) {
        String result = null;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null){
                result = resource.get(key);
            }
             
        }catch(Exception e){
            result = null;
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return result;
    }
 
    public Boolean existsKey(String key) {
        Boolean result = false;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null){
                result = resource.exists(key);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
         
        return result;
    }
 
    public Long delKey(String key) {
        Long result = null;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null){
                result = resource.del(key);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return result;
    }
 
    public String typeKey(String key) {
        String result = null;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null){
                result = resource.type(key);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return result;
    }
 
    public Set<String> keys(String key) {
        Set<String> result = null;
        Jedis resource = null;
        try{
            resource = getJResource();
            if(resource != null){
                result = resource.keys(key);
            }
             
        }catch(Exception e){
            result = null;
            e.printStackTrace();
        }finally{
            redisPool.closeJedisPool();
        }
        return result;
    }
 
    public Map<String, String> getMap(String key) {
        Map<String, String> map = null;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null && resource.exists(key)){
                map = resource.hgetAll(key);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return map;
    }
 
    public Boolean setMap(String key, Map<String, String> map) {
        Boolean result = false;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null){
                resource.hmset(key, map);
                result = true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return result;
    }
 
    public String getMapFieldValue(String key, String fieldKey) {
        String result = null;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null && resource.hexists(key, fieldKey)){
                result = resource.hget(key, fieldKey);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return result;
    }
 
    public Map<String, String> getMapFieldValues(String key, String[] fieldKeys) {
        Map<String, String> map = new HashMap<String, String>();
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null){
                for(String fieldKey : fieldKeys){
                    map.put(fieldKey, resource.hget(key, fieldKey));
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return map;
    }
 
    public Boolean setMapFieldValue(String key, String fieldKey, String fieldValue) {
        Boolean result = false;
        ShardedJedis resource = null;
        try{
            resource = getShardResource();
            if(resource != null && resource.exists(key)){
                resource.hset(key, fieldKey, fieldValue);
                result = true;
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            redisPool.closeShardedJedisPool();
        }
        return result;
    }
 
}

  

5 测试

  

1
2
3
4
5
6
7
public static void main( String[] args )
   {
        
       IRedisService rs = new RedisService();
       rs.setString("test", "Hello Redis!");
       System.out.println(rs.getString("test"));
   }