Redis数据库之数据查询与同步

数据的查询:

先将数据库中的数据存储到Redis中

球队表的数据:

球队表的存储:

球队表的测试代码:

@Test
    public void testqueryRedis() {
        Jedis jedis = new Jedis("192.168.100.132", 6379);
        //查询部门的id集合
        List<String> list = jedis.lrange("team:team_id", 0, -1);
        List<Dept> dList = new ArrayList<Dept>();
        for(String teamId : list){
            //获得team_id
            String tname = jedis.hget("team:"+teamId, "t_name");
            String loc = jedis.hget("team:"+teamId, "loc");
            Dept dept = new Dept();
            dept.setDeptId(new Integer(teamId));
            dept.setDname(tname);
            dept.setLoc(loc);
            dList.add(dept);
        }
        System.out.println(dList);
        jedis.close();
    }

人员表的数据:

人员表的存储:

人员表的测试代码:

@Test
    public void testqueryRedis1() {
        Jedis jedis = new Jedis("192.168.100.132", 6379);
        String empId = jedis.hget("emp:1", "emp_id");
        String name = jedis.hget("emp:1", "ename");
        String gender = jedis.hget("emp:1", "gender");
        String teamId = jedis.hget("emp:1", "team_id");
        Emp emp = new Emp();
        emp.setEmpId(new Integer(empId));
        emp.setEname(name);
        emp.setGender(new Integer(gender));
        //获得部门信息
        String tname = jedis.hget("team:"+teamId, "t_name");
        String loc = jedis.hget("team:"+teamId, "loc");
        Dept dept = new Dept();
        dept.setDeptId(new Integer(teamId));
        dept.setDname(tname);
        dept.setLoc(loc);
        emp.setDept(dept);
        jedis.close();
    }

球队跟员工是一对多的关系, 以上的是从多对一的方向来看的, 下面介绍从一对多的方向来看

@Test
    public void testqueryRedis2() {
        Jedis jedis = new Jedis("192.168.100.132", 6379);
        //获得部门信息
        String tname = jedis.hget("team:1", "t_name");
        String loc = jedis.hget("team:1", "loc");
        Dept dept = new Dept();
        dept.setDeptId(new Integer(1));
        dept.setDname(tname);
        dept.setLoc(loc);
        List<String> list = jedis.lrange("team:1:emp", 0, -1);
        Set<Emp> set = new HashSet<Emp>();
        for(String empId : list){
            String name = jedis.hget("emp:"+empId, "ename");
            String gender = jedis.hget("emp:"+empId, "gender");
            String teamId = jedis.hget("emp:"+empId, "team_id");
            Emp emp = new Emp();
            emp.setEmpId(new Integer(empId));
            emp.setEname(name);
            emp.setGender(new Integer(gender));
            set.add(emp);
        }
        dept.setEmpSet(set);
        jedis.close();
    }

数据的同步:

关系型数据库中的数据:

同步代码:

@Test
	public void importRedis(){
		SessionFactory factory = HiberUtils.getSessionFactory();
		Session session = factory.openSession();
		Jedis jedis = new Jedis("192.168.100.132", 6379);
		try {
			//查询时不但会查询出自己的数据,还会查询出关联的数据
			Dept dept = (Dept) session.get(Dept.class, 1);
			//dept:dept_id
			jedis.hset("dept:"+dept.getDeptId(), "dept_id", dept.getDeptId()+"");
			jedis.hset("dept:"+dept.getDeptId(), "dname", dept.getDname()+"");
			jedis.hset("dept:"+dept.getDeptId(), "loc", dept.getLoc()+"");
			
			Set<Emp> empSet = dept.getEmpSet();
			for(Emp emp : empSet){
				jedis.hset("emp:"+emp.getEmpId(), "emp_id", emp.getEmpId()+"");
				jedis.hset("emp:"+emp.getEmpId(), "ename", emp.getEname()+"");
				jedis.hset("emp:"+emp.getEmpId(), "gender", emp.getGender()+"");
				jedis.hset("emp:"+emp.getEmpId(), "birthday", new SimpleDateFormat("yyyy-MM-dd").format(emp.getBirthday())+"");
				jedis.hset("emp:"+emp.getEmpId(), "dept_id", emp.getDept().getDeptId()+"");
				jedis.lpush("dept:"+dept.getDeptId()+":emp", emp.getEmpId()+"");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			session.close();
		}
	}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库Redis之间的数据同步可以通过以下几种方式来实现: 1. 手动同步:在应用程序中,可以编写代码来定期或在特定条件下将数据库中的数据手动同步Redis中,或者将Redis中的数据手动同步数据库中。这种方式需要开发者自行管理同步逻辑和触发时机。 2. 使用消息队列:可以使用消息队列(例如RabbitMQ、Kafka等)来实现数据库Redis之间的数据同步。当数据库中的数据发生变化时,可以将变更操作写入消息队列中,然后由消费者监听消息队列并将变更操作同步Redis中。这种方式可以实现异步的数据同步,提高系统的性能和可扩展性。 3. 使用数据库的触发器:一些数据库(如MySQL)支持触发器,可以在数据库中配置触发器来监听数据变化事件,并在触发器中编写逻辑将变更操作同步Redis中。这种方式可以在数据库层面实现数据同步,无需修改应用程序代码。 4. 使用数据库Redis的双写模式:在应用程序中,同时对数据库Redis进行写操作,保持数据的一致性。当数据发生变化时,应用程序先更新数据库,然后再更新Redis。这种方式需要确保应用程序对数据库Redis的写操作是原子的,以避免数据不一致的情况发生。 需要根据具体的业务场景和需求选择适合的数据同步方式,并确保数据的一致性和可靠性。同时,还需要考虑数据同步的性能和延迟等因素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值