最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Redis實現(xiàn)抽獎功能及問題小結(jié)

 更新時間:2021年08月23日 10:48:04   作者:南宮拾壹  
這篇文章主要介紹了基于Redis實現(xiàn)抽獎功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1、分析

  • 公司年底要做年會所有的員工都要參與抽獎的環(huán)節(jié)
  • 平臺的產(chǎn)品要進行抽獎活動

這個時候我們可以利用redis中的set集合中的spop來實現(xiàn)。

特征:抽獎成功的人會自動從集合中刪除,即獲取到獎品的人不再繼續(xù)參與抽獎。

spop命令:隨機返回元素,元素從集合中刪除該元素

2、初始化名單數(shù)據(jù)

package com.example.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;

/**
 * @Auther: 長頸鹿
 * @Date: 2021/08/21/14:09
 * @Description:
 */
@Service
@Slf4j
public class SpopRandomSetService {

    @Autowired
    private RedisTemplate redisTemplate;

    private static final String SPOP_USER_SETS = "pop:user:set";

    // 把所有員工全部添加到集合列表中
    @PostConstruct
    public void initData(){
        log.info("初始化獎品等級信息...");
        // 判斷集合是否已經(jīng)存在
        boolean flag = this.redisTemplate.hasKey(SPOP_USER_SETS);
        // 防止作弊
        if (!flag) {
            // 獲取所有員工的信息
            List<Integer> initDataList = initDataList();
            // 把員工信息寫入到redis中 sadd key data
            initDataList.forEach(data -> this.redisTemplate.opsForSet().add(SPOP_USER_SETS, data));
        }
    }

    // 模擬100用戶抽獎
    private List<Integer> initDataList() {
        // todo : 從數(shù)據(jù)庫里面來,把公司里面所有的員工從數(shù)據(jù)表中全部查詢出來
        List<Integer> listData = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            listData.add(i + 1);
        }
        return listData;
    }

}

3、具體抽獎方法

// 隨機抽取用戶
    public int start(){
        return (int)redisTemplate.opsForSet().pop(SPOP_USER_SETS);
    }

4、抽獎接口測試

package com.example.controller;

import com.example.service.SpopRandomSetService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Auther: 長頸鹿
 * @Date: 2021/08/21/14:13
 * @Description: 抽獎接口測試
 */
@RestController
public class SpopRandomSetController {

    @Autowired
    private SpopRandomSetService spopRandomSetService;

    @PostMapping("/sPop/random/user")
    public int start() {
        return spopRandomSetService.start();
    }

}

5、小結(jié)

# 查詢集合成員
smembers pop:user:Set
# 查詢集合的長度變化
scard pop:user:Set

spop:隨機從集合取出一個元素返回,并且從集合中刪除該元素。

到此這篇關(guān)于基于Redis實現(xiàn)抽獎功能的文章就介紹到這了,更多相關(guān)Redis實現(xiàn)抽獎內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 提高redis緩存命中率的方法

    提高redis緩存命中率的方法

    在本篇文章里小編給大家整理了關(guān)于怎么提高redis緩存命中率的相關(guān)知識點內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。
    2019-06-06
  • NestJS+Redis實現(xiàn)緩存步驟詳解

    NestJS+Redis實現(xiàn)緩存步驟詳解

    這篇文章主要介紹了NestJS+Redis實現(xiàn)緩存,本文分步驟給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Redis禁用命令、危險命令及規(guī)避方法

    Redis禁用命令、危險命令及規(guī)避方法

    這篇文章主要介紹了Redis禁用命令、危險命令及規(guī)避方法,本文介紹了個非常致命的兩個命令以及用配置文件禁用這些命令的方法,需要的朋友可以參考下
    2015-06-06
  • Redis 數(shù)據(jù)遷移的項目實踐

    Redis 數(shù)據(jù)遷移的項目實踐

    本文主要介紹了Redis 數(shù)據(jù)遷移的項目實踐,通過Redis-shake的sync(同步)模式,可以將Redis的數(shù)據(jù)實時遷移至另一套Redis環(huán)境,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Redis集群模式和常用數(shù)據(jù)結(jié)構(gòu)詳解

    Redis集群模式和常用數(shù)據(jù)結(jié)構(gòu)詳解

    Redis集群模式下的運維指令主要用于集群的搭建、管理、監(jiān)控和維護,講解了一些常用的Redis集群運維指令,本文重點介紹了Redis集群模式和常用數(shù)據(jù)結(jié)構(gòu),需要的朋友可以參考下
    2024-03-03
  • redis基本安裝判斷、啟動使用方法示例

    redis基本安裝判斷、啟動使用方法示例

    這篇文章主要介紹了redis基本安裝判斷、啟動使用方法,結(jié)合實例形式分析了Redis針對是否安裝的判斷、啟動等使用方法,需要的朋友可以參考下
    2020-02-02
  • 基于redis實現(xiàn)的點贊功能設(shè)計思路詳解

    基于redis實現(xiàn)的點贊功能設(shè)計思路詳解

    點贊是我們現(xiàn)在經(jīng)常見到的一個效果,如朋友圈、微博都有點贊的效果,下面這篇文章主要跟大家分享了基于redis實現(xiàn)的點贊功能設(shè)計思路的相關(guān)資料,文中介紹的非常詳細,對大家實現(xiàn)點贊功能具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。
    2017-05-05
  • 一文弄懂Redis 線程模型

    一文弄懂Redis 線程模型

    使用Redis 時,幾乎不存在 CPU 成為瓶頸的情況, Redis 主要受限于內(nèi)存和網(wǎng)絡(luò) 使用了單線程后,可維護性高,感興趣的可以了解一下
    2024-02-02
  • Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例

    Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例

    本文主要介紹了 Redis遍歷海量數(shù)據(jù)的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • 一篇文章帶你弄清楚Redis的精髓

    一篇文章帶你弄清楚Redis的精髓

    Redis是一個開源的、支持網(wǎng)絡(luò)、基于內(nèi)存的鍵值對存儲系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息中間件。它支持多種數(shù)據(jù)類型,包括字符串、散列、列表、集合、位圖等,擁有極快的讀寫速度,并且支持豐富的特性,如事務(wù)、持久化、復(fù)制、腳本、發(fā)布/訂閱等。
    2023-02-02

最新評論

肇庆市| 凤翔县| 贵港市| 贵港市| 姜堰市| 康乐县| 霍山县| 随州市| 万宁市| 肃宁县| 崇阳县| 北流市| 佛教| 上饶市| 莎车县| 珲春市| 吴川市| 临泽县| 且末县| 遂川县| 浦城县| 南京市| 阜新市| 子长县| 香格里拉县| 上杭县| 双城市| 孟村| 屏东县| 图木舒克市| 塔城市| 绵竹市| 崇明县| 新田县| 林口县| 图木舒克市| 陇川县| 平陆县| 绍兴市| 灵山县| 阜新|