亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

<optgroup id="cczp1"><ruby id="cczp1"><cite id="cczp1"></cite></ruby></optgroup>
  • <acronym id="cczp1"></acronym>
    <acronym id="cczp1"><option id="cczp1"><ol id="cczp1"></ol></option></acronym>
    <delect id="cczp1"></delect>
    <center id="cczp1"></center>
    <delect id="cczp1"></delect><em id="cczp1"><button id="cczp1"><blockquote id="cczp1"></blockquote></button></em>
    1. <optgroup id="cczp1"><td id="cczp1"><dfn id="cczp1"></dfn></td></optgroup>

      SpringBoot校驗(yàn)手機(jī)驗(yàn)證碼例:默認(rèn)緩存、數(shù)據(jù)淘汰策略、redis緩存

      SpringBoot校驗(yàn)手機(jī)驗(yàn)證碼例:默認(rèn)緩存、數(shù)據(jù)淘汰策略、redis緩存

      目錄

      案例實(shí)現(xiàn)功能:

      1 根據(jù)手機(jī)號(hào)碼 生成6位數(shù) 的數(shù)字 驗(yàn)證碼

      2 輸入手機(jī)號(hào)和驗(yàn)證碼, 判斷輸入的驗(yàn)證碼是否正確

      一 默認(rèn)緩存

      1.1 主要代碼

      1 添加依賴

      org.springframework.bootspring-boot-starter-cache

      2 啟用緩存

      3 實(shí)體類

      package com.qing.bean;import lombok.Data;@Datapublic class SMSCode { private String phoneNum; private String code;}

      4 創(chuàng)建驗(yàn)證碼的工具

      package com.qing.util;import org.springframework.cache.annotation.Cacheable;import org.springframework.stereotype.Component;@Componentpublic class CodeUtils { public String generate(String phoneNum) { int hash = phoneNum.hashCode(); int encryption = 2022630; //異或加密:一種通過(guò)異或運(yùn)算進(jìn)行加密的算法 //轉(zhuǎn)成二進(jìn)制,運(yùn)算規(guī)則:相同為0,不同為1,再轉(zhuǎn)成十進(jìn)制 long result = hash ^ encryption; long nowTime = System.currentTimeMillis(); result = result ^ nowTime; long code = result % 1000000; //處理有負(fù)數(shù)的情況 code = code < 0 ? -code : code; //六位數(shù):前面補(bǔ)0 String.format("%06d",code); return code + ""; } //獲取緩存里的驗(yàn)證碼 @Cacheable(key ="#phoneNum" ,value = "cacheCode") public String getCacheCode(String phoneNum){ return null; }}

      關(guān)于異或運(yùn)算請(qǐng)點(diǎn)這里

      說(shuō)明:getCacheCode()獲取緩存里的驗(yàn)證碼的方法,寫在工具類這里是因?yàn)橐箂pring的@Cacheable這個(gè)注解生效,需要注入spring容器,該工具類在后面的ServiceImpl進(jìn)行了注入,該方法返回的是注解@Cacheable的value屬性值 cacheCode ( 詳見(jiàn)后面的測(cè)試 )

      5 service

      package com.qing.service;import com.qing.bean.SMSCode;public interface SMSCodeService { //發(fā)送驗(yàn)證碼 String sendCode(String phoneNum); //檢查驗(yàn)證碼 boolean checkCode(SMSCode smsCode);}

      6 serviceImpl

      package com.qing.service.impl;import com.qing.bean.SMSCode;import com.qing.service.SMSCodeService;import com.qing.util.CodeUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cache.annotation.CachePut;import org.springframework.stereotype.Service;@Servicepublic class SMSCodeServiceImpl implements SMSCodeService { @Autowired CodeUtils codeUtils; //發(fā)送驗(yàn)證碼 @Override //只往里放,不往外讀 @CachePut(key = “#phoneNum”, value = “cacheCode”) public String sendCode(String phoneNum) { return codeUtils.generate(phoneNum); } //比對(duì)驗(yàn)證碼 @Override public boolean checkCode(SMSCode smsCode) { //取出內(nèi)存中的驗(yàn)證碼與傳遞過(guò)來(lái)的驗(yàn)證碼比對(duì),相同返回true String code = smsCode.getCode(); String cacheCode = codeUtils.getCacheCode(smsCode.getPhoneNum()); return code.equals(cacheCode); }}

      7 controller

      package com.qing.controller;import com.qing.bean.SMSCode;import com.qing.service.SMSCodeService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;@RestController@RequestMapping(“/sms”)public class SMSCodeController { @Autowired private SMSCodeService smsCodeService; @GetMapping(“/{phoneNum}”) public String getCode(@PathVariable String phoneNum){ return smsCodeService.sendCode(phoneNum); } @PostMapping public boolean checkCode(@RequestBody SMSCode smsCode) { return smsCodeService.checkCode(smsCode); }}

      1.2 測(cè)試

      1 生成驗(yàn)證碼

      2 輸入錯(cuò)的驗(yàn)證碼驗(yàn)證

      3 輸入正確的驗(yàn)證碼

      4 再次生成驗(yàn)證

      二 Ehcache緩存

      在默認(rèn)緩存案例的基礎(chǔ)上做3個(gè)配置就行

      1 加依賴

      net.sf.ehcache ehcache

      2 配置文件

      3 ehcache.xml放在resources下

      默認(rèn)緩存

      配置新的緩存: name 要和@CachePut注解的的value的屬性值一樣

      數(shù)據(jù)淘汰策略

      下圖表示的信息:

      1 下面的時(shí)間分別表示最后一次訪問(wèn)是在 第幾秒訪問(wèn)的

      2 上面的數(shù)字表示 訪問(wèn)了幾次

      LRU:age 是上次訪問(wèn)離現(xiàn)在的時(shí)間最遠(yuǎn)的

      LFU:gender 訪問(wèn)次數(shù)是最少的

      四 redis緩存

      4.1 基礎(chǔ)使用

      在默認(rèn)緩存的基礎(chǔ)上加2個(gè)配置

      1 導(dǎo)入依賴

      org.springframework.boot spring-boot-starter-data-redis

      2 配置文件

      測(cè)試

      打開(kāi)redis的服務(wù)端和客戶端

      關(guān)于redis的安裝和簡(jiǎn)單使用在這里

      生成一次驗(yàn)證碼

      數(shù)據(jù)已經(jīng)進(jìn)到redis緩存里了

      緩存的名字即這個(gè)value屬性的值 和 key 電話號(hào)碼組合成一個(gè)新的key一起放進(jìn)redis緩存里

      再生成一次驗(yàn)證碼

      redis又多了一個(gè)緩存數(shù)據(jù)

      4.2 其他配置

      測(cè)有效時(shí)間 10s

      看一下測(cè)試效果

      10s之后緩存里的驗(yàn)證碼失效了

      備注: 超過(guò)了有效時(shí)長(zhǎng),redis數(shù)據(jù)里就沒(méi)有那個(gè)緩存了

      測(cè)前綴

      總結(jié)

      原文 https://blog.csdn.net/m0_45877477/article/details/125539400

      鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
      用戶投稿
      上一篇 2022年7月11日 15:21
      下一篇 2022年7月11日 15:22

      相關(guān)推薦

      • 微信怎么添加整套表情包(微信怎么添加表情包)

        用微信怎樣把手機(jī)上的照片添加到你的微信表情包里?然后發(fā)送給朋友,真的太好玩,太有個(gè)性了!操作還簡(jiǎn)單,和我一起去看看! 打開(kāi)微信,點(diǎn)開(kāi)與好友的聊天頁(yè)面,通常我們需要添加表情的話,我們…

        2022年11月26日
      • 舊手機(jī)的東西怎么導(dǎo)入新手機(jī)(舊手機(jī)的東西怎么導(dǎo)入新手機(jī)oppo)

        簡(jiǎn)要回答 下載并運(yùn)行“互傳”–點(diǎn)擊“我是舊手機(jī)”–確認(rèn)換機(jī),接下來(lái)我們一起看看吧。 詳細(xì)內(nèi)容 01 請(qǐng)將新、舊手機(jī)分別安裝換機(jī)助手,如圖,左邊是新手機(jī),右邊是舊手機(jī),兩款手機(jī)系不同…

        2022年11月25日
      • 《寶可夢(mèng)朱紫》獒教父屬性是什么?獒教父屬性一覽

        寶可夢(mèng)朱紫里獒教父是一只很強(qiáng)的寶可夢(mèng),很多玩家不清楚獒教父的屬性是什么樣的,下面就給大家?guī)?lái)寶可夢(mèng)朱紫獒教父屬性一覽,感興趣的小伙伴一起來(lái)看看吧,希望能幫助到大家。 獒教父屬性一覽…

        2022年11月25日
      • 《寶可夢(mèng)朱紫》太晶化強(qiáng)力寶可夢(mèng)推薦 太晶化哪些寶可夢(mèng)最強(qiáng)?

        寶可夢(mèng)朱紫游戲中寶可夢(mèng)種類繁多,不過(guò)有的寶可夢(mèng)比較強(qiáng),有的稍弱一些,那么太晶化化哪些寶可夢(mèng)最強(qiáng)呢,為了便于大家更好的體驗(yàn)游戲,這里給大家?guī)?lái)了寶可夢(mèng)朱紫太晶化強(qiáng)力寶可夢(mèng)推薦,一起來(lái)…

        2022年11月25日
      • 5+3疫情防控從哪天開(kāi)始算(遼寧疫情防控最新政策)

        最近有關(guān)國(guó)內(nèi)各地的疫情大家也都有在持續(xù)關(guān)注,目前國(guó)內(nèi)各地疫情隔離時(shí)間也根據(jù)二十條防控措施有了新的調(diào)整。那么,5+3疫情防控從哪天開(kāi)始算?對(duì)于密接的5+3隔離時(shí)間計(jì)算大家還是比較關(guān)心…

        2022年11月25日
      • 藍(lán)碼怎么變綠碼需要幾天(藍(lán)碼怎么變綠碼需要幾天)

        大家都知道健康碼的顏色有紅碼、綠碼、黃碼,近日湖南健康碼上線“藍(lán)碼”,不少小伙伴發(fā)現(xiàn)自己健康碼變藍(lán)了,都想趕緊恢復(fù)綠碼,那么藍(lán)碼怎么變綠碼需要幾天?下面小編為大家?guī)?lái)藍(lán)碼變綠碼需要…

        2022年11月25日
      • 寶可夢(mèng)朱紫四大天王屬性怎么樣 四大天王屬性數(shù)值介紹

        寶可夢(mèng)朱紫四大天王屬性如何?四大天王的屬性數(shù)值玩家們還是挺好奇的,想要了解四大天王屬性的可以看看下面小編的介紹,小編會(huì)把四大天王的屬性數(shù)值全都分享在下面,各位趕緊來(lái)小編這里多了解一…

        2022年11月25日
      • 寶可夢(mèng)朱紫皮卡丘多少級(jí)進(jìn)化 皮卡丘進(jìn)化條件攻略

        寶可夢(mèng)朱紫皮卡丘進(jìn)化條件是什么?皮卡丘怎么進(jìn)化?作為最受歡迎的電屬性寶可夢(mèng),大家都很想知道皮卡丘進(jìn)化的方法,今天小編這就在下面的攻略中分享皮卡丘進(jìn)化條件,各位可以趕緊來(lái)小編這里了解…

        2022年11月25日
      • 拼多多百億補(bǔ)貼預(yù)售一般多久發(fā)貨(拼多多百億補(bǔ)貼預(yù)售)

        拼多多里面有很多優(yōu)惠活動(dòng),其中百億補(bǔ)貼活動(dòng)非?;鸨恍├锩娴臇|西價(jià)格比別的平臺(tái)便宜,質(zhì)量也有保障,還有預(yù)售的活動(dòng),那么拼多多百億補(bǔ)貼預(yù)售一般多久發(fā)貨?下面小編為大家?guī)?lái)拼多多百億…

        2022年11月25日
      • 北京疫情多久能解除封控(北京疫情還要多久結(jié)束)

        最近一段時(shí)間北京疫情形勢(shì)備受關(guān)注,馬上就要到年底了,不少人想要去北京辦事,。都非常關(guān)注當(dāng)?shù)匾咔橄嚓P(guān)政策,那么 北京疫情多久能解除封控?北京疫情什么時(shí)候恢復(fù)正常生活?下面小編為大家?guī)А?/p>

        2022年11月25日

      聯(lián)系我們

      聯(lián)系郵箱:admin#wlmqw.com
      工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息