一、背景

  上篇文章我们介绍了如何在centos7下面进行安装单机版redis以及redis集群。这篇文章,我们来聊一聊如何使用java客户端来进行操作redis。我们知道redis的java客户端有很多,如:jedis、redission等。这篇文章着重介绍我们平常使用最多的redis的java客户端jedis。

二、通过单元测试来小试牛刀

  1.首先在maven的pom.xml中引入jedis-client的依赖

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

  2.使用junit进行单元测试

  1. package com.hafiz.redis.test;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Set;
  5.  
  6. import org.junit.Test;
  7.  
  8. import redis.clients.jedis.HostAndPort;
  9. import redis.clients.jedis.Jedis;
  10. import redis.clients.jedis.JedisCluster;
  11. import redis.clients.jedis.JedisPool;
  12.  
  13. public class JedisTest {
  14.  
  15. @Test
  16. public void testJedisSingle() {
  17. // 创建一个jedis连接
  18. Jedis client = new Jedis("192.168.25.153", 6379);
  19. client.set("name", "zhangsan");
  20. String name = client.get("name");
  21. System.out.println(name);
  22. // 关闭连接
  23. client.close();
  24. }
  25.  
  26. @Test
  27. public void testJedisPoolSingle() {
  28. // 创建一个连接池对象,系统中应该是单例的
  29. JedisPool pool = new JedisPool("192.168.25.153", 6379);
  30. // 从连接池中获取一个连接
  31. Jedis client = pool.getResource();
  32. client.set("age", "100");
  33. String name = client.get("name");
  34. String age = client.get("age");
  35. System.out.println(name);
  36. System.out.println(age);
  37. // jedis必须关闭连接
  38. client.close();
  39.  
  40. // 关闭连接池
  41. pool.close();
  42. }
  43.  
  44. @Test
  45. public void testJedisCluster() {
  46. // 创建一个jedisCluster对象的节点集合
  47. Set<HostAndPort> nodes = new HashSet<>();
  48. // 在nodes中指定每个节点的地址
  49. nodes.add(new HostAndPort("192.168.25.153", 7001));
  50. nodes.add(new HostAndPort("192.168.25.153", 7002));
  51. nodes.add(new HostAndPort("192.168.25.153", 7003));
  52. nodes.add(new HostAndPort("192.168.25.153", 7004));
  53. nodes.add(new HostAndPort("192.168.25.153", 7005));
  54. nodes.add(new HostAndPort("192.168.25.153", 7006));
  55. // 创建一个jedisCluster对象,该对象在系统中应该是单例的
  56. JedisCluster cluster = new JedisCluster(nodes);
  57. cluster.set("id", "100");
  58. cluster.set("value", "Hello Jedis");
  59. System.out.println(cluster.get("id"));
  60. System.out.println(cluster.get("value"));
  61.  
  62. // 系统关闭时,关闭集群
  63. cluster.close();
  64. }
  65. }

三、在项目中,使用Spring集成Redis

1.redis.properties文件如下:

  1. #Redis stand-alone config
  2. redis.single.host=192.168.25.153
  3. redis.single.port=6379
  4.  
  5. #Redis cluster config
  6. redis.cluster.node1.host=192.168.25.153
  7. redis.cluster.node1.port=7001
  8. redis.cluster.node2.host=192.168.25.153
  9. redis.cluster.node2.port=7002
  10. redis.cluster.node3.host=192.168.25.153
  11. redis.cluster.node3.port=7003
  12. redis.cluster.node4.host=192.168.25.153
  13. redis.cluster.node4.port=7004
  14. redis.cluster.node5.host=192.168.25.153
  15. redis.cluster.node5.port=7005
  16. redis.cluster.node6.host=192.168.25.153
  17. redis.cluster.node6.port=7006

