当前位置: 首页 > 工具软件 > Redis TUI > 使用案例 >

php redis 原子操作,php,redis_php实现含有redis命令的原子操作,php,redis - phpStudy

蒙墨竹
2023-12-01

php实现含有redis命令的原子操作

在做一个爬虫,其中有一部分是评论数据。因为评论数太多,所以想要将爬取下来的评论进行分表。

目前的思路是:

每个表保存100万条数据(1-1000000保存在table1,1000001-2000000保存在table2)。

在redis创建一个String键comment:totalNum,保存数据库中已有的评论数。

根据 comment:totalNum 来确定评论的主键id以及保存到哪个表中。

目前思路是:

$id = $redis->get( 'comment:totalNum' );

$tableName = getTableName( $id );

$sql = "insert xxx";

$res = $db->mysql_query( 'sql' );

if( $res ){

$redis->incr( 'comment:totalNum' );

}

因为考虑用多线程,所以当一个表快要到100万条数据时,就会有一个问题:

如果一个进程获取了comment:totalNum为1000000,判断可以放在表一中,然后去执行对数据库的操作,但是如果此时也有一个进程获取了comment:totalNum的值,那么也会进行对数据库的操作,结果就会是数据库中增加了两条记录,一条主键为1,000,000,一条主键为1,000,001,不符合初衷。

所以我想问一下,有没有比较好的方法,能实现:

原子操作 start

$id = $redis->get( 'comment:totalNum' );

$tableName = getTableName( $id );

$sql = "insert xxx";

$res = $db->mysql_query( 'sql' );

if( $res ){

$redis->incr( 'comment:totalNum' );

}

原子操作 end

相关阅读:

Python的lxml模块,无法用dtd验证xml文件是为什么?

ios 怎样让远程通知在通知栏中显示

webkit内核浏览器创建快捷方式

用gdb tui模式调试无法从标准输入?

什么是ORM,以及在php上的使用?

GULP有什么插件能够对HTML文件的css进行合并

关于JS中Object.create的兼容实现

nodejs get请求,希望数据能在游览器缓存

php中的可变变量和引用赋值有什么区别

运行angular2文件报错?

java,返回错误

用json-lib,把json串转成java对象问题

关于移动web前端,由于不同的devicePixelRatio到指定的css尺寸和实际显示尺寸不一样的问题?

有 npm script 还需要 gulp 么?

在table中使用border-collapse时如何设置不同的border颜色?

引入jquery分页插件

对已获取的url和参数,如何模拟post请求?

canvas画图IPAD上画不出来。

reactjs和flux的一些疑问

expdp的问题

 类似资料: