Jedis操作

àì夳堔傛蜴生んèń 2023-01-16 11:10 194阅读 0赞

1、准备工作

在IDEA中创建一个maven工程,加入需要的依赖

  1. <dependency>
  2. <groupId>redis.clients</groupId>
  3. <artifactId>jedis</artifactId>
  4. <version>3.2.0</version>
  5. </dependency>

要操作Jedis首先得链接上Linux虚拟机上,查看Linux主机号host,以及redis的端口号port,如何查看Linux上的主机host呢?

  1. ye@ubuntu:~/Desktop$ ifconfig
  2. ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
  3. inet 192.168.42.128 netmask 255.255.255.0 broadcast 192.168.42.255
  4. inet6 fe80::9632:f2af:11e8:fb30 prefixlen 64 scopeid 0x20<link>
  5. ether 00:0c:29:9c:73:2b txqueuelen 1000 (Ethernet)
  6. RX packets 4401 bytes 5930620 (5.9 MB)
  7. RX errors 0 dropped 0 overruns 0 frame 0
  8. TX packets 2349 bytes 177744 (177.7 KB)
  9. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  10. lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
  11. inet 127.0.0.1 netmask 255.0.0.0
  12. inet6 ::1 prefixlen 128 scopeid 0x10<host>
  13. loop txqueuelen 1000 (Local Loopback)
  14. RX packets 436 bytes 50726 (50.7 KB)
  15. RX errors 0 dropped 0 overruns 0 frame 0
  16. TX packets 436 bytes 50726 (50.7 KB)
  17. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  18. ye@ubuntu:~/Desktop$

其中inet 192.168.42.128就是host号,而redis的端口号默认是6379.

  1. public class RedisTest {
  2. public static void main(String[] arge){
  3. Jedis jedis = new Jedis("192.168.42.128",6379);
  4. String ping = jedis.ping();
  5. System.out.println(ping);
  6. }
  7. }

如果出现burg,需要注意两点:(保证你在Linux上打开了redis-server /opt/redis.conf)

1、禁用Linux的防火墙 systemctl stop/disable firewalld.service

2、找到redis.conf文件,并在其中注释掉bind 127.0.0.1 ,然后 protected-mode no (之前是yes,修改成no)

没出现错误:上面的测试就会输出:PONG,现在好了测试搞好可以开始对Jedis操作了。

2、相关数据类型测试

1)Key

  1. public class RedisTest {
  2. public static void main(String[] arge){
  3. Jedis jedis = new Jedis("192.168.42.128",6379);
  4. jedis.set("k1","value1");
  5. jedis.set("k2","value2");
  6. jedis.set("k3","value3");
  7. Set<String> keys = jedis.keys("*");
  8. for(String key:keys){
  9. System.out.println(key);
  10. }
  11. System.out.println(jedis.exists("k1"));
  12. System.out.println(jedis.ttl("k1"));//-1 永久
  13. System.out.println(jedis.get("k1"));
  14. jedis.close();
  15. }
  16. }

2)String

  1. public class RedisTest {
  2. public static void main(String[] arge){
  3. Jedis jedis = new Jedis("192.168.42.128",6379);
  4. jedis.mset("k4","123","k5","456","k6","789");
  5. System.out.println(jedis.get("k5"));//456
  6. jedis.close();
  7. }
  8. }

3)List

  1. public class RedisTest {
  2. public static void main(String[] arge){
  3. Jedis jedis = new Jedis("192.168.42.128",6379);
  4. //List可以元素重复
  5. jedis.lpush("key1","123");
  6. jedis.rpush("key1","123");
  7. jedis.rpush("key1","456");
  8. List<String> list = jedis.lrange("key1", 0, -1);
  9. for(String li:list){
  10. System.out.println(li);
  11. }
  12. jedis.lrem("key1",2,"123");
  13. System.out.println("===");
  14. for(String li:list){
  15. System.out.println(li);
  16. }
  17. jedis.close();
  18. }
  19. }

4)set

  1. @Test
  2. public void test04(){
  3. //set集合
  4. Jedis jedis = new Jedis("192.168.42.128",6379);
  5. jedis.sadd("Myset","C++","java","python");
  6. //获取所有
  7. Set<String> myset = jedis.smembers("Myset");
  8. for (String s : myset) {
  9. System.out.println(s);
  10. }
  11. jedis.close();
  12. }

5)hash

  1. @Test
  2. public void test02(){
  3. //hash类型的操作
  4. Jedis jedis = new Jedis("192.168.42.128",6379);
  5. jedis.hset("myhash","name","wangwu");
  6. jedis.hset("myhash","age","21");
  7. jedis.hset("myhash","sex","男");
  8. System.out.println(jedis.hget("myhash", "age"));
  9. System.out.println(jedis.hget("myhash", "sex"));
  10. //获取hash的所有的map中的数据
  11. Map<String, String> myhash = jedis.hgetAll("myhash");
  12. Set<String> filed = myhash.keySet();
  13. for (String string : filed) {
  14. System.out.println(string+":"+myhash.get(string));
  15. }
  16. jedis.close();
  17. }

6)zset

  1. @Test
  2. public void test05(){
  3. //setsorted集合
  4. Jedis jedis = new Jedis("192.168.42.128",6379);
  5. jedis.zadd("Mysorted",1,"项羽");
  6. jedis.zadd("Mysorted",21,"亚瑟");
  7. jedis.zadd("Mysorted",122,"孙悟空");
  8. //获取
  9. Set<String> mysort = jedis.zrange("Mysorted", 0, -1);
  10. for (String s : mysort) {
  11. System.out.println(s);
  12. }
  13. jedis.close();
  14. }

3、手机验证码功能案例

要求:

1)输入手机号,点击发送后随机生成6位数字码,2分钟有效

2)输入验证码,点击验证,返回成功或失败

3)每个手机号每天只能输入3次

  1. public class RedisTest {
  2. public static void main(String[] arge){
  3. Jedis jedis = new Jedis("192.168.42.128",6379);
  4. Scanner in = new Scanner(System.in);
  5. while (true){
  6. System.out.println("输入手机号:");
  7. String phone = in.next();
  8. String rNum = RedisTest.getRandNumber();
  9. String countKey ="count"+phone;//保存次数一天三次
  10. String codeKey ="code"+phone;//保存验证码 60秒有效
  11. jedis.setex(codeKey, 60, rNum);
  12. System.out.println("验证码:"+rNum);
  13. System.out.println("输入验证码:");
  14. String set1 = in.next();
  15. if(set1.equals(jedis.get(codeKey))){
  16. System.out.println("输入验证码正确");
  17. break;
  18. }else {
  19. System.out.println("输入验证码错误");
  20. }
  21. String s = jedis.get(countKey);
  22. if(s==null){
  23. jedis.setex(countKey,24*60*60,"1");
  24. }
  25. if(Integer.parseInt(jedis.get(countKey))<=2){
  26. jedis.incr(countKey);
  27. }else {
  28. System.out.println("超过一天发送验证码的次数");
  29. break;
  30. }
  31. }
  32. jedis.close();
  33. }
  34. //随机生成6位数字
  35. public static String getRandNumber(){
  36. String temp ="";
  37. Random random = new Random();
  38. for(int i=0;i<6;i++){
  39. int randNum = random.nextInt(10);
  40. temp+=randNum;
  41. }
  42. return temp;
  43. }
  44. }

发表评论

表情:
评论列表 (有 0 条评论,194人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Jedis操作

    显然,经过故障转移后,主从结构已经发生了改变且主已经死亡,如果还按照之前那样写死IP的方式连接Redis的话,势必会出现错误。可以想到,在Sentinel结构下,你必须向哨兵询

    相关 jedis-pipeline批量操作

    前言 redis作为一个缓存服务器,每个命令都要经过网络才能到达服务器。而命令在网络传输的过程中必然消耗时间,如果命令在网络传输的时间和命令执行的时间在一个数量级(甚至更