redis与mysql数据同步

应用Redis实现数据的读写,同时利用队列处理器定时将数据写入mysql,此种情况存在的问题主要是如何保证mysql与redis的数据同步,二者数据同步的关键在于mysql数据库中主键,方案是在redis启动时区mysql读取所有表键值存入redis中,往redis写数据是,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。

 

[java] view plain copy print?

  1. String tbname = "login";  

  2.           

  3.         //获取mysql表主键值--redis启动时  

  4.         long id = MySQL.getID(tbname);  

  5.         //设置redis主键值--redis启动时  

  6.         redisService.set(tbname, String.valueOf(id));  

  7.   

  8.         System.out.println(id);  

  9.         long l = redisService.incr(tbname);  

  10.         System.out.println(l);  

  11.         Login login = new Login();  

  12.         login.setId(l);  

  13.         login.setName("redis");  

  14.         redisService.hmset(String.valueOf(login.getId()), login);  

  15.   

  16.         boolean b = MySQL.insert("insert into login(id,name) values(" + login.getId()  

  17.                 + ",'" + login.getName() + "')");  

  18.         /** 

  19.          *  

  20.          * 队列处理器更新mysql失败: 

  21.          *  

  22.          * 清除缓存数据,同时主键值自减 

  23.          */  

  24.         if (!b)  

  25.             {  

  26.             redisService.delKeyAndDecr  

  27.                 (tbname, "Login:"+String.valueOf(login.getId()));  

  28.             //  redisService.delete("Login:"+String.valueOf(login.getId()));  

  29.                 //redisService.decr(tbname);  

  30.             }  

  31.         System.out.println(redisService.exists("Login:"+String.valueOf(login.getId())));  

  32.         System.out.println(redisService.get(tbname)); 


你可能感兴趣的:(redis与mysql数据同步)