免费爱碰视频在线观看,九九精品国产屋,欧美亚洲尤物久久精品,1024在线观看视频亚洲

      SpringBoot校驗手機驗證碼例:默認緩存、數據淘汰策略、redis緩存

      SpringBoot校驗手機驗證碼例:默認緩存、數據淘汰策略、redis緩存

      目錄

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

      1 根據手機號碼 生成6位數 的數字 驗證碼

      2 輸入手機號和驗證碼, 判斷輸入的驗證碼是否正確

      一 默認緩存

      1.1 主要代碼

      1 添加依賴

      org.springframework.bootspring-boot-starter-cache

      2 啟用緩存

      3 實體類

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

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

      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ī)則:相同為0,不同為1,再轉成十進制 long result = hash ^ encryption; long nowTime = System.currentTimeMillis(); result = result ^ nowTime; long code = result % 1000000; //處理有負數的情況 code = code < 0 ? -code : code; //六位數:前面補0 String.format("%06d",code); return code + ""; } //獲取緩存里的驗證碼 @Cacheable(key ="#phoneNum" ,value = "cacheCode") public String getCacheCode(String phoneNum){ return null; }}

      關于異或運算請點這里

      說明:getCacheCode()獲取緩存里的驗證碼的方法,寫在工具類這里是因為要使spring的@Cacheable這個注解生效,需要注入spring容器,該工具類在后面的ServiceImpl進行了注入,該方法返回的是注解@Cacheable的value屬性值 cacheCode ( 詳見后面的測試 )

      5 service

      package com.qing.service;import com.qing.bean.SMSCode;public interface SMSCodeService { //發(fā)送驗證碼 String sendCode(String phoneNum); //檢查驗證碼 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ā)送驗證碼 @Override //只往里放,不往外讀 @CachePut(key = “#phoneNum”, value = “cacheCode”) public String sendCode(String phoneNum) { return codeUtils.generate(phoneNum); } //比對驗證碼 @Override public boolean checkCode(SMSCode smsCode) { //取出內存中的驗證碼與傳遞過來的驗證碼比對,相同返回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 測試

      1 生成驗證碼

      2 輸入錯的驗證碼驗證

      3 輸入正確的驗證碼

      4 再次生成驗證

      二 Ehcache緩存

      在默認緩存案例的基礎上做3個配置就行

      1 加依賴

      net.sf.ehcache ehcache

      2 配置文件

      3 ehcache.xml放在resources下

      默認緩存

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

      數據淘汰策略

      下圖表示的信息:

      1 下面的時間分別表示最后一次訪問是在 第幾秒訪問的

      2 上面的數字表示 訪問了幾次

      LRU:age 是上次訪問離現(xiàn)在的時間最遠的

      LFU:gender 訪問次數是最少的

      四 redis緩存

      4.1 基礎使用

      在默認緩存的基礎上加2個配置

      1 導入依賴

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

      2 配置文件

      測試

      打開redis的服務端和客戶端

      關于redis的安裝和簡單使用在這里

      生成一次驗證碼

      數據已經進到redis緩存里了

      緩存的名字即這個value屬性的值 和 key 電話號碼組合成一個新的key一起放進redis緩存里

      再生成一次驗證碼

      redis又多了一個緩存數據

      4.2 其他配置

      測有效時間 10s

      看一下測試效果

      10s之后緩存里的驗證碼失效了

      備注: 超過了有效時長,redis數據里就沒有那個緩存了

      測前綴

      總結

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

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

      相關推薦

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

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

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

        簡要回答 下載并運行“互傳”–點擊“我是舊手機”–確認換機,接下來我們一起看看吧。 詳細內容 01 請將新、舊手機分別安裝換機助手,如圖,左邊是新手機,右邊是舊手機,兩款手機系不同…

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

        寶可夢朱紫里獒教父是一只很強的寶可夢,很多玩家不清楚獒教父的屬性是什么樣的,下面就給大家?guī)韺毧蓧糁熳祥峤谈笇傩砸挥[,感興趣的小伙伴一起來看看吧,希望能幫助到大家。 獒教父屬性一覽…

        2022年11月25日
      • 《寶可夢朱紫》太晶化強力寶可夢推薦 太晶化哪些寶可夢最強?

        寶可夢朱紫游戲中寶可夢種類繁多,不過有的寶可夢比較強,有的稍弱一些,那么太晶化化哪些寶可夢最強呢,為了便于大家更好的體驗游戲,這里給大家?guī)砹藢毧蓧糁熳咸Щ瘡娏毧蓧敉扑],一起來…

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

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

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

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

        2022年11月25日
      • 寶可夢朱紫四大天王屬性怎么樣 四大天王屬性數值介紹

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

        2022年11月25日
      • 寶可夢朱紫皮卡丘多少級進化 皮卡丘進化條件攻略

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

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

        拼多多里面有很多優(yōu)惠活動,其中百億補貼活動非?;鸨恍├锩娴臇|西價格比別的平臺便宜,質量也有保障,還有預售的活動,那么拼多多百億補貼預售一般多久發(fā)貨?下面小編為大家?guī)砥炊喽喟賰|…

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

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

        2022年11月25日

      聯(lián)系我們

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