redis数据库设计
在互联网项目中我们需要提高数据的访问速度,关系型数据库就满足不了我们的要求,所以我们需要使用非关系型数据库来提高查询速度。
我们需要把关系型数据库变成键值对存储
1.用户的存储
Key的设计:在key中我们可以使用list来存储所有的球队的id
List中的key
结构类型 key value
list team:team_id 1234....
tetam:team_id: [ 1,2,3,4.....]
每一支球队的存储使用hash
结构类型 key key_attr value
hash 表名:[ team_id值] name 公牛
hash 表名:[ team_id值] addr 芝加哥
hash 表名:[ team_id值] team_id 101
team:101 : [{team_id: 101}, {name: 骑士}, {addr: 克利夫兰}]
命令行实现:
192.168.153.128:6379> lpush team:team_id 1 2
(integer) 2
192.168.153.128:6379> hmset team:1 team_id 1 t_name gongniu loc zhijiage
OK
192.168.153.128:6379> hmset team:2 team_id 2 t_name qishi loc kelifulan
OK
192.168.153.128:6379>
test类:
/*
* 根据teamID来查询部门下的人
* */
@Test
public void testsqueryRedis3() {
Jedis jedis = new Jedis("192.168.153.128", 6379);
// 获得部门信息
String t_name = jedis.hget("team:1", "t_name");
String loc = jedis.hget("team:1", "loc");
Dept dept = new Dept();
dept.setTeam_id(new Integer(1));
dept.setName(t_name);
dept.setLoc(loc);
List<String> list = jedis.lrange("team:1:emp", 0, -1);
Set<Emp> set = new HashSet<>();
for (String empId : list) {
String emp_id = jedis.hget("emp:" + empId, "emp_id");
String e_name = jedis.hget("emp:" + empId, "e_name");
String gender = jedis.hget("emp:" + empId, "gender");
String tid = jedis.hget("emp:1", "tid");
Emp emp = new Emp();
emp.setEx_id(new Integer(emp_id));
emp.setName(e_name);
emp.setGender(new Integer(gender));
set.add(emp);
}
dept.setEmp(set);
jedis.close();
}
这块说白了就是把关系型数据库变成键值对存储到redis当中,在实际项目中,映射好model,查出数据设计好要存储在redis当中的关系,然后add到redis里面即可。