mysql保障数据一致性:redis与mysql数据同步(二)

来源:互联网 发布:电脑虚拟打印机软件 编辑:程序博客网 时间:2024/04/28 19:10

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


[java] view plain copy
  1. <span style="white-space:pre">    </span>String tbname = "login";             
  2.         //获取mysql表主键值--redis启动时    
  3.         long id = MySQL.getID(tbname);    
  4.         //设置redis主键值--redis启动时    
  5.         redisService.set(tbname, String.valueOf(id));    
  6.   
  7.         System.out.println(id);    
  8.         long l = redisService.incr(tbname);    
  9.         System.out.println(l);    
  10.         Login login = new Login();    
  11.         login.setId(l);    
  12.         login.setName("redis");    
  13.         redisService.hmset(String.valueOf(login.getId()), login);    
  14.     
  15.         boolean b = MySQL.insert("insert into login(id,name) values(" + login.getId()    
  16.                 + ",'" + login.getName() + "')");    
  17.         /**  
  18.          *   
  19.          * 队列处理器更新mysql失败:  
  20.          *   
  21.          * 清除缓存数据,同时主键值自减  
  22.          */    
  23.         if (!b)    
  24.             {    
  25.             redisService.delKeyAndDecr    
  26.                 (tbname, "Login:"+String.valueOf(login.getId()));    
  27.             //  redisService.delete("Login:"+String.valueOf(login.getId()));    
  28.                 //redisService.decr(tbname);    
  29.             }    
  30.         System.out.println(redisService.exists("Login:"+String.valueOf(login.getId())));    
  31.         System.out.println(redisService.get(tbname));    


原文:http://blog.csdn.net/hpb21/article/details/7905352
0 0
原创粉丝点击