扫码关注官方订阅号
之前没接触过redis,能否详细给我解释下如何使用?百度了没找到典型例子啊
认证0级讲师
用php-worker模式啊。大致应该如此
$cache_data = $redis->get_all(); $redis->flush_all(); $sqlArr = []; for($item in $cache_data){ array_push($sqlArr,sql_gen($item)); } execute_sqls($sqlArr); sleep($sleep_time);
写个daemon不停的读redis就行了。
1.程序启动2.读取新数据(按照timestamp排序获取最旧的)3.没有数据,sleep 1秒3.有数据,操作mysql,更新最后一次检查的时间戳timestamp
timestamp
你不知道redis有消息队列功能么,让其它线程用blpop这种阻塞读取的模式从队列里读消息就可以了
可以考虑两种方式:(1)list作为缓存,借用producer/consumer模式(2)Pub/Sub,订阅消息,写MySQL
以前我在stackoverflow上也问过这个问题,好多答案都是说redis用list存,然后设置一个每分钟跑的cron任务去读这个list,为什么不用while (true)是因为长时间执行的php进程可能会造成内存泄漏。
while (true)
不过现在我已经在尝试使用rabbitmq来实现队列了,效果也很不错哟。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
用php-worker模式啊。大致应该如此
写个daemon不停的读redis就行了。
1.程序启动
2.读取新数据(按照
timestamp排序获取最旧的)3.没有数据,sleep 1秒
3.有数据,操作mysql,更新最后一次检查的时间戳
timestamp你不知道redis有消息队列功能么,让其它线程用blpop这种阻塞读取的模式从队列里读消息就可以了
可以考虑两种方式:
(1)list作为缓存,借用producer/consumer模式
(2)Pub/Sub,订阅消息,写MySQL
以前我在stackoverflow上也问过这个问题,好多答案都是说redis用list存,然后设置一个每分钟跑的cron任务去读这个list,为什么不用
while (true)是因为长时间执行的php进程可能会造成内存泄漏。不过现在我已经在尝试使用rabbitmq来实现队列了,效果也很不错哟。