免责声明

易百易数码科技

php redis做mysql的缓存,怎么异步redis同步到mysql数据库,什么是异步函数

php redis做mysql的缓存,怎么异步redis同步到mysql数据库

正常情况下是没有问题的,

但是有人用恶意脚本进行刷奖,也就是同一个人发起大量请求,1秒可能一两百的请求甚至更多,而且不只一个人刷奖。

php redis做mysql的缓存,怎么异步redis同步到mysql数据库,什么是异步函数-图1

问题出在1这一步

举个例子,假设每人只能抽一次奖,因为请求太快,同一人的a,b两个请求几乎同时来,a走完抽奖逻辑了,并且在抽奖表中插入记录的过程时,因为mysql的性能的问题,b去走1这一步是读不到表中的记录的,因为a的插入根本没有完成。所以b请求会再走一次抽奖逻辑。造成同一人抽奖两次,然后再插入抽奖表。

我关心的是能否a插入抽奖表的瞬间,b就能判断出抽奖表有数据。

php redis做mysql的缓存,怎么异步redis同步到mysql数据库,什么是异步函数-图2

所以我觉得问题是mysql写入的不够快,读取的不够快,所以我要采用redis做一层快速缓存。

我们做的抽奖是单一奖品百分之百中奖,只限制奖品数量,所以必须保证每人只能抽一次,而且尽量在程序层面去解决。

redis缓存怎么定时异步加载

想要对redis缓存进行定时异步加载,可以在项目中写一个定时任务,每隔一定时间触发,将数据写入缓存

php redis做mysql的缓存,怎么异步redis同步到mysql数据库,什么是异步函数-图3

要实现Redis缓存的定时异步加载,你可以采取以下步骤:

使用定时任务:使用定时任务框架(如Cron或Quartz),编写一个定时任务,定期触发缓存加载操作。

异步加载:在定时任务中,开启一个异步线程或使用异步框架(如Spring的@Async注解)执行数据加载操作。

更新缓存:在异步加载操作完成后,将加载的数据更新到Redis缓存中。

控制频率:确保定时任务的触发频率和异步加载的数据量合理,以避免对系统性能产生负面影响。

这种方式可以在固定的时间间隔内异步加载数据,以保持缓存的更新和有效性。

redis持久化方式区别

Redis运行时数据保存在内存中,那么重启了服务器数据丢失了怎么办,自然也提供持久化的设置。

redis支持两种持久化方式,RDB和aof模式。

RDB方式是定时将内存中的数据dump到磁盘中。实现是定时fork个子进程,将内存数据写入文件中,再替换上次生成的文件,这个过程如果服务器出现异常宕机,那么会导致数据丢失。RDB模式一个文件保存redis所有数据,在做数据恢复时就很方便。对某个时间节点做数据备份的场景也十分方便。

AOF则是记录事务操作日志,追加写入到文件中。aof支持三种策略记录操作日志。

1.每修改同步,即每次事务操作都立即记录。

2.每秒同步,每秒钟异步记录。

3.不同步,即不记录。

每秒同步跟RDB一样存在数据丢失的风险。对于大数据量的数据恢复上RDB会比AOF效率高。

redis双删和最后删一次区别

1. Redis双删和最后删一次的区别在于操作的效率和数据的一致性。
2. Redis双删是指在删除某个键值对时,先发送一条异步删除命令,再发送一条同步删除命令,这样可以保证数据的一致性,但是效率较低。
而最后删一次则是在需要删除某个键值对时,直接发送一条同步删除命令,效率较高,但是可能会存在数据不一致的情况。
3. 如果对数据的一致性要求较高,可以选择使用Redis双删;如果对效率要求较高,可以选择使用最后删一次。
同时,也可以根据具体的业务场景和需求来选择使用哪种方式。

到此,以上就是小编对于什么是异步函数的问题就介绍到这了,希望介绍的4点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。

分享:
扫描分享到社交APP
上一篇
下一篇