首先说一下,Jedis是redis支持Java的第三方类库,我们可以使用Jedis类库来操作redis数据库。
关于基本的数据类型的操作就不上例子了,我们直接上一个有场景的例子。
现在假设一个场景:User对象数据量很大,查询很繁琐,需要把User表的数据存放在缓存里面
* 假设我们要这样查询:select * from user where age = 25 and sex = 'w'
* 思路应该是:多种集合配合使用 hash和set类型同时使用
* 指定查询业务 SYS_USER_SEL_AGE_25 //查询年龄25岁的
* 指定查询业务 SYS_USER_SEL_SEX_m //性别为m
* 指定查询业务 SYS_USER_SEL_SEX_w //性别为w
* 数据准备:
* 1、我们的用户数据都存放在hash类型中,name为SYS_USER_TABLE,key为uuid(用户的id),value为json格式的User数据
* 2、然后根据查询业务的条件分别存放在各自的set中,set的name就是上面的(SYS_USE_SEL_AGE_25。。。)value是用户id
例子代码:
public class TestRedis {
@Test
public void test1(){
Jedis j = new Jedis("192.168.123.11", 6379);
/*String name = j.get("name");
System.out.println(name);*/
/**
* 现在假设一个场景:User对象数据量很大,查询很繁琐,需要把user表的数据存放在缓存里面
* 假设我们要这样查询:select * from user where age = 25 and sex = 'm'
* 思路应该是多种集合配合使用 hash和set类型同时使用
* 指定查询业务 SYS_USER_SEL_AGE_25 //查询年龄25岁的
* 指定查询业务 SYS_USER_SEL_SEX_m //性别为m
* 指定查询业务 SYS_USER_SEL_SEX_w //性别为w
* 数据准备:
* 1、我们的用户数据都存放在hash类型中,name为SYS_USER_TABLE,key为uuid,value为json格式的user数据
* 2、然后根据查询业务的条件分别存放在各自的set中,set的name就是上面的(SYS_USE_SEL_AGE_25。。。)value是用户id
*/
final String SYS_USER_TABLE = "SYS_USER_TABLE";
final String SYS_USER_SEL_AGE_25 = "SYS_USER_SEL_AGE_25";
final String SYS_USER_SEL_SEX_m = "SYS_USER_SEL_SEX_m";
final String SYS_USER_SEL_SEX_w = "SYS_USER_SEL_SEX_w";
/**
* 数据在最底下已经准备好了
* 那么我们如果现在查询25岁的人呢
* select * from user where age = 25
* 1、我们先根据key获取set集合
* 2、然后根据拿到的id的set集合到hash里面拿user的详细信息
*/
Set<String> set = j.smembers(SYS_USER_SEL_AGE_25);
for (Iterator<String> iterator = set.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
String userStr = j.hget(SYS_USER_TABLE, string);
User user = FastJsonConvert.convertJsonStr2Object(userStr, User.class);
System.out.println(user);
}
System.out.println("----------------------");
/**
* 我们如果现在查询25岁的并且性别为w的呢
* select * from user where age = 25 and sex = 'w'
* 1、根据keys取交集
* 3、然后根据拿到的id的set集合到hash里面拿user的详细信息
*/
Set<String> set2 = j.sinter(SYS_USER_SEL_AGE_25,SYS_USER_SEL_SEX_w);
for (Iterator<String> iterator = set2.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
String userStr = j.hget(SYS_USER_TABLE, string);
User user = FastJsonConvert.convertJsonStr2Object(userStr, User.class);
System.out.println(user);
}
//先准备一些数据
/*Map<String,String> userMap = new HashMap<String, String>();
String u1id = UUID.randomUUID().toString();
User u1 = new User(u1id,"z3",25,"m");
j.sadd(SYS_USER_SEL_AGE_25, u1id);
j.sadd(SYS_USER_SEL_SEX_m, u1id);
userMap.put(u1id, FastJsonConvert.convertObject2JsonStr(u1));
String u2id = UUID.randomUUID().toString();
User u2 = new User(u1id,"l4",26,"w");
j.sadd(SYS_USER_SEL_SEX_w, u2id);
userMap.put(u2id, FastJsonConvert.convertObject2JsonStr(u2));
String u3id = UUID.randomUUID().toString();
User u3 = new User(u1id,"w5",25,"m");
j.sadd(SYS_USER_SEL_AGE_25, u3id);
j.sadd(SYS_USER_SEL_SEX_m, u3id);
userMap.put(u3id, FastJsonConvert.convertObject2JsonStr(u3));
String u4id = UUID.randomUUID().toString();
User u4 = new User(u4id,"h6",24,"w");
j.sadd(SYS_USER_SEL_SEX_w, u4id);
userMap.put(u4id, FastJsonConvert.convertObject2JsonStr(u4));
String u5id = UUID.randomUUID().toString();
User u5 = new User(u5id,"f7",22,"m");
j.sadd(SYS_USER_SEL_SEX_m, u5id);
userMap.put(u5id, FastJsonConvert.convertObject2JsonStr(u5));
j.hmset(SYS_USER_TABLE, userMap);*/
}
}
FastJson转换工具:
package com.demo.test;
import com.alibaba.fastjson.JSON;
public class FastJsonConvert {
/**
* Json字符串 转为 Object
* @param data
* @param clazz
* @return
*/
public static <T>T convertJsonStr2Object(String data,Class<T> clazz) {
try{
T t = JSON.parseObject(data, clazz);
return t;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
/**
* Object 转为 Json字符串
* @param obj
* @return
*/
public static String convertObject2JsonStr(Object obj){
try{
String text = JSON.toJSONString(obj);
return text;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}
实体类User:
package com.demo.test;
public class User {
private String id;
private String name;
private int age;
private String sex;
public User(){}
public User(String id, String name, int age, String sex) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}