php的原子操作,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
php的原子操作,php实现含有redis命令的原子操作相关推荐
- redis命令参考手册完整版
Redis 命令参考 Key(键) DEL 格式:DEL key [key ...] 删除给定的一个或多个 key . 不存在的 key 会被忽略. 可用版本: >= 1.0.0 时间复杂度: ...
- Redis命令性能优化及事务使用过程
场景 假设有这样一个使用场景,依次执行下面的5条命令 命令1:hset mall:sale:freq:ctrl:860000000000001 599055114591 1(hash结构,field表 ...
- linux 关闭redis 命令_面试必问的 Redis:RDB、AOF、混合持久化
前言 本来说 Redis 分3篇,但是上周写持久化时发现持久化的内容还越多的,于是持久化就单拆一篇了. 我估计后面的主从复制.哨兵.集群内容也是不少,所以说实话,我也不知道之前说的3篇会拆成几篇了 持 ...
- php7.2 安装phpredis扩展,以及phpredis操作redis命令列表
phpredis是redis的php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系;以下是redis官方提供的命令使用技巧: 下载安装地址如下: PHP7.2 安装Redis扩展 ...
- php操作redis命令
phpredis是redis的php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github. ...
- redis命令,SpringBoot整合Redis6,主从复制,哨兵模式,集群,springCache初高级应用。
目录 1. Docker安装Redis 2. Redis的基础 2.1 redis的key命令 2.2 reids的数据结构(6.0新增的数据结构) 1. String(字符串)类型 2. List( ...
- 消息中间件----内存数据库 Redis7(第3章 Redis 命令)
Redis 根据命令所操作对象的不同,可以分为三大类:对 Redis 进行基础性操作的命令, 对 Key 的操作命令,对 Value 的操作命令. 3.1 Redis 基本命令 首先通过 redis- ...
- Redis命令详解:Strings
String类型是Redis中比较常用的类型,因此,和String相关的命令也比较多 APPEND 最早可用版本2.0.0 当指定的key存在,并且value是字符串时,APPEND命令会在字符串末尾 ...
- Redis命令合集和设计场景
目录 常规命令 String字符串类型 BIT位图 [使用bit命令实现签到功能] List有序链表 Hash哈希 Set无序集合 [使用无序集合统计用户的留存数] Sorted Set有序集合 [使 ...
- redis命令,开发规范以及应用场景
Redis的实际操作的相关命令,不同版本之间命令存在差异. 全部命令请查看https://redis.io/commands/ 基础命令 连接客户端 #直接连接 > redis-cli> ...
最新文章
- 判断出栈顺序是否正确(栈的压入、弹出序列)
- Serverless 躁动背后的 5 大落地之痛
- Bzoj1029 [JSOI2007]建筑抢修
- jquery的ajax查询数据库,用Jquery和Ajax查询Django数据库
- 阿里助手 5.12.2
- php 冒泡排序数组,php一维二维数组键之冒泡排序
- python判断linux中文件是否存在_linux shell 中判断文件、目录是否存在的方法
- seo爬虫工具 php,爬虫工具有哪些(爬虫网页分析工具)
- Linux命令简写和全称-2
- STL的Deque介绍
- 做运动(Dijkstra+并查集+MST)
- Machine Learning lectures- 机器学习课程
- DRILLNET 2.0------第十三章 尾管固井扭矩/摩阻模型
- C++加载csb文件
- SQL Server 2008 中文企业版下载
- ifrog 1130 喵哈哈村的魔法大师╳灬兲笙疯癫°月 缩点+最小路径覆盖+背包
- 中国电子学会2022年python六级考试真题大题 类与对象练习题
- 标志寄存器的状态标志
- Python快速搭建网站
- 软件导刊三审被退稿_【软件导刊】省级期刊_计算机杂志_91学术
热门文章
- Java内部类访问局部变量时的final问题
- Java基础---Java中运算符优先级(十六)
- Gitlab的管理使用手册
- java基础----对象的创建过程(初始化、析构、清理)
- python的shutil模块是内置的_python内置模块~shutil
- js触发click事件
- android string-array xml 引用,如何把数据动态地写进array.xml的string-array里?
- Layui 左部菜单栏无限级分类
- Layer表格列根据配置动态显示
- MySQL数据库将多条记录的单个字段合并成一条记录(GROUP_CONCAT)