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实现简单抽奖相关推荐

  1. Redis 项目实战 —— 抽奖大转盘

    1. 项目介绍 这是一个基于Spring boot + Mybatis Plus + Redis 的简单案例. 主要是将活动内容.奖品信息.记录信息等缓存到Redis中,然后所有的抽奖过程全部从Red ...

  2. python七夕快乐_python编写简单抽奖系统

    python编写简单抽奖系统 #!/usr/bin/env python #coding=utf-8 from Tkinter import * import time import random c ...

  3. redis高并发抽奖

    2019独角兽企业重金招聘Python工程师标准>>> redis高并发抽奖 代码有点缭乱,没时间整理,如果有误还请留言斧正.现在进入正题. 一.思路 1.奖品: 奖品分为奖品id( ...

  4. Redis的简单实践

    Redis的简单实践 文章目录 Redis的简单实践 前言 Redis简介 Redis基本操作命令 Java使用Redis 使用IDEA搭建Redis项目 使用Jedis进行简单增删改查 使用Jedi ...

  5. redis简单队列java_使用Redis的简单消息队列

    redis简单队列java 在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medi ...

  6. 使用Redis的简单消息队列

    在本文中,我们将使用列表命令将Redis用作简单的消息队列. 假设我们有一个允许用户上传照片的应用程序. 然后在应用程序中,我们以不同大小显示照片,例如Thumb,Medium和Large. 在第一个 ...

  7. python 随机数抽奖系统_python实现的简单抽奖系统实例

    本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...

  8. thinkphp htmls.php,ThinkPHP静态缓存简单配置和使用方法详解

    本文实例讲述了ThinkPHP静态缓存简单配置和使用方法.分享给大家供大家参考,具体如下: 根据ThinkPHP官方手册:ThinkPHP内置了静态缓存类,通过静态缓存规则定义来实现了可配置的静态缓存 ...

  9. python简单抽奖系统_python实现的简单抽奖系统实例

    本文实例讲述了python实现的简单抽奖系统.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/env python #coding=utf-8 from Tkinter import ...

最新文章

  1. 改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions)
  2. 华科提出目标检测新方法:基于IoU-aware的定位改进,简单又有效
  3. python 循环触发一次_Python中的循环
  4. 关于SharePoint 2010体系架构的几个话题
  5. SVM和感知机的区别(转载+自己笔记)
  6. 在Anaconda中实现多版本Python共存
  7. 转:android.support升级到androidx踩坑记录
  8. 【转载】linux下如何使用sftp命令
  9. 开课吧课堂之何时调用构造函数
  10. 自己写好记的Oracle的 Group By 、 Group By Rollup和Group By Cube基础
  11. Spark入门案例--出租车数据分析
  12. ACWing 893. 集合-Nim游戏​​​​​​​ (SG函数模板题)
  13. mysql字符串数值按数值排序问题
  14. java ftp上传文件 linux_linux下用java实现ftp上传、下载文件
  15. 第五人格显示连接服务器失败怎么办,第五人格提示重新连接服务器怎么办 连接服务器失败解决方法...
  16. 跟着示例学Ubuntu UFW防火墙设置
  17. SpringBoot整合定时任务和邮件发送(邮箱 信息轰炸 整蛊)
  18. 王立柱《c语言》3.5.4
  19. 计算机的正确配置文件,Windows10如何正确配置显示器颜色配置文件?
  20. 12 JAVA编程思想——集合的类型

热门文章

  1. 教育部重磅:179所高校新增人工智能本科专业!智能制造等九大专业井喷
  2. 如皋范湖洲朱氏开始续谱
  3. 00 - 绪论/数学基础
  4. 多媒体发布系统介绍和应用领域
  5. vue 中 filter 的使用与注册
  6. 2023注会电子版教材
  7. i513400和13400f区别 i5 13400和i5 13400f选哪个好
  8. python中font的用法_使用Python库判断字符是否在字体里
  9. BoundingBox 图片分割
  10. AT指令EGMR-修改设备的IMEI号码