2.spring-redis配置文件如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:context="http://www.springframework.org/schema/context"
  4.    xmlns:p="http://www.springframework.org/schema/p"
  5. xmlns:aop="http://www.springframework.org/schema/aop"
  6.    xmlns:tx="http://www.springframework.org/schema/tx"
  7. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  8. xsi:schemaLocation="http://www.springframework.org/schema/beans
  9.     http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  10.   http://www.springframework.org/schema/context
  11.     http://www.springframework.org/schema/context/spring-context-4.0.xsd
  12.   http://www.springframework.org/schema/aop
  13.     http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  14.     http://www.springframework.org/schema/tx
  15.     http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  16.   http://www.springframework.org/schema/util
  17.     http://www.springframework.org/schema/util/spring-util-4.0.xsd">
  18.  
  19. <!-- Redis stand-alone config -->
  20. <bean id = "jedisPool" class = "redis.clients.jedis.JedisPool">
  21. <constructor-arg name="host" value="${redis.single.host}"/>
  22. <constructor-arg name="port" value="${redis.single.port}"/>
  23. </bean>
  24. <bean id = "singleJedisClient" class = "com.taotao.rest.component.impl.SingleJedisClient"/>
  25.  
  26.    <!-- Redis cluster config -->
       <!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
  27. <constructor-arg name="nodes">
  28. <set>
  29. <bean class="redis.clients.jedis.HostAndPort">
  30. <constructor-arg name="host" value="${redis.cluster.node1.host}"/>
  31. <constructor-arg name="port" value="${redis.cluster.node1.port}"/>
  32. </bean>
  33. <bean class="redis.clients.jedis.HostAndPort">
  34. <constructor-arg name="host" value="${redis.cluster.node2.host}"/>
  35. <constructor-arg name="port" value="${redis.cluster.node2.port}"/>
  36. </bean>
  37. <bean class="redis.clients.jedis.HostAndPort">
  38. <constructor-arg name="host" value="${redis.cluster.node3.host}"/>
  39. <constructor-arg name="port" value="${redis.cluster.node3.port}"/>
  40. </bean>
  41. <bean class="redis.clients.jedis.HostAndPort">
  42. <constructor-arg name="host" value="${redis.cluster.node4.host}"/>
  43. <constructor-arg name="port" value="${redis.cluster.node4.port}"/>
  44. </bean>
  45. <bean class="redis.clients.jedis.HostAndPort">
  46. <constructor-arg name="host" value="${redis.cluster.node5.host}"/>
  47. <constructor-arg name="port" value="${redis.cluster.node5.port}"/>
  48. </bean>
  49. <bean class="redis.clients.jedis.HostAndPort">
  50. <constructor-arg name="host" value="${redis.cluster.node6.host}"/>
  51. <constructor-arg name="port" value="${redis.cluster.node6.port}"/>
  52. </bean>
  53. </set>
  54. </constructor-arg>
  55. </bean>
  56. <bean id="clusterJedisClient" class="com.hafiz.rest.component.impl.ClusterJedisClient"/> -->
  57. </beans>

默认放开的是单机版配置,如需使用集群版请注释上面单机版配置,并打开下面集群版配置。

3.接着我们编写一个JedisClient接口类

  1. package com.hafiz.component;
  2.  
  3. public interface JedisClient {
  4.  
  5. String set(String key, String value);
  6. String get(String key);
  7. Long del(String key);
  8. Long hset(String key, String item, String value);
  9. String hget(String key, String item);
  10. Long hdel(String key, String... item);
  11. Long incr(String key);
  12. Long decr(String key);
  13. Long expire(String key, int seconds);
  14. Long ttl(String key);
  15. }

