请教redis如何做到和mysql数据库的同步

请教redis如何做到和mysql数据库的同步,第1张

二者数据同步的关键在于mysql数据库中主键,方案是在redis启动时区mysql读取所有表键值存入redis中,往redis写数据是,对redis主键自增并进行读取,若mysql更新失败,则需要及时清除缓存及同步redis主键。

参考代码如下:

String tbname = "login";

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

long id = MySQLgetID(tbname);

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

redisServiceset(tbname, StringvalueOf(id));

Systemoutprintln(id);

long l = redisServiceincr(tbname);

Systemoutprintln(l);

Login login = new Login();

loginsetId(l);

loginsetName("redis");

redisServicehmset(StringvalueOf(logingetId()), login);

boolean b = MySQLinsert("insert into login(id,name) values(" + logingetId()

+ ",'" + logingetName() + "')");

/

队列处理器更新mysql失败:

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

/

if (!b)

{

redisServicedelKeyAndDecr

(tbname, "Login:"+StringvalueOf(logingetId()));

// redisServicedelete("Login:"+StringvalueOf(logingetId()));

//redisServicedecr(tbname);

}

Systemoutprintln(redisServiceexists("Login:"+StringvalueOf(logingetId())));

Systemoutprintln(redisServiceget(tbname));

redis与memcached相比,比仅支持简单的key-value数据类型,同时还提供list,set,zset,hash等数据结构的存储;

redis支持数据的备份,即master-slave模式的数据备份;

一般来说,就是如果系统不是严格要求缓存+数据库必须一致性的话,缓存可以稍微的跟数据库偶尔有不一致的情况,最好不要做这个方案,读请求和写请求串行化,串到一个内存队列里去,这样就可以保证一定不会出现不一致的情况

串行化之后,就会导致系统的吞吐量会大幅度的降低,用比正常情况下多几倍的机器去支撑线上的一个请求。

1直接方法,将需要的查询的数据赋值到excel中。相应调整,然后再赋值到目标表中(对于数据量不大的情况下较快)

2最好两数据库拥有相同的登录名和密码不然比较麻烦

insertinto目标数据库dbo目标表名(字段1字段n)

select段1字段nfrom源数据库dbo源表名或select段1字段ninto目标数据库dbo目标表名from源数据库dbo源表名

3这样的插入注意表字段的长度和约束条件,若原表中字段长,就得将目标表中的字段相应加长

以上就是关于请教redis如何做到和mysql数据库的同步全部的内容,包括:请教redis如何做到和mysql数据库的同步、Redis 缓存怎么与数据库进行数据同步、如何保证缓存与数据库双写时的数据一致性等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9385517.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存