文档章节

redis(3):redis如何做队列

fzxu_05
 fzxu_05
发布于 2013/01/31 17:22
字数 461
阅读 1.7K
收藏 9

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>


前言:缓存不仅可以减少数据库的查询读取压力,还可以减少db的写入io压力

方案:缓存实时更新数据,并将更新记录写入队列,db异步更新,

1.可以使用类似mq(如rabbitmq)队列软件

2.redis自行建队列

(注意要使用increment来维持队列序号:具体原因如下:使用 get 后处理数据再set的方式维护队列,会因为并发导致数据丢失。

示例说明:

ab测试下面的脚本,并发100,跑10000次

一.get& set脚本

ab -n 10000 -c 100 http://127.0.0.1/redis1.php

include_once 'redis.class.php';
$redis = new RedisCluster(false);
$redis->connect(array('host'=>'127.0.0.1','port'=>6379), true);// master

$var = $redis->get('var');
$var++;
$redis->set('var',$var);
$redis->close();


跑完脚本读取缓存数据(我的是在512M的虚拟机上跑的,不同的机器数据不同,不过肯定低于10000,其他的数字都在get & set中被覆盖掉了)

redis 127.0.0.1:6379> get var 
"628"


原因:

读写间隔中其他并发写入,导致数据丢失


二.incr


include_once 'redis.class.php';
$redis = new RedisCluster(false);
$redis->connect(array('host'=>'127.0.0.1','port'=>6379), true);// master
$redis->incr('var');
$redis->close();


会得到完整的10000条数据,不会丢失


redis 127.0.0.1:6379> get var 
"10000"


)

总结:用incr存储队列编号,用标记+编号作为key存储队列内容,比如商品竞拍功能

4.后台基于缓存队列读取更新数据并更新数据库

异步更新的风险:

(1).前后端同时写,有可能造成覆盖的风险

(2).缓存数据丢失或服务崩溃可能导致数据丢失风险

(3).异步更新如出现队列阻塞可能导致数据丢失风险,比如前台生成队列的速度>后台写数据库的速度



推荐一个不错的网站




© 著作权归作者所有

fzxu_05
粉丝 44
博文 165
码字总数 84201
作品 0
朝阳
程序员
私信 提问
加载中

评论(0)

面试官心理分析+面试题剖析:消息队列+Redis 缓存+分布式系统等

消息队列 1、为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点? 2、如何保证消息队列的高可用? 3、如何保证消息不被重复消费?或者...

wx5d6cccb1cb158
04/21
0
0
Redis 面试题(持续更新)

前言 看了一圈,发现Redis的面试题主要问的是如下几块: 原理 用处(缓存/队列 包括Pub、Sub/计数器/排行榜等) 基本操作与数据类型 消息队列 且与其它消息队列的区别 主从备份 宕机如何处理 持...

osc_ea5rlz4l
2018/08/13
7
0
记录一次失败的面试 大家千万不要学我 请不要笑我

这一段时间因为已经的原因,老公司一直发展的不太好,所以想另寻出路,所以就想再找一份工作,然而就在前几天找到了一个面试机会,并且通过了初试,然而在复试的时候出现可致命的问题。九成栽...

布丁萨玛
04/07
0
0
46道史上最全Redis面试题,面试官能问的都被我找到了(含答案)

Redis高性能缓存数据库 1、什么是 Redis?简述它的优缺点? Redis 的全称是:Remote Dictionary.Server,本质上是一个 Key-Value 类型的内存数据库,很像 memcached,整个数据库统统加载在内...

我最喜欢三大框架
2019/03/19
303
0
左手Mongodb右手Redis 第一章,进入Mongodb和Redis的世界

---恢复内容开始--- 1,为什么要使用非关系型数据库,关系型数据库咋滴,不能用嘛?   存在即合理,非关系型数据库的出现,那说明关系型数据库不适用了。   非关系型数据库(NOSQL)-->Not...

osc_qg4dad59
2019/08/14
1
0

没有更多内容

加载失败,请刷新页面

加载更多

c/c++编写window服务的授权服务(二)

//c/c++编写window服务的授权服务(二) //定义授权服务的头文件LicenseService.h #pragma once //建立工程:win32控制平台应用程序 //LicenseService.cpp //用C/C++编写的Window服务一例 //安...

osc_wxsc35it
6分钟前
9
0
开发一个大型后台管理系统,应该用前后端分离的技术方案吗?

话说这天,我们团队开会讨论了一个问题,不,与其说“讨论”,不如说“争吵”更合适。 背景是这样的: 我们要开发一个 xxx 后台管理系统,这个系统业务复杂、功能又多,大家的争吵集中在“这...

osc_qalfjuu8
8分钟前
8
0
美团点评的移动端网络优化实践:大幅提升连接成功率、速度等

1、引言 网络优化对于移动端App产品的用户体验至关重要,也与公司的运营和营收息息相关。 这里列举两个公开的数据: “《页面加载超过3秒,57%的用户会离开》” “《Amazon页面加载延长1秒,...

imtech
8分钟前
5
0
在webstorm 中直接运行ts文件

安装插件后重启IDE Run Configuration for TypeScript

阿豪boy
8分钟前
13
0
PyCharm2020激活破解教程

本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12767075.html 正版肯定是要支持的,但是贫穷限制了我。现在买是不可能买的,只能靠着破解激活来维持生计...

osc_91g5cdgs
10分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部