REDIS pubsub — Redis中国用户组(CRUG)
什么是发布和订阅
Redis发布订阅是一种通信模式:发送者(Pub)发送消息,订阅者(Sub)接收消息。Redis客户端可以订阅任意数量的频道。
在命令行中实现
Jedis 4.3.1 操作Java
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>4.3.1</version> </dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
JDK版本是17,Linux系统是Ubuntu18.04。redis远程访问相关的配置在安装时就弄好了(主要是注释掉bind ip和protected-mode设置成no)。
IP地址注意不要设置错,要找自己linux服务器的ip。
先去看看防火墙,开了的话就得设置redis端口可以访问。子服务器不开防火墙无所谓,远程服务器的话参考这个:Ubuntu系统中防火墙的使用和开放端口_Aaron_Run的博客-CSDN博客_ubuntu开放端口命令
再ping一下子系统的ip
代码:
这是junit5的方式,不喜欢的话也可以直接改改放到main函数运行也行。
public class JedisDemo1 { static Jedis resource = null; @BeforeAll static void Link(){ JedisPool pool = new JedisPool("172.19.189.116", 6379); resource = pool.getResource(); resource.auth("123456"); } @Test void StringsTest() { String ping = resource.ping(); System.out.println(ping); resource.set("jedis","2023"); Set<String> keys = resource.keys("*"); for(String key : keys){ String value = resource.get(key); System.out.println(key + ": " + value); } } }
红字只是警告,就算是按照slf4j上的要求(SLF4J Error Codes)加了一个包,还是有时候出有时候不出的。暂时就不管它。
操作没什么好说的,在redis窗口怎么操作,jedis一般都有相关命令。
手机验证码案例
要求:
1、输入手机号,点击发送后随机生成6位数字码,2分钟有效,
2、输入验证码,点击验证,返回成功或失败
3、每个手机号每天只能输入3次
就是说输入手机号提交后,在redis里面set键值对,key是手机号,value是随机6位数字码,过期时间2分钟
验证就get了,然后设置每天只能输入3次,可以在前端设置。但是根据前端不可靠,后端也要做出限制。
最直接的就是多用一个string就行。输入次数通过incr改,而时间则设置成它的过期时间。
参考代码如下,
// 验证 public static void verifyCode(String phoneNumber, String code){ String key = jedis.get(phoneNumber + ":code"); if(key.equalsIgnoreCase(code)){ System.out.println("通过验证"); } else { jedis.incr(phoneNumber+":counts"); System.out.println("验证失败,今日还剩" + jedis.get(phoneNumber+":counts") + "次。"); } } // 设置验证码,且每个手机每天只能验证三次 public static void getRedisCode(String phoneNumber){ String codeKeys = phoneNumber + ":code"; String countKeys = phoneNumber + ":counts"; String count = jedis.get(countKeys); if(count == null){ // 没发送过 jedis.setex(codeKeys,2*60,getCode()); jedis.setex(countKeys, 24*60*60, "1"); } else if(Integer.parseInt(count) <= 2){ jedis.incr(countKeys); } else if(Integer.parseInt(count) > 2){ //超过三次了 System.out.println("今日已经超过3次"); } } public static String getCode(){ Random random = new Random(); String code = ""; for(int i = 0 ; i < 6; i++){ int rand = random.nextInt(10); code += rand; } return code; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/199812.html