本章学习使用Java操作Redis
1.准备工作
既然是使用Java来操作redis,那么需要引入对应的jar包,如果你是使用maven的话,需引入如下依赖:
redis.clients
jedis
3.0.1
如果是普通的工程,则需要下载如下的jar包:
http://central.maven.org/maven2/redis/clients/jedis/3.0.1/
2.测试基本功能
所谓基本功能,就是之前我们的五种数据类型的基本操作,和命令是差不多的,这里以其中最简单的string举例说明:
新建java工程,引入对应的jar包:
这里讲解基本的set、get、del以及mset和mget
编写如下的测试类进行测试:
package cn.edu.ccut;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class RedisTest {
@Test
public void testRedis(){
//获取redis实例
Jedis jedis = new Jedis("192.168.1.103", 6379);
//string类型新增、修改
jedis.set("test01", "123");
//string类型获取
System.out.println(jedis.get("test01"));
//string类型删除
jedis.del("test01");
//string批量新增、修改和获取
jedis.mset(new String [] {"test02","456","test03","789"});
System.out.println(jedis.mget(new String [] {"test02","test03"}));
}
}
其他类型的操作也是类似的,方法和命令完全一致。这一点学过命令的同学可以完全放心。
我们使用Redis的时候需要检测数据库中的新增操作,从而将指定的数据存入Redis中。
这里我们直接手动的建立几个User对象用于进行试验。
首先我们需要一个User类用于操作:
package cn.edu.ccut;
public class User {
private String id;
private String username;
private String password;
public User(String id, String username, String password) {
super();
this.id = id;
this.username = username;
this.password = password;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
}
}
编写如下测试类:
package cn.edu.ccut;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.apache.commons.collections.map.HashedMap;
import org.junit.Test;
import net.sf.json.JSONObject;
import redis.clients.jedis.Jedis;
public class RedisTest {
@Test
public void testRedis(){
//获取redis实例
Jedis jedis = new Jedis("192.168.1.103", 6379);
Map map = new HashMap<>();
String id1 = UUID.randomUUID().toString().replace("-", "");
User user1 = new User(id1, "admin", "admin");
JSONObject json1 = JSONObject.fromObject(user1);
map.put(id1, json1.toString());
String id2 = UUID.randomUUID().toString().replace("-", "");
User user2 = new User(id2, "jwang", "jwang");
JSONObject json2 = JSONObject.fromObject(user2);
map.put(id2, json2.toString());
jedis.hset("Users", map);
}
}
上述操作就是将我们两个User对象的实例存入了Redis中,在Redis中可看到如下内容:
这个时候,如果我们需要找username为admin的数据怎么办呢?
我们可以设计一个业务常量,将符合条件的对象的id存入redis中,那么具体该这样做:
全部测试代码如下:
package cn.edu.ccut;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.junit.Test;
import net.sf.json.JSONObject;
import redis.clients.jedis.Jedis;
public class RedisTest {
//该常量代表查询user中username为admin的用户
final static String USER_USERNAME_ADMIN = "USER_USERNAME_ADMIN";
@Test
public void testRedis(){
//获取redis实例
Jedis jedis = new Jedis("192.168.1.103", 6379);
Set set = new HashSet<>();
Map map = new HashMap<>();
String id1 = UUID.randomUUID().toString().replace("-", "");
set.add(id1);
User user1 = new User(id1, "admin", "admin");
JSONObject json1 = JSONObject.fromObject(user1);
map.put(id1, json1.toString());
String id2 = UUID.randomUUID().toString().replace("-", "");
User user2 = new User(id2, "jwang", "jwang");
JSONObject json2 = JSONObject.fromObject(user2);
map.put(id2, json2.toString());
jedis.hset("Users", map);
jedis.sadd(USER_USERNAME_ADMIN, set.toArray(new String[set.size()]));
//获取
Set smembers = jedis.smembers(USER_USERNAME_ADMIN);
List hmget = jedis.hmget("Users", smembers.toArray(new String[smembers.size()]));
for (String string : hmget) {
JSONObject jsonObject=JSONObject.fromObject(string);
User user=(User)JSONObject.toBean(jsonObject, User.class);
System.out.println(user);
}
}
}