4.然后我们给出单机版的实现类:SingleJedisClient.java

  1. package com.hafiz.component.impl;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4.  
  5. import com.taotao.rest.component.JedisClient;
  6.  
  7. import redis.clients.jedis.Jedis;
  8. import redis.clients.jedis.JedisPool;
  9.  
  10. /**
  11. * Redis单机客户端工具类
  12. * @author Administrator
  13. */
  14. public class SingleJedisClient implements JedisClient {
  15.  
  16. @Autowired
  17. private JedisPool jedisPool;
  18.  
  19. @Override
  20. public String set(String key, String value) {
  21. Jedis client = jedisPool.getResource();
  22. String result = client.set(key, value);
  23. client.close();
  24. return result;
  25. }
  26.  
  27. @Override
  28. public String get(String key) {
  29. Jedis client = jedisPool.getResource();
  30. String result = client.get(key);
  31. client.close();
  32. return result;
  33. }
  34.  
  35. @Override
  36. public Long del(String key) {
  37. Jedis client = jedisPool.getResource();
  38. Long result = client.del(key);
  39. client.close();
  40. return result;
  41. }
  42.  
  43. @Override
  44. public Long hset(String key, String item, String value) {
  45. Jedis client = jedisPool.getResource();
  46. Long result = client.hset(key, item, value);
  47. client.close();
  48. return result;
  49. }
  50.  
  51. @Override
  52. public String hget(String key, String item) {
  53. Jedis client = jedisPool.getResource();
  54. String result = client.hget(key, item);
  55. client.close();
  56. return result;
  57. }
  58.  
  59. @Override
  60. public Long hdel(String key, String... item) {
  61. Jedis client = jedisPool.getResource();
  62. Long result = client.hdel(key, item);
  63. client.close();
  64. return result;
  65. }
  66.  
  67. @Override
  68. public Long incr(String key) {
  69. Jedis client = jedisPool.getResource();
  70. Long result = client.incr(key);
  71. client.close();
  72. return result;
  73. }
  74.  
  75. @Override
  76. public Long decr(String key) {
  77. Jedis client = jedisPool.getResource();
  78. Long result = client.decr(key);
  79. client.close();
  80. return result;
  81. }
  82.  
  83. @Override
  84. public Long expire(String key, int seconds) {
  85. Jedis client = jedisPool.getResource();
  86. Long result = client.expire(key, seconds);
  87. client.close();
  88. return result;
  89. }
  90.  
  91. @Override
  92. public Long ttl(String key) {
  93. Jedis client = jedisPool.getResource();
  94. Long result = client.ttl(key);
  95. client.close();
  96. return result;
  97. }
  98.  
  99. }

5.我们再提供集群版的实现类:ClusterJedisClient.java

  1. package com.hafiz.component.impl;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4.  
  5. import com.taotao.rest.component.JedisClient;
  6.  
  7. import redis.clients.jedis.JedisCluster;
  8.  
  9. /**
  10. * Redis集群客户端工具类
  11. * @author Administrator
  12. */
  13. public class ClusterJedisClient implements JedisClient {
  14.  
  15. @Autowired
  16. private JedisCluster jedisCluster;
  17.  
  18. @Override
  19. public String set(String key, String value) {
  20. return jedisCluster.set(key, value);
  21. }
  22.  
  23. @Override
  24. public String get(String key) {
  25. return jedisCluster.get(key);
  26. }
  27.  
  28. @Override
  29. public Long del(String key) {
  30. return jedisCluster.del(key);
  31. }
  32.  
  33. @Override
  34. public Long hset(String key, String item, String value) {
  35. return jedisCluster.hset(key, item, value);
  36. }
  37.  
  38. @Override
  39. public String hget(String key, String item) {
  40. return jedisCluster.hget(key, item);
  41. }
  42.  
  43. @Override
  44. public Long hdel(String key, String... item) {
  45. return jedisCluster.hdel(key, item);
  46. }
  47.  
  48. @Override
  49. public Long incr(String key) {
  50. return jedisCluster.incr(key);
  51. }
  52.  
  53. @Override
  54. public Long decr(String key) {
  55. return jedisCluster.decr(key);
  56. }
  57.  
  58. @Override
  59. public Long expire(String key, int seconds) {
  60. return jedisCluster.expire(key, seconds);
  61. }
  62.  
  63. @Override
  64. public Long ttl(String key) {
  65. return jedisCluster.ttl(key);
  66. }
  67.  
  68. }

6.spring集成redis单元测试

  1. package com.taotao.rest.test;
  2.  
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6.  
  7. import com.taotao.rest.component.JedisClient;
  8.  
  9. public class SpringJedisTest {
  10.  
  11. @Test
  12. public void testJedisClientSpring() throws Exception {
  13. //创建一个spring容器
  14. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*.xml");
  15. //从容器中获得JedisClient对象
  16. JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
  17. //jedisClient操作redis
  18. jedisClient.set("cliet1", "1000");
  19. String string = jedisClient.get("cliet1");
  20. System.out.println(string);
  21. }
  22. }

