RedisはSQLのようなwhereマルチ条件クエリを実現する
4466 ワード
1、Userテーブルを保存する方案について
1.1 RedisのHashタイプを使用してリレーショナル・データベースのUserテーブルを保存する
1.2 RedisのHashのkeyは「SYS_USER_TABLE_SEX_MAN」、field:userid value:jsonデータ
2.RedisのSetを利用して、一種類の条件を満たすUserユーザのid情報を保存する.例えば、性別は女性で、年齢は25歳以上などの条件です.
3、Java実現の具体的なコードは以下の通りである.
3.1 Json関連ツールクラス
3.2 Userエンティティークラス
3.3 RedisはSQLのような多条件クエリーテストを実現する
4、テストコードのダウンロード
1.1 RedisのHashタイプを使用してリレーショナル・データベースのUserテーブルを保存する
1.2 RedisのHashのkeyは「SYS_USER_TABLE_SEX_MAN」、field:userid value:jsonデータ
2.RedisのSetを利用して、一種類の条件を満たすUserユーザのid情報を保存する.例えば、性別は女性で、年齢は25歳以上などの条件です.
3、Java実現の具体的なコードは以下の通りである.
3.1 Json関連ツールクラス
public class GsonUtil {
public static String object2Json(Object object) {
Gson gson = new Gson();
return gson.toJson(object);
}
public static T json2Object(String json, Class clazz) {
Gson gson = new Gson();
return gson.fromJson(json, clazz);
}
}
3.2 Userエンティティークラス
public class User {
private int id;
private String name;
private String sex;
private int age;
public User() {
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int 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;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", age="
+ age + "]";
}
}
3.3 RedisはSQLのような多条件クエリーテストを実現する
public class RedisSQL {
public static void main(String[] args) {
// User Redis , key
// User field:id value: json
final String SYS_USER_TABLE = "SYS_USER_TABLE";
// User Redis Set
final String SYS_USER_TABLE_SEX_MAN = "SYS_USER_TABLE_SEX_MAN";
// Redis Set
final String SYS_USER_TABLE_SEX_FEMAN = "SYS_USER_TABLE_SEX_FEMAN";
// age 25 Redis Set
final String SYS_USER_TABLE_AGE_25 = "SYS_USER_TABLE_AGE_25";
//
Jedis jedis = new Jedis("192.168.2.116", 6379);
// User
List users = new ArrayList();
for (int i = 0; i < 5; i++) {
User user = new User();
user.setId(i);
user.setName("zhang" + i);
user.setSex("man");
user.setAge(20 + i);
users.add(user);
}
for (int i = 5; i < 10; i++) {
User user = new User();
user.setId(i);
user.setName("zhang" + i);
user.setSex("feman");
user.setAge(20 + i);
users.add(user);
}
// Hash
Map map = new HashMap();
for (int i = 0; i < users.size(); i++) {
map.put(users.get(i).getId() + "",
GsonUtil.object2Json(users.get(i)));
// User
// Redis key SYS_USER_TABLE_SEX_MAN Set
// User id
if ("man".equals(users.get(i).getSex())) {
jedis.sadd(SYS_USER_TABLE_SEX_MAN, users.get(i).getId() + "");
}
// User
// Redis key SYS_USER_TABLE_SEX_MAN Set
// User id
if ("feman".equals(users.get(i).getSex())) {
jedis.sadd(SYS_USER_TABLE_SEX_FEMAN, users.get(i).getId() + "");
}
// age,birthday ,
// Redis , Set, User id
if ("25".equals(users.get(i).getAge() + "")) {
jedis.sadd(SYS_USER_TABLE_AGE_25, users.get(i).getId() + "");
}
}
//
// Set keySet = map.keySet();
// for (String key : keySet) {
// System.out.println(map.get(key));
// }
// User Redis
// key SYS_USER_TABLE
// feild :id value:json
jedis.hmset(SYS_USER_TABLE, map);
// ===============================
// SQL where
// 25 , user
Set sinter = jedis.sinter(SYS_USER_TABLE_SEX_FEMAN);
for (String key : sinter) {
// id Redis SYS_USER_TABLE, user
String hkey = jedis.hget(SYS_USER_TABLE, key);
System.out.println(hkey);
// json , User
User user = GsonUtil.json2Object(hkey, User.class);
System.out.println(user);
}
// 25 , user
Set sinter2 = jedis.sinter(SYS_USER_TABLE_SEX_FEMAN,
SYS_USER_TABLE_AGE_25);
for (String key : sinter2) {
// id Redis SYS_USER_TABLE, user
String hkey = jedis.hget(SYS_USER_TABLE, key);
System.out.println(hkey);
// json , User
User user = GsonUtil.json2Object(hkey, User.class);
System.out.println(user);
}
}
}
4、テストコードのダウンロード