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

目前的思路是:

每个表保存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

php的原子操作,php实现含有redis命令的原子操作相关推荐

  1. redis命令参考手册完整版

    Redis 命令参考 Key(键) DEL 格式:DEL key [key ...] 删除给定的一个或多个 key . 不存在的 key 会被忽略. 可用版本: >= 1.0.0 时间复杂度: ...

  2. Redis命令性能优化及事务使用过程

    场景 假设有这样一个使用场景,依次执行下面的5条命令 命令1:hset mall:sale:freq:ctrl:860000000000001 599055114591 1(hash结构,field表 ...

  3. linux 关闭redis 命令_面试必问的 Redis:RDB、AOF、混合持久化

    前言 本来说 Redis 分3篇,但是上周写持久化时发现持久化的内容还越多的,于是持久化就单拆一篇了. 我估计后面的主从复制.哨兵.集群内容也是不少,所以说实话,我也不知道之前说的3篇会拆成几篇了 持 ...

  4. php7.2 安装phpredis扩展,以及phpredis操作redis命令列表

    phpredis是redis的php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系;以下是redis官方提供的命令使用技巧: 下载安装地址如下: PHP7.2 安装Redis扩展 ...

  5. php操作redis命令

    phpredis是redis的php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github. ...

  6. redis命令,SpringBoot整合Redis6,主从复制,哨兵模式,集群,springCache初高级应用。

    目录 1. Docker安装Redis 2. Redis的基础 2.1 redis的key命令 2.2 reids的数据结构(6.0新增的数据结构) 1. String(字符串)类型 2. List( ...

  7. 消息中间件----内存数据库 Redis7(第3章 Redis 命令)

    Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令, 对 Key 的操作命令,对 Value 的操作命令. 3.1 Redis 基本命令 首先通过 redis- ...

  8. Redis命令详解:Strings

    String类型是Redis中比较常用的类型,因此,和String相关的命令也比较多 APPEND 最早可用版本2.0.0 当指定的key存在,并且value是字符串时,APPEND命令会在字符串末尾 ...

  9. Redis命令合集和设计场景

    目录 常规命令 String字符串类型 BIT位图 [使用bit命令实现签到功能] List有序链表 Hash哈希 Set无序集合 [使用无序集合统计用户的留存数] Sorted Set有序集合 [使 ...

  10. redis命令,开发规范以及应用场景

    Redis的实际操作的相关命令,不同版本之间命令存在差异. 全部命令请查看https://redis.io/commands/ 基础命令 连接客户端 #直接连接 > redis-cli> ...

最新文章

  1. 判断出栈顺序是否正确(栈的压入、弹出序列)
  2. Serverless 躁动背后的 5 大落地之痛
  3. Bzoj1029 [JSOI2007]建筑抢修
  4. jquery的ajax查询数据库,用Jquery和Ajax查询Django数据库
  5. 阿里助手 5.12.2
  6. php 冒泡排序数组,php一维二维数组键之冒泡排序
  7. python判断linux中文件是否存在_linux shell 中判断文件、目录是否存在的方法
  8. seo爬虫工具 php,爬虫工具有哪些(爬虫网页分析工具)
  9. Linux命令简写和全称-2
  10. STL的Deque介绍
  11. 做运动(Dijkstra+并查集+MST)
  12. Machine Learning lectures- 机器学习课程
  13. DRILLNET 2.0------第十三章 尾管固井扭矩/摩阻模型
  14. C++加载csb文件
  15. SQL Server 2008 中文企业版下载
  16. ifrog 1130 喵哈哈村的魔法大师╳灬兲笙疯癫°月 缩点+最小路径覆盖+背包
  17. 中国电子学会2022年python六级考试真题大题 类与对象练习题
  18. 标志寄存器的状态标志
  19. Python快速搭建网站
  20. 软件导刊三审被退稿_【软件导刊】省级期刊_计算机杂志_91学术

热门文章

  1. Java内部类访问局部变量时的final问题
  2. Java基础---Java中运算符优先级(十六)
  3. Gitlab的管理使用手册
  4. java基础----对象的创建过程(初始化、析构、清理)
  5. python的shutil模块是内置的_python内置模块~shutil
  6. js触发click事件
  7. android string-array xml 引用,如何把数据动态地写进array.xml的string-array里?
  8. Layui 左部菜单栏无限级分类
  9. Layer表格列根据配置动态显示
  10. MySQL数据库将多条记录的单个字段合并成一条记录(GROUP_CONCAT)