四、总结

  通过本文我们对jedis的使用有了进一步的了解,知道了如何使用spring对redis进行集成,也对jedisClient做了单机以及集群的实现。很有成就感,未来走向架构师的路还有很远,继续努力吧!

使用Java客户端对Redis进行操作的更多相关文章

  1. 从JAVA客户端访问Redis示例(入门)

    转自:http://blog.csdn.net/kkdelta/article/details/7217761 本文记录了安装Redis和从JAVA端访问Redis的步骤 从http://downlo ...

  2. java 框架-缓冲-Redis 2Jedis操作

    https://www.cnblogs.com/wlandwl/p/redis.html Redis介绍及Jedis基础操作   1.Redis简介 Redis 是一个开源(BSD许可)的,内存中的数 ...

  3. Kubernetes官方java客户端之七:patch操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. 使用java客户端调用redis

    Redis支持很多编程语言的客户端,有C.C#.C++.Clojure.Common Lisp.Erlang.Go.Lua.Objective-C.PHP.Ruby.Scala,甚至更时髦的Node. ...

  5. HBase的java客户端测试(二)---DML操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  6. HBase的java客户端测试(一)---DDL操作

    测试准备 [首先同步时间:] for node in CloudDeskTop master01 master02 slave01 slave02 slave03;do ssh $node " ...

  7. 【Redis学习之十一】Java客户端实现redis集群操作

    客户端:jedis-2.7.2.jar 配置文件两种方式: properties: redis.cluster.nodes1=192.168.1.117 redis.cluster.port1=700 ...

  8. java中的redis常用操作

    https://blog.csdn.net/lixiaoxiong55/article/details/81592800    超详细版 常规操作 public class TestReidsComm ...

  9. Jedis客户端即redis中的pipeline批量操作

    关注公众号:CoderBuff,回复"redis"获取<Redis5.x入门教程>完整版PDF. <Redis5.x入门教程>目录 第一章 · 准备工作 第 ...

随机推荐

  1. PHP发起POST DELETE GET POST 请求

    原文链接:http://blog.csdn.net/lengxue789/article/details/8254667 关于POST,DELETE,GET,POST请求 get:是用来取得数据.其要 ...

  2. 20155205 2016-2017-2 《Java程序设计》第9周学习总结

    20155205 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 JDBC简介 厂商在实现JDBC驱动程序时,依方式可将驱动程序分为四种类型: JD ...

  3. silverlight导出图片文件

    新建一个Silverlight应用程序,添加下面两个控件: image控件:image1: Button控件:Click="Button1_Click"; code-Behind代 ...

  4. java.io.IOException: Can't read [\jre\lib\rt.jar]

    [proguard] java.io.IOException: Can't read [F:\e\java\jdk1.8.0_101\jre\lib\rt.jar] (Can't process cl ...

  5. 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .

    今天在看串口驱动(四)的时候 有这样一个结构体初始化 我很不理解 如下: static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] ...

  6. Android SimpleAdapter ViewBinder

  7. 使用Windows 8 Pro密钥光盘安装Windows 8.1 Pro

    在Windows 8.1发布接近半年的时候,自己终于腾出来了时间,准备升级一下自己的系统.作为一名极度强迫症患者,加上校园网的悲剧网速,最后决定使用光盘镜像全新安装而不是通过应用商店的升级. Figu ...

  8. Stein算法求最大公约数

    首先引进一个符号:gcd是greatest common divisor(最大公约数)的缩写,gcd( x,y ) 表示x和y的最大公约数.然后有一个事实需要了解:一个奇数的所有约数都是奇数.这个很容 ...

  9. 《mysql必知必会》学习_第五章_20180730_欢

    使用的工具是wamp的Mysql. P29 select prod_name from products;  #在表products中选列prod_name,顺寻不是纯粹的随机,但是没有说明排列顺序, ...

  10. jvm虚拟机--堆内存

    reserved 保留区域 堆 所有对象实例都在这里分配内存. 是垃圾收集的主要区域("GC 堆").现代的垃圾收集器基本都是采用分代收集算法,主要思想是针对不同的对象采取不同的垃 ...