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

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                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)證碼的方法,寫(xiě)在工具類這里是因?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é)假日休息