ThinkPHP+Redis实现简单抽奖
Redis集合简介
Redis的集合数据类型,功能非常强大。说到集合的话,你可能想到高中数学上的集合。其实他们本就是一个意思。Redis集合里面可以存放很多字符串(元素),Redis最多支持2的32次方减1个元素,但是集合里的元素都是唯一的,不会有重复。和数学里集合一样,Redis也支持交集,并集以及差集。
用它可以完成许多有意思的功能。最常见的就是标签功能了,可能A用户的标签有“动漫”、”运动“、”二次元“,B用户的标签有”运动“、”旅游“、”篮球“。那么,使用集合的并集,就能知道他们的共同标签是什么。另外,当系统知道用户的标签后,就可以给他们推荐相关的广告或产品。除此之外,还要许多有意思的功能它也能实现。今天,我们来看看如何使用Reids实现抽奖功能。
sRandMember、sPop
这两个命令功能非常相似,都是从集合中返回一个元素值。不同的是,sRandMember不会从集合中删除返回的元素,但是sPop会删除。这两个命令可以分别实现不同的抽奖算法。
比如,集合中有100个元素,值从数字1到数字100.我们定义抽到的是数字1的话,即表示中奖。
使用sRandMember的话,不管之前抽过多少次,下次抽中的概率都是1%。而使用sPop的话,则每次抽中的概率都不一样。第一个人抽中概率是1%,当第一个人没抽中的话,第二个人抽中概率就是1/99,以此类推。
抽奖功能实现
抽奖功能实现其实就只有两步,首先设置抽奖概率,即往集合中添加元素,然后就是开始抽奖了。
设置抽奖概率,伪代码如下:
//抽奖活动,获取一个兑换码 定义1-10中奖public function create($key = 'draw', $type = 'nil'){//tp6加载redis$redis = Cache::store('redis')->handler();//中奖逻辑if ($type == 'nil') {// 普通用户概率小 算法 不会产生重复 去生成兑换码$num = mt_rand(7, 9999);} else if ($type == 'VIP') {$num = mt_rand(3, 1000);} else if ($type == 'VIP8') {$num = mt_rand(1, 2);}$redis->sAdd($key, $num);return $num;}
//开奖 只开奖 不写逻辑public function read($key, $stand = 10){$bool = $this->draw($key, $stand = 10);//给用户的开奖结果return $bool ? '恭喜你中奖了,天选之子' : '很遗憾,差亿点就中奖了';}//写开奖逻辑public function draw($key, $stand){$redis = Cache::store('redis')->handler();//判断集合是否还有没有开奖内容if ($redis->scard($key) > 0) {//真正随机开奖$number = $redis->spop($key);} else {echo "抽奖结束";exit();}echo $number . "<hr/>";return $number < $stand;}
注意:路由传参
ThinkPHP+Redis实现简单抽奖相关推荐
- Redis 项目实战 —— 抽奖大转盘
1. 项目介绍 这是一个基于Spring boot + Mybatis Plus + Redis 的简单案例. 主要是将活动内容.奖品信息.记录信息等缓存到Redis中,然后所有的抽奖过程全部从Red ...
- python七夕快乐_python编写简单抽奖系统
python编写简单抽奖系统 #!/usr/bin/env python #coding=utf-8 from Tkinter import * import time import random c ...
- redis高并发抽奖
2019独角兽企业重金招聘Python工程师标准>>> redis高并发抽奖 代码有点缭乱,没时间整理,如果有误还请留言斧正.现在进入正题. 一.思路 1.奖品: 奖品分为奖品id( ...
- Redis的简单实践
Redis的简单实践 文章目录 Redis的简单实践 前言 Redis简介 Redis基本操作命令 Java使用Redis 使用IDEA搭建Redis项目 使用Jedis进行简单增删改查 使用Jedi ...
- redis简单队列java_使用Redis的简单消息队列
redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...
- 使用Redis的简单消息队列
在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medium和Large. 在第一个 ...
- python 随机数抽奖系统_python实现的简单抽奖系统实例
本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...
- thinkphp htmls.php,ThinkPHP静态缓存简单配置和使用方法详解
本文实例讲述了ThinkPHP静态缓存简单配置和使用方法.分享给大家供大家参考,具体如下: 根据ThinkPHP官方手册:ThinkPHP内置了静态缓存类,通过静态缓存规则定义来实现了可配置的静态缓存 ...
- python简单抽奖系统_python实现的简单抽奖系统实例
本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...
最新文章
- 改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)
- 华科提出目标检测新方法:基于IoU-aware的定位改进,简单又有效
- python 循环触发一次_Python中的循环
- 关于SharePoint 2010体系架构的几个话题
- SVM和感知机的区别(转载+自己笔记)
- 在Anaconda中实现多版本Python共存
- 转:android.support升级到androidx踩坑记录
- 【转载】linux下如何使用sftp命令
- 开课吧课堂之何时调用构造函数
- 自己写好记的Oracle的 Group By 、 Group By Rollup和Group By Cube基础
- Spark入门案例--出租车数据分析
- ACWing 893. 集合-Nim游戏​​​​​​​ (SG函数模板题)
- mysql字符串数值按数值排序问题
- java ftp上传文件 linux_linux下用java实现ftp上传、下载文件
- 第五人格显示连接服务器失败怎么办,第五人格提示重新连接服务器怎么办 连接服务器失败解决方法...
- 跟着示例学Ubuntu UFW防火墙设置
- SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)
- 王立柱《c语言》3.5.4
- 计算机的正确配置文件,Windows10如何正确配置显示器颜色配置文件?
- 12 JAVA编程思想——集合的类型