Redis-實現簡單的條件查詢
阿新 • • 發佈:2018-11-01
一,匯入jar包
二,實現簡單的條件查詢
建立一個User實體類
public class User {
private String id;
private String name;
private String sex;
private int age;
public String getId() {
return id;
}
public User() {
super();
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public User(String id, String name, String sex, int age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age="
+ age + "]";
}
}
建立5個物件並將其存入快取中,以便我們進行測試
//連線redis
Jedis jedis = new Jedis("127.0.0.1",6379);
Map<String, String> map = new HashMap<String,String>();
final String USER_TABLE = "USER_TABLE";
//向快取中存入5條資料組成的map
String uuid1 = UUID.randomUUID().toString();
User user1 = new User(uuid1, "y1", "m", 15);
//將物件轉為json
map.put(uuid1, JSONObject.fromObject(user1).toString());
String uuid2 = UUID.randomUUID().toString();
User user2 = new User(uuid2, "y2", "m", 18);
map.put(uuid2, JSONObject.fromObject(user2).toString());
String uuid3 = UUID.randomUUID().toString();
User user3 = new User(uuid3, "y3", "n", 25);
map.put(uuid3, JSONObject.fromObject(user3).toString());
String uuid4 = UUID.randomUUID().toString();
User user4 = new User(uuid4, "y4", "n", 15);
map.put(uuid4, JSONObject.fromObject(user4).toString());
String uuid5 = UUID.randomUUID().toString();
User user5 = new User(uuid5, "y5", "m", 25);
map.put(uuid5, JSONObject.fromObject(user5).toString());
//把map存到快取中
jedis.hmset("USER_TABLE", map);
在redis中查詢,可以看到已經將5個user物件存到快取中
接下來,首先實現單條件的查詢,比如說查詢年齡為15的user和性別為m的user
由於Redis是nosql,無法直接像mysql那樣利用where進行條件查詢,所以Redis想實現條件查詢,只能用一個笨方法:將所有符合條件的user存到一個set中
Jedis jedis = new Jedis("127.0.0.1",6379);
Map<String, String> map = new HashMap<String,String>();
final String USER_TABLE = "USER_TABLE";
//查詢年齡為15,性別為n
final String USER_TABLE_AGE_15 = "USER_TABLE_AGE_15";
final String USER_TABLE_SEX_m = "USER_TABLE_SEX_m";
final String USER_TABLE_SEX_n = "USER_TABLE_SEX_n";
//向快取中存入5條資料組成的map
String uuid1 = UUID.randomUUID().toString();
User user1 = new User(uuid1, "y1", "m", 15);
//將物件轉為json
map.put(uuid1, JSONObject.fromObject(user1).toString());
//將符合條件的user的Id存到set中
jedis.sadd(USER_TABLE_AGE_15,uuid1);
jedis.sadd(USER_TABLE_SEX_m,uuid1);
String uuid2 = UUID.randomUUID().toString();
User user2 = new User(uuid2, "y2", "m", 18);
map.put(uuid2, JSONObject.fromObject(user2).toString());
jedis.sadd(USER_TABLE_SEX_m,uuid2);
String uuid3 = UUID.randomUUID().toString();
User user3 = new User(uuid3, "y3", "n", 25);
map.put(uuid3, JSONObject.fromObject(user3).toString());
String uuid4 = UUID.randomUUID().toString();
User user4 = new User(uuid4, "y4", "n", 15);
map.put(uuid4, JSONObject.fromObject(user4).toString());
jedis.sadd(USER_TABLE_AGE_15,uuid4);
String uuid5 = UUID.randomUUID().toString();
User user5 = new User(uuid5, "y5", "m", 25);
map.put(uuid5, JSONObject.fromObject(user5).toString());
jedis.sadd(USER_TABLE_SEX_m,uuid5);
//把map存到快取中
jedis.hmset("USER_TABLE", map);
那麼,如果想要查詢年齡為15的user,就需要先從USER_TABLE_AGE_15中取出所有的uuid,然後再從USER_TABLE中取出user
//獲取年齡為15的user的uuid
Set<String> age = jedis.smembers(USER_TABLE_AGE_15);
//根據uuid獲取user
List<User> userJson = new ArrayList<User>();
for (Iterator iterator = age.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
String jsonStr = jedis.hget(USER_TABLE, string);
JSONObject json = JSONObject.fromObject(jsonStr);
User user = (User) JSONObject.toBean(json, User.class);
userJson.add(user);
System.out.println(user);
}
結果如下:
User [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15]
User [id=aa074a2a-88d9-4b50-a99f-1375539164f7, name=y4, sex=n, age=15]
那麼如果現在需要年齡為15,性別為m的user呢,很簡單,獲取
USER_TABLE_AGE_15 和 USER_TABLE_SEX_m的並集,再從USER_TABLE中獲取.
//獲取年齡為15並性別為m的user
Set<String> userSet = jedis.sinter(USER_TABLE_AGE_15,USER_TABLE_SEX_m);
List<User> users = new ArrayList<User>();
for (Iterator iterator = userSet.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
String jsonStr = jedis.hget(USER_TABLE, string);
JSONObject json = JSONObject.fromObject(jsonStr);
User user = (User) JSONObject.toBean(json, User.class);
users.add(user);
System.out.println(user);
}
User [id=63a970ec-e997-43e0-8ed9-14c5eb87de8b, name=y1, sex=m, age=15]