概要:
- 认识Redis的本质:设计目标,应用场景
- 理解为Redis的工作模式
- 认识Redis计数器
- 如何用Redis计数器实现并发场景下的数量控制
- Redis是什么
- 缓存
- 数据库
- 消息代理
- Redis和Memcache对比
- Memcache是内存对象缓存系统,设计目标为了通过缓解数据库的压力来加快web应用的响应速度
- Redis应用场景更丰富,Memcache仅适合作为缓存使用
- Redis的工作模式
- 单进程(仅有一个进程处理请求)
- 阻塞式(处理请求时具有原子性)
- Memcache与之相反,多进程非阻塞式
- Redis优缺点
- 优点:无需处理并发问题,降低系统复杂度
- 缺点:不适合缓存大尺寸对象(100KB 可修改配置)
- Redis计数器
- 存储类型:整数型String
- 应用场景
- 频率控制
- 接口防刷(key为IP地址,value为访问次数,key生成时间可设置为1s)
- 密码尝试次数限制(防止密码被暴力破解)
- 数量统计:请求量统计(类似频率控制)
- 数量控制:商品抢购,奖励额度控制
- 涉及命令
- exists key //检查key是否存在
- setnx key value //当key不存在时进行set操作
- expire key seconds //设置key的生存时间,没有ttl返回-1,过期返回-2
- ttl ksy //查看key的生存时间
- Redis数量控制器
- 应用场景
- 商品抢购,库存发生超买超卖
- 抽奖限量
- 抢红包
- ...
- 抽奖限额场景v1版本流程图
- 抽奖限额场景v2版本流程图
- 抽奖限额源码
1 <?php 2 require_once('vender/autoload.php');//引入自动加载类 3 use Predis\Client;//引入Predis包 4 5 //获取计数器名称 6 function getKeyName($v){ 7 return "mycounter_".$v; 8 } 9 //生成redis客户端 10 function getRedisClient(){ 11 return new Client([ 12 'host'=>'127.0.0.1', 13 'port'=>'6379' 14 ]); 15 } 16 //记录中奖日志 17 function writeLog($msg, $v){ 18 $log = $msg.PHP_EOL; 19 file_put_contents("log/$v.log", $log, FILE_APPEND); 20 } 21 //v1版本计数器 22 function v1(){ 23 24 }
- 请问