Jedis操作Redis實(shí)現(xiàn)模擬驗(yàn)證碼發(fā)送功能
jedis的創(chuàng)建
1.先啟動(dòng)redis 如果報(bào)
那么說(shuō)明你redis服務(wù)器服務(wù)器端還沒(méi)打開
//啟動(dòng)服務(wù)端 redis-server /etc/redis.conf //啟動(dòng)客戶端 redis-cli
如果啟動(dòng)成功,就是這樣
2.創(chuàng)建一個(gè)maven工程
導(dǎo)入Jedis依賴
<dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> </dependencies>
3.創(chuàng)建一個(gè)class
public class JedisDemo1 { public static void main(String[] args) { Jedis jedis = new Jedis("xx.xxx.xx.xx",6379); //如果redis配置了密碼就在這里輸入不然會(huì)連接失敗 jedis.auth("xxxx"); String value = jedis.ping(); System.out.println(value); } }
如果是第一次連接會(huì)很大概率報(bào)錯(cuò)
這時(shí)候有兩種方法第一種是關(guān)閉防火墻,但是這種不太好,其實(shí)只要開放6379端口連接就可以了
jedis實(shí)現(xiàn)模擬驗(yàn)證碼
public class PhoneCode { public static void main(String[] args) { verifyCode("12345678900"); //校驗(yàn)驗(yàn)證碼是否正確 // GetRedisCode("12345678900","940487"); } //1.生成六位驗(yàn)證碼 public static String getCode(){ Random random = new Random(); String Code = ""; for (int i = 0; i < 6; i++) { int i1 = random.nextInt(10); Code = Code +i1; } return Code; } //2.每個(gè)手機(jī)每天只能發(fā)三次,驗(yàn)證碼放到redis中,設(shè)置過(guò)期時(shí)間 public static void verifyCode(String phone){ //連接redis Jedis jedis = new Jedis("172.18.17.215",6379); jedis.auth("1052600676"); //先自定義兩個(gè)key,從而通過(guò)后面步驟給key賦一個(gè)value //手機(jī)發(fā)送次數(shù) String CountKey = phone+"count"; //驗(yàn)證碼key String CodeKey = phone + "code"; //每個(gè)手機(jī)每天只能發(fā)送三次 //通過(guò)key查看是否有value String count = jedis.get(CountKey); if (count == null){ //沒(méi)有發(fā)送次數(shù),說(shuō)明是第一次發(fā)送,那就設(shè)置發(fā)送次數(shù)為1 jedis.setex(CountKey,24*60*60,"1"); }else if (Integer.parseInt(count) <= 2){ jedis.incr(CountKey); }else if (Integer.parseInt(count) > 2){ System.out.println("驗(yàn)證碼超過(guò)三次,無(wú)法發(fā)送"); jedis.close(); return; } //設(shè)置過(guò)期時(shí)間 //value String codee = getCode(); jedis.setex(CodeKey,120,codee); jedis.close(); } //3.驗(yàn)證碼校驗(yàn) public static void GetRedisCode(String phone,String code){ //連接redis Jedis jedis = new Jedis("172.18.17.215",6379); jedis.auth("1052600676"); //驗(yàn)證碼key String CodeKey = phone + "code"; String RedisCode = jedis.get(CodeKey); if (RedisCode.equals(code)){ System.out.println("成功"); }else{ System.out.println("失敗"); } jedis.close(); } }
通過(guò)這些操作實(shí)現(xiàn)驗(yàn)證碼發(fā)送
超過(guò)三次
相關(guān)數(shù)據(jù)類型測(cè)試
Key
jedis.set("k1", "v1"); jedis.set("k2", "v2"); jedis.set("k3", "v3"); Set<String> keys = jedis.keys("*"); System.out.println(keys.size()); for (String key : keys) { System.out.println(key); } System.out.println(jedis.exists("k1")); System.out.println(jedis.ttl("k1")); System.out.println(jedis.get("k1"));
String
jedis.mset("str1","v1","str2","v2","str3","v3"); System.out.println(jedis.mget("str1","str2","str3"));
List
List<String> list = jedis.lrange("mylist",0,-1); for (String element : list) { System.out.println(element); }
set
jedis.sadd("orders", "order01"); jedis.sadd("orders", "order02"); jedis.sadd("orders", "order03"); jedis.sadd("orders", "order04"); Set<String> smembers = jedis.smembers("orders"); for (String order : smembers) { System.out.println(order); } jedis.srem("orders", "order02");
hash
jedis.hset("hash1","userName","lisi"); System.out.println(jedis.hget("hash1","userName")); Map<String,String> map = new HashMap<String,String>(); map.put("telphone","13810169999"); map.put("address","atguigu"); map.put("email","abc@163.com"); jedis.hmset("hash2",map); List<String> result = jedis.hmget("hash2","telphone","email"); for (String element : result) { System.out.println(element); }
zset
jedis.zadd("zset01", 100d, "z3"); jedis.zadd("zset01", 90d, "l4"); jedis.zadd("zset01", 80d, "w5"); jedis.zadd("zset01", 70d, "z6"); Set<String> zrange = jedis.zrange("zset01", 0, -1); for (String e : zrange) { System.out.println(e); }
到此這篇關(guān)于Jedis操作Redis實(shí)現(xiàn)模擬驗(yàn)證碼發(fā)送的文章就介紹到這了,更多相關(guān)Redis驗(yàn)證碼發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis通過(guò)scan查找不過(guò)期的 key(方法詳解)
SCAN 命令是一個(gè)基于游標(biāo)的迭代器,每次被調(diào)用之后, 都會(huì)向用戶返回一個(gè)新的游標(biāo), 用戶在下次迭代時(shí)需要使用這個(gè)新游標(biāo)作為 SCAN 命令的游標(biāo)參數(shù), 以此來(lái)延續(xù)之前的迭代過(guò)程,對(duì)Redis scan 查找 key相關(guān)知識(shí)感興趣的朋友一起看看吧2021-08-08RabbitMQ+redis+Redisson分布式鎖+seata實(shí)現(xiàn)訂單服務(wù)的流程分析
訂單服務(wù)涉及許多方面,分布式事務(wù),分布式鎖,例如訂單超時(shí)未支付要取消訂單,訂單如何防止重復(fù)提交,如何防止超賣、這里都會(huì)使用到,這篇文章主要介紹了RabbitMQ+redis+Redisson分布式鎖+seata實(shí)現(xiàn)訂單服務(wù)的流程分析,需要的朋友可以參考下2024-07-07Redis在項(xiàng)目中常見(jiàn)的12種使用場(chǎng)景示例和說(shuō)明
Redis是一個(gè)開源的高性能鍵值對(duì)數(shù)據(jù)庫(kù),它以其內(nèi)存中數(shù)據(jù)存儲(chǔ)、鍵過(guò)期策略、持久化、事務(wù)、豐富的數(shù)據(jù)類型支持以及原子操作等特性,在許多項(xiàng)目中扮演著關(guān)鍵角色,以下是整理的12個(gè)Redis在項(xiàng)目中常見(jiàn)的使用場(chǎng)景舉例說(shuō)明和解釋2024-06-06