• 三分钟学会一个新技能——使用Java操作Redis


    目录

    1、前置准备操作

    1.1、为什么要进行前置准备操作 

    1.2、本地如何访问到云服务上Redis的6379端口号

    1.3、配置步骤:

    2、配置后本地主机如何操作 

    3、常用命令举例

    3.1、通用命令举例

    3.2、string相关命令举例

    3.3、hash相关命令举例

    3.4、list相关命令举例

    3.5、set相关命令举例

    3.6、zset相关命令举例


    1、前置准备操作

    1.1、为什么要进行前置准备操作 

            我们之前学习Redis命令时,直接在Linux服务器中所提供的redis客户端上使用的,也就是说Redis服务器和客户端在同一台主机上。而现在我们使用Java去操作Redis,一般Java开发都是在Windows上,也就是在自己的电脑上的,就会导致一个问题,客户端和服务器不在同一台主机上。        

            对于这种问题:

    • 第一,我们连接Redis服务器时要修改为外网IP
    • 第二,Redis的默认端口是6379,这个端口是默认会被云服务器的防火墙保护起来,不能从外部进行访问。这里又会导致一个问题,我们自己也访问不了了~

    这种情况下,切记可不敢去云服务器上把这个端口开放哈!!!

    因为太容易被攻击了~

    这个情况,我们有两个解决办法~

    1.2、本地如何访问到云服务上Redis的6379端口号

    方案一:

            就使用6379端口,但不能在本地运行,将Java程序编写成功后,打成jar部署到云服务器上来运行。这种方法,就会有些复杂,需要我们频繁地打包-部署,太麻烦了~

    方案二:【推荐】

            使用SSH来解决——配置SSH端口转发,把云服务器的Redis端口,映射到本地主机~

            例如,我们配置的本地主机端口号:6666 

            当本地主机访问6666端口时【SSH程序是一直在监听6666这个端口,SSH默认端口号是22】,会通过ssh的22端口来将6666的端口数据发送到云服务上,配置时也会让你选组云服务器的端口号,正常情况下,你就选择redis的默认端口6379即可。ssh就会将本地主机端口号6666数据转发到云服务器上的端口号6379的程序~

    1.3、配置步骤:

    我这里是使用xshell举例:

    在此之前,进入Redis自带的客户端,在配置中,修改Redis的绑定的ip和关闭保护模式,具体操作可看我以前的博客:http://t.csdn.cn/OdKZJ

    (1):连接回话后,点击属性选项

    (2):

    (3):

    (4):检查是否连接:

    看到这句话即可~


    2、配置后本地主机如何操作 

    第一步:新建一个Maven项目

    第二步:去中央仓库搜索jedis,选择【例如我选择的是jedis4.4.2,选稳定的版本~】:

    1. <!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
    2. <dependency>
    3. <groupId>redis.clients</groupId>
    4. <artifactId>jedis</artifactId>
    5. <version>4.4.2</version>
    6. </dependency>

    把这段代码放入到pom.xml中~

    第三步:新建一个Java文件:

    贴上代码:

    1. import redis.clients.jedis.Jedis;
    2. import redis.clients.jedis.JedisPool;
    3. /**
    4. * Created with IntelliJ IDEA.
    5. * Description:
    6. * User:龙宝
    7. * Date:2023-09-14
    8. * Time:14:28
    9. */
    10. public class redisPing {
    11. public static void main(String[] args) {
    12. JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
    13. try(Jedis jedis = jedisPool.getResource()) {
    14. testPint(jedis);
    15. }
    16. }
    17. private static void testPint(Jedis jedis) {
    18. String result = jedis.ping();
    19. System.out.println("result:" + result);
    20. }
    21. }

     代码解释:

    • jedispool就类似于与线程池,它属于redis的一个连接池,后面的参数,我们能看到是tcp,也就是我们建立的是tcp连接,后面的6666就是我们刚才指定的端口~
    • try后面的括号中,则是从redis连接池中取出一个连接来使用
    • 连接使用完成后需要释放这个连接,但这里的释放并不是说要断开tcp,而是将其放回到池子中~
    • try花括号中便可以开始操作Redis了~
    • 下面这个方法,则是redis中的命令ping,输入ping,返回pong
    • 执行程序,查看结果:

            补充说明:为什么是使用jedis,使用其他工具当然也可以,但jedis中提供的命令几乎和redis的原生命令一样,降低了学习成本~ 


    3、常用命令举例

            没有Redis基础的小伙伴可以看看我之前的博客,稍微了解一下Redis中常用的数据类型的常用的命令~ 更有助于后的学习~ 

    3.1、通用命令举例

    1. import redis.clients.jedis.Jedis;
    2. import redis.clients.jedis.JedisPool;
    3. import java.util.Set;
    4. /**
    5. * Created with IntelliJ IDEA.
    6. * Description:
    7. * User:龙宝
    8. * Date:2023-09-14
    9. * Time:14:18
    10. */
    11. public class redisCommonDemo {
    12. public static void main(String[] args) throws InterruptedException {
    13. JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
    14. try(Jedis jedis = jedisPool.getResource()) {
    15. System.out.println("set/get举例:");
    16. commonDemo1(jedis);
    17. System.out.println("exists举例:");
    18. commonDemo2(jedis);
    19. System.out.println("del举例:");
    20. commondemo3(jedis);
    21. System.out.println("keys举例:");
    22. commondemo4(jedis);
    23. System.out.println("expire/ttl举例:");
    24. commondemo5(jedis);
    25. System.out.println("type举例:");
    26. commondemo6(jedis);
    27. }
    28. }
    29. private static void commondemo6(Jedis jedis) {
    30. jedis.flushAll();
    31. jedis.set("key1","1");
    32. String res = jedis.type("key1");
    33. System.out.println("key1的类型:" + res);
    34. res = jedis.objectEncoding("key1");
    35. System.out.println("key1的内部编码:" + res);
    36. }
    37. private static void commondemo5(Jedis jedis) throws InterruptedException {
    38. jedis.flushAll();
    39. jedis.set("key1","1");
    40. jedis.expire("key1",100);
    41. Thread.sleep(1000);
    42. Long res = jedis.ttl("key1");
    43. System.out.println("剩余时长:" + res);
    44. }
    45. private static void commondemo4(Jedis jedis) {
    46. jedis.flushAll();//删除,避免干扰
    47. jedis.mset("key1","1","key2","2","key3","3");
    48. Set<String> res = jedis.keys("*");
    49. System.out.println(res);
    50. }
    51. private static void commondemo3(Jedis jedis) {
    52. Long res = jedis.del("key1");
    53. System.out.println("成功删除key的个数:" + res);
    54. Boolean result = jedis.exists("key1");
    55. System.out.println("key1已经不存在了:" +result);
    56. }
    57. private static void commonDemo2(Jedis jedis) {
    58. Boolean res = jedis.exists("key1");
    59. System.out.println("res存在:" + res);
    60. res = jedis.exists("key10000");
    61. System.out.println("res不存在:"+ res);
    62. }
    63. private static void commonDemo1(Jedis jedis) {
    64. //先清空,避免干扰
    65. //jedis.flushAll();
    66. String result = jedis.set("key1","111");
    67. System.out.println("result:" + result);
    68. String res = jedis.get("key1");
    69. System.out.println("key1-value:"+res);
    70. }
    71. }

    小技巧,你不知返回值有什么来接收时,将鼠标放在函数上:

    结果:

    3.2、string相关命令举例

    1. import redis.clients.jedis.Jedis;
    2. import redis.clients.jedis.JedisPool;
    3. import java.util.List;
    4. import java.util.Set;
    5. /**
    6. * Created with IntelliJ IDEA.
    7. * Description:
    8. * User:龙宝
    9. * Date:2023-09-14
    10. * Time:15:36
    11. */
    12. public class redisStringDemo {
    13. public static void main(String[] args) {
    14. JedisPool jedispool = new JedisPool("tcp://127.0.0.1:6666");
    15. try(Jedis jedis = jedispool.getResource()) {
    16. System.out.println("get/set举例");
    17. stringDemo1(jedis);
    18. System.out.println("mget/mset举例:");
    19. stringDemo2(jedis);
    20. System.out.println("getrange/setrange");
    21. stringdemo3(jedis);
    22. System.out.println("append举例:");
    23. stringDemo4(jedis);
    24. System.out.println("incr举例:");
    25. stringDemo5(jedis);
    26. }
    27. }
    28. private static void stringDemo5(Jedis jedis) {
    29. Long res = jedis.incr("key2");
    30. System.out.println("key2自增后:" + res);
    31. }
    32. private static void stringDemo4(Jedis jedis) {
    33. Long result = jedis.append("key1","xxxxx");
    34. System.out.println("append的返回值" + result);
    35. String res = jedis.getrange("key1",0,-1);
    36. System.out.println("key1:" + res);
    37. }
    38. private static void stringdemo3(Jedis jedis) {
    39. //先不删除,使用上一个方法遗留的key1 2 3
    40. //jedis.flushAll();
    41. String res = jedis.getrange("key1",0,-1);
    42. System.out.println("keys:" + res);
    43. Long result = jedis.setrange("key1",1,"hhhhhh");
    44. System.out.println("setrange的返回值:" + result);
    45. res = jedis.getrange("key1",0,-1);
    46. System.out.println("keys:" + res);
    47. }
    48. private static void stringDemo2(Jedis jedis) {
    49. jedis.flushAll();
    50. String res = jedis.mset("key1","1","key2","2","key3","3");
    51. System.out.println("新增是否成功:" + res);
    52. //取出当中key,检查对应值是否正确
    53. List<String> result = jedis.mget("key1","key2","key3","key4");
    54. System.out.println("result" + result);
    55. }
    56. private static void stringDemo1(Jedis jedis) {
    57. //先清空,避免干扰
    58. jedis.flushAll();
    59. String result = jedis.set("key1","111");
    60. System.out.println("result:" + result);
    61. String res = jedis.get("key1");
    62. System.out.println("key1-value:"+res);
    63. }
    64. }

    结果:

    3.3、hash相关命令举例

    1. import redis.clients.jedis.Jedis;
    2. import redis.clients.jedis.JedisPool;
    3. import java.util.HashMap;
    4. import java.util.List;
    5. import java.util.Map;
    6. import java.util.Set;
    7. /**
    8. * Created with IntelliJ IDEA.
    9. * Description:
    10. * User:龙宝
    11. * Date:2023-09-14
    12. * Time:15:57
    13. */
    14. public class redisHashDemo {
    15. public static void main(String[] args) {
    16. JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
    17. try(Jedis jedis = jedisPool.getResource()) {
    18. System.out.println("hset/hget举例:");
    19. hashDemo1(jedis);
    20. System.out.println("hexists举例:");
    21. hashDemo2(jedis);
    22. System.out.println("hdel举例:");
    23. hashDemo3(jedis);
    24. System.out.println("hkeys/hvals");
    25. hashDemo4(jedis);
    26. }
    27. }
    28. private static void hashDemo4(Jedis jedis) {
    29. jedis.flushAll();
    30. jedis.hset("key1","f1","111");
    31. jedis.hset("key1","f2","222");
    32. jedis.hset("key2","f1","333");
    33. Set res = jedis.hkeys("key1");
    34. System.out.println("hkeys的返回值:" + res);
    35. List list = jedis.hvals("key1");
    36. System.out.println("hvals的返回值:" + list);
    37. }
    38. private static void hashDemo3(Jedis jedis) {
    39. Long res = jedis.hdel("key1","f1");
    40. System.out.println("hdel的返回值:" + res);
    41. }
    42. private static void hashDemo2(Jedis jedis) {
    43. Boolean res = jedis.hexists("key1","f1");
    44. System.out.println("key1的f1存在:" + res);
    45. }
    46. private static void hashDemo1(Jedis jedis) {
    47. jedis.flushAll();
    48. Long res = jedis.hset("key1","f1","111");
    49. System.out.println("hset的返回值:" + res);
    50. String result = jedis.hget("key1","f1");
    51. System.out.println("key1的f1对应的value值:" + result);
    52. }
    53. }

    结果:

    3.4、list相关命令举例

    1. import redis.clients.jedis.Jedis;
    2. import redis.clients.jedis.JedisPool;
    3. import sun.rmi.runtime.Log;
    4. import java.util.List;
    5. /**
    6. * Created with IntelliJ IDEA.
    7. * Description:
    8. * User:龙宝
    9. * Date:2023-09-14
    10. * Time:16:26
    11. */
    12. public class rediListDemo {
    13. public static void main(String[] args) {
    14. JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
    15. try(Jedis jedis = jedisPool.getResource()) {
    16. System.out.println("lpsuh/rpush举例:");
    17. listDemo1(jedis);
    18. System.out.println("lrange举例:");
    19. listDemo2(jedis);
    20. System.out.println("rpop/lpop举例:");
    21. listDemo3(jedis);
    22. System.out.println("blpop/brpop举例:");
    23. listDemo4(jedis);
    24. System.out.println("llen举例:");
    25. listDemo5(jedis);
    26. }
    27. }
    28. private static void listDemo5(Jedis jedis) {
    29. Long res = jedis.llen("key1");
    30. System.out.println("key1此时的长度:" + res);
    31. }
    32. private static void listDemo4(Jedis jedis) {
    33. //这里具体使用可以看我以前的文章,这里不详细阐述
    34. List<String> res = jedis.blpop(1000,"key1","key2");
    35. System.out.println("key左:" + res);
    36. res = jedis.brpop(1000,"key1","key2");
    37. System.out.println("key右:" + res);
    38. }
    39. private static void listDemo3(Jedis jedis) {
    40. //继续使用第一个方法的残留
    41. String res = jedis.lpop("key1");
    42. System.out.println("key1左侧弹出:" + res);
    43. res = jedis.rpop("key1");
    44. System.out.println("key2右侧弹出:" + res);
    45. }
    46. private static void listDemo2(Jedis jedis) {
    47. //使用上一个方法中新增的list
    48. //1 2 3 4是lpush,5 6 7 是rpush 因此列表的顺序为:4 3 2 1 5 6 7
    49. List<String> res = jedis.lrange("key1",0,-1);
    50. System.out.println("key1:" + res);
    51. }
    52. private static void listDemo1(Jedis jedis) {
    53. // 清理数据
    54. jedis.flushAll();
    55. Long res = jedis.lpush("key1","1","2","3","4");
    56. System.out.println("lpush的返回值:" + res);
    57. res = jedis.rpush("key1","5","6","7");
    58. System.out.println("rpush的返回值:" + res);
    59. }
    60. }

    结果:

    3.5、set相关命令举例

    1. import com.sun.org.apache.xpath.internal.operations.Bool;
    2. import redis.clients.jedis.Jedis;
    3. import redis.clients.jedis.JedisPool;
    4. import java.util.Set;
    5. import java.util.Stack;
    6. /**
    7. * Created with IntelliJ IDEA.
    8. * Description:
    9. * User:龙宝
    10. * Date:2023-09-14
    11. * Time:22:18
    12. */
    13. public class redisSetDemo {
    14. public static void main(String[] args) {
    15. JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
    16. try(Jedis jedis = jedisPool.getResource()) {
    17. System.out.println("sadd/smembers举例");
    18. setDemo1(jedis);
    19. System.out.println("sismember举例:");
    20. setDemo2(jedis);
    21. System.out.println("scard举例:");
    22. setDemo3(jedis);
    23. System.out.println("spop举例:");
    24. setDemo4(jedis);
    25. System.out.println("sinter/sinterstore举例:");
    26. setDemo5(jedis);
    27. }
    28. }
    29. private static void setDemo5(Jedis jedis) {
    30. //取交集
    31. //清理数据
    32. jedis.flushAll();
    33. jedis.sadd("key1","1","2","3");
    34. jedis.sadd("key2","1","2","4");
    35. Set<String> res = jedis.sinter("key1","key2");
    36. System.out.println("交集:" + res);
    37. jedis.sinterstore("key","key1","key2");
    38. res = jedis.smembers("key");
    39. System.out.println("交集"+ res);
    40. }
    41. private static void setDemo4(Jedis jedis) {
    42. //随机删除一个值
    43. String res = jedis.spop("key1");
    44. System.out.println("key1中删除:" + res);
    45. }
    46. private static void setDemo3(Jedis jedis) {
    47. //获取长度
    48. Long res = jedis.scard("key1");
    49. System.out.println("key1长度:" + res);
    50. }
    51. private static void setDemo2(Jedis jedis) {
    52. Boolean res = jedis.sismember("key1","2");
    53. System.out.println("key1中存在2:" + res);
    54. res = jedis.sismember("key1","100");
    55. System.out.println("key1中存在100:" + res);
    56. }
    57. private static void setDemo1(Jedis jedis) {
    58. //清除数据
    59. jedis.flushAll();
    60. Long res = jedis.sadd("key1","1","2","3","4");
    61. System.out.println("sadd的返回值:" + res);
    62. Set<String> result = jedis.smembers("key1");
    63. System.out.println("key1:" + result);
    64. }
    65. }

    结果:

    3.6、zset相关命令举例

    1. import redis.clients.jedis.Jedis;
    2. import redis.clients.jedis.JedisPool;
    3. import java.util.HashMap;
    4. import java.util.List;
    5. import java.util.Map;
    6. /**
    7. * Created with IntelliJ IDEA.
    8. * Description:
    9. * User:龙宝
    10. * Date:2023-09-14
    11. * Time:22:42
    12. */
    13. public class redisZsetDemo {
    14. public static void main(String[] args) {
    15. JedisPool jedisPool = new JedisPool("tcp://127.0.0.1:6666");
    16. try(Jedis jedis = jedisPool.getResource()) {
    17. System.out.println("zadd/zrange举例:");
    18. zsetDemo1(jedis);
    19. System.out.println("zcard举例:");
    20. zsetDemo2(jedis);
    21. System.out.println("zrem举例:");
    22. zsetDemo3(jedis);
    23. System.out.println("zscore举例:");
    24. zsetDemo4(jedis);
    25. System.out.println("zrank举例:");
    26. zsetDemo5(jedis);
    27. }
    28. }
    29. private static void zsetDemo5(Jedis jedis) {
    30. //zrank:
    31. jedis.flushAll();
    32. Map<String,Double> map = new HashMap<>();
    33. map.put("zhangsan",100.0);
    34. map.put("lisi",95.0);
    35. map.put("wangwu",90.0);
    36. Long res = jedis.zadd("key1",map);
    37. Long result = jedis.zrank("key1","lisi");
    38. System.out.println("key1中lisi的排名:" + result);
    39. }
    40. private static void zsetDemo4(Jedis jedis) {
    41. //zscore:
    42. Double res = jedis.zscore("key1","lisi");
    43. System.out.println("key1的lisi的分数:" + res);
    44. }
    45. private static void zsetDemo3(Jedis jedis) {
    46. //zrem:
    47. Long res = jedis.zrem("key1","zhangsan");
    48. System.out.println("key1删除成功?" + res);
    49. }
    50. private static void zsetDemo2(Jedis jedis) {
    51. //zcard:
    52. Long res = jedis.zcard("key1");
    53. System.out.println("key1长度:" + res);
    54. }
    55. private static void zsetDemo1(Jedis jedis) {
    56. //清理数据
    57. jedis.flushAll();
    58. Map<String,Double> map = new HashMap<>();
    59. map.put("zhangsan",100.0);
    60. map.put("lisi",95.0);
    61. Long res = jedis.zadd("key1",map);
    62. System.out.println("zadd的返回值:" + res);
    63. List<String> list = jedis.zrange("key1",0,-1);
    64. System.out.println("key1:" + list);
    65. }
    66. }

    结果:

    先介绍这些啦,下期见~ 

  • 相关阅读:
    【高端电流检测IC储能产品应用方案】耐压45V侧轨的电流检测芯片FP137 应用于电脑电源,开关电源以及多口快充充电器,户外移动电源,适配器,电池充电器等
    与下属沟通--怎样有效沟通
    【漏洞复现】Django _2.0.8_任意URL跳转漏洞(CVE-2018-14574)
    基于java小型银行管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
    设计模式-day01
    MMdetection3.x个人笔记
    PLGA10K-PEG2K-GA/疏水性嵌段聚丙交酯PLGA10K-乙交酯PEG2K-聚乙二醇GA
    HDFS组成架构、文件块大小
    【第五篇】商城系统-商品属性管理
    java 使用策略模式减少if
  • 原文地址:https://blog.csdn.net/LYJbao/article/details/132859994