redis数据库设计

       在互联网项目中我们需要提高数据的访问速度,关系型数据库就满足不了我们的要求,所以我们需要使用非关系型数据库来提高查询速度。

redis数据库设计_第1张图片

我们需要把关系型数据库变成键值对存储

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 list = jedis.lrange("team:1:emp", 0, -1);
    Set 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里面即可。

 

 

 

 

 

 

 

你可能感兴趣的:(redis)