一、Jedis介绍

  Redis不仅是使用命令来操作,现在基本上主流的语言都有客户端支持,比如Java、C、C#、C++、php、Node、js、Go等。

  在官方网站里列的一些Java客户端,有jedis、Redisson、Jredis等,其中官方推荐使用jedis,在企业中用的最多的就是Jedis。

二、Java连接Redis

2.1 导入jar包

  • commons-pool2-2.3.jar
  • jedis-2.7.0.jar

2.2 单实例连接

  1. @Test
  2. public void testJedisSingle() throws Exception {
  3. // 1.设置ip地址和端口号
  4. Jedis jedis = new Jedis("192.168.25.129", 6379);
  5. // 2.设置数据
  6. jedis.set("name", "zhangsan");
  7. // 3.获得数据
  8. String name = jedis.get("name");
  9. System.out.println(name);
  10. // 4.释放资源
  11. jedis.close();
  12. }

  注:如果执行上面代码时抛出如下异常

  1. redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeOutException: connect timed out

  必须关闭Linux防火墙

  1. service iptables stop

2.3 连接池连接

  1.   @Test
  2. public void testJedisPool() throws Exception {
  3. // 1.获得连接池配置对象,设置配置项
  4. JedisPoolConfig config = new JedisPoolConfig();
  5. // 1.1 最大连接数
  6. config.setMaxTotal(30);
  7. // 1.2 最大空闲连接数
  8. config.setMaxIdle(10);
  9.  
  10. // 2.获得连接池
  11. JedisPool jedisPool = new JedisPool(config, "192.168.25.129", 6379);
  12.  
  13. // 3.获得核心对象
  14. Jedis jedis = null;
  15. try {
  16. jedis = jedisPool.getResource();
  17. // 4.设置数据
  18. jedis.set("name", "lisi");
  19. // 5.获得数据
  20. String name = jedis.get("name");
  21. System.out.println(name);
  22.  
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. } finally {
  26. if (jedis != null) {
  27. jedis.close();
  28. }
  29. // 虚拟机关闭时,释放pool资源
  30. if (jedisPool != null) {
  31. jedisPool.close();
  32. }
  33. }
  34. }

2.4 集群连接

  1.   @Test
  2. public void testJedisCluster() throws Exception {
  3. // 第一步:使用JedisCluster对象。需要一个Set<HostAndPort>参数。Redis节点的列表。
  4. Set<HostAndPort> nodes = new HashSet<>();
  5. nodes.add(new HostAndPort("192.168.25.129", 7001));
  6. nodes.add(new HostAndPort("192.168.25.129", 7002));
  7. nodes.add(new HostAndPort("192.168.25.129", 7003));
  8. nodes.add(new HostAndPort("192.168.25.129", 7004));
  9. nodes.add(new HostAndPort("192.168.25.129", 7005));
  10. nodes.add(new HostAndPort("192.168.25.129", 7006));
  11. // 第二步:直接使用JedisCluster对象操作redis。在系统中单例存在。
  12. JedisCluster jedisCluster = new JedisCluster(nodes);
  13. jedisCluster.set("name", "zhangsan");
  14. String name = jedisCluster.get("name");
  15. // 第三步:打印结果
  16. System.out.println(name);
  17. // 第四步:系统关闭前,关闭JedisCluster对象。
  18. jedisCluster.close();
  19. }

三、接口封装

  常用的操作redis的方法提取出一个接口,分别对应单机版和集群版创建两个实现类。redis的操作在项目中应用较广泛,可将接口和实现类放在commons的工具类中。

3.1 接口定义

  1. public interface JedisClient {
  2.  
  3. String set(String key, String value);
  4. String get(String key);
  5. Boolean exists(String key);
  6. Long expire(String key, int seconds);
  7. Long ttl(String key);
  8. Long incr(String key);
  9. Long hset(String key, String field, String value);
  10. String hget(String key, String field);
  11. Long hdel(String key, String... field);
  12. }

3.2 单机版实现类

  1. public class JedisClientPool implements JedisClient {
  2.  
  3. private JedisPool jedisPool;
  4.  
  5. public JedisPool getJedisPool() {
  6. return jedisPool;
  7. }
  8.  
  9. public void setJedisPool(JedisPool jedisPool) {
  10. this.jedisPool = jedisPool;
  11. }
  12.  
  13. @Override
  14. public String set(String key, String value) {
  15. Jedis jedis = jedisPool.getResource();
  16. String result = jedis.set(key, value);
  17. jedis.close();
  18. return result;
  19. }
  20.  
  21. @Override
  22. public String get(String key) {
  23. Jedis jedis = jedisPool.getResource();
  24. String result = jedis.get(key);
  25. jedis.close();
  26. return result;
  27. }
  28.  
  29. @Override
  30. public Boolean exists(String key) {
  31. Jedis jedis = jedisPool.getResource();
  32. Boolean result = jedis.exists(key);
  33. jedis.close();
  34. return result;
  35. }
  36.  
  37. @Override
  38. public Long expire(String key, int seconds) {
  39. Jedis jedis = jedisPool.getResource();
  40. Long result = jedis.expire(key, seconds);
  41. jedis.close();
  42. return result;
  43. }
  44.  
  45. @Override
  46. public Long ttl(String key) {
  47. Jedis jedis = jedisPool.getResource();
  48. Long result = jedis.ttl(key);
  49. jedis.close();
  50. return result;
  51. }
  52.  
  53. @Override
  54. public Long incr(String key) {
  55. Jedis jedis = jedisPool.getResource();
  56. Long result = jedis.incr(key);
  57. jedis.close();
  58. return result;
  59. }
  60.  
  61. @Override
  62. public Long hset(String key, String field, String value) {
  63. Jedis jedis = jedisPool.getResource();
  64. Long result = jedis.hset(key, field, value);
  65. jedis.close();
  66. return result;
  67. }
  68.  
  69. @Override
  70. public String hget(String key, String field) {
  71. Jedis jedis = jedisPool.getResource();
  72. String result = jedis.hget(key, field);
  73. jedis.close();
  74. return result;
  75. }
  76.  
  77. @Override
  78. public Long hdel(String key, String... field) {
  79. Jedis jedis = jedisPool.getResource();
  80. Long result = jedis.hdel(key, field);
  81. jedis.close();
  82. return result;
  83. }
  84.  
  85. }

  配置文件applicationContext-redis.xml

  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" xmlns:p="http://www.springframework.org/schema/p"
  4. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6. xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  7. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
  9. http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  10. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
  11. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.2.xsd">
  12.  
  13. <!-- 配置redis单机版连接 -->
  14. <bean id="jedisClientPool" class="cn.e3mall.common.jedis.JedisClientPool">
  15. <property name="jedisPool" ref="jedisPool"/>
  16. </bean>
  17. <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
  18. <constructor-arg name="host" value="192.168.25.129"/>
  19. <constructor-arg name="port" value="6379"/>
  20. </bean>
  21. </beans>

3.3 集群版实现类

  1. public class JedisClientCluster implements JedisClient {
  2.  
  3. private JedisCluster jedisCluster;
  4.  
  5. public JedisCluster getJedisCluster() {
  6. return jedisCluster;
  7. }
  8.  
  9. public void setJedisCluster(JedisCluster jedisCluster) {
  10. this.jedisCluster = jedisCluster;
  11. }
  12.  
  13. @Override
  14. public String set(String key, String value) {
  15. return jedisCluster.set(key, value);
  16. }
  17.  
  18. @Override
  19. public String get(String key) {
  20. return jedisCluster.get(key);
  21. }
  22.  
  23. @Override
  24. public Boolean exists(String key) {
  25. return jedisCluster.exists(key);
  26. }
  27.  
  28. @Override
  29. public Long expire(String key, int seconds) {
  30. return jedisCluster.expire(key, seconds);
  31. }
  32.  
  33. @Override
  34. public Long ttl(String key) {
  35. return jedisCluster.ttl(key);
  36. }
  37.  
  38. @Override
  39. public Long incr(String key) {
  40. return jedisCluster.incr(key);
  41. }
  42.  
  43. @Override
  44. public Long hset(String key, String field, String value) {
  45. return jedisCluster.hset(key, field, value);
  46. }
  47.  
  48. @Override
  49. public String hget(String key, String field) {
  50. return jedisCluster.hget(key, field);
  51. }
  52.  
  53. @Override
  54. public Long hdel(String key, String... field) {
  55. return jedisCluster.hdel(key, field);
  56. }
  57.  
  58. }

  spring的配置:

  1. <!-- 配置redis集群版的连接 -->
  2. <bean id="jedisClientCluster" class="cn.e3mall.common.jedis.JedisClientCluster">
  3. <property name="jedisCluster" ref="jedisCluster"></property>
  4. </bean>
  5. <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
  6. <constructor-arg>
  7. <set>
  8. <bean class="redis.clients.jedis.HostAndPort">
  9. <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
  10. <constructor-arg name="port" value="7001"></constructor-arg>
  11. </bean>
  12. <bean class="redis.clients.jedis.HostAndPort">
  13. <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
  14. <constructor-arg name="port" value="7002"></constructor-arg>
  15. </bean>
  16. <bean class="redis.clients.jedis.HostAndPort">
  17. <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
  18. <constructor-arg name="port" value="7003"></constructor-arg>
  19. </bean>
  20. <bean class="redis.clients.jedis.HostAndPort">
  21. <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
  22. <constructor-arg name="port" value="7004"></constructor-arg>
  23. </bean>
  24. <bean class="redis.clients.jedis.HostAndPort">
  25. <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
  26. <constructor-arg name="port" value="7005"></constructor-arg>
  27. </bean>
  28. <bean class="redis.clients.jedis.HostAndPort">
  29. <constructor-arg name="host" value="192.168.25.129"></constructor-arg>
  30. <constructor-arg name="port" value="7006"></constructor-arg>
  31. </bean>
  32. </set>
  33. </constructor-arg>
  34. </bean>

  注意:单机版和集群版不能共存,使用单机版时注释集群版的配置。使用集群版,把单机版注释。

3.4 封装代码测试

  1.   @Test
  2. public void testJedisClient() throws Exception {
  3. //初始化Spring容器
  4. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-redis.xml");
  5. //从容器中获得JedisClient对象
  6. JedisClient jedisClient = applicationContext.getBean(JedisClient.class);
  7. jedisClient.set("first", "100");
  8. String result = jedisClient.get("first");
  9. System.out.println(result);
  10. }

Redis学习笔记(4)—— Jedis入门的更多相关文章

  1. Redis学习笔记7--Redis管道(pipeline)

    redis是一个cs模式的tcp server,使用和http类似的请求响应协议.一个client可以通过一个socket连接发起多个请求命令.每个请求命令发出后client通常会阻塞并等待redis ...

  2. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  3. Redis学习笔记(二)Redis支持的5种数据类型的总结之String和Hash

    引言 在Redis学习笔记(一)中我们已经会安装并且简单使用Redis了,接下来我们一起来学习下Redis支持的5大数据类型. 简介 Redis是REmote DIctionary Server(远程 ...

  4. redis 学习笔记(6)-cluster集群搭建

    上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...

  5. Redis学习笔记~目录

    回到占占推荐博客索引 百度百科 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合). ...

  6. Redis学习笔记4-Redis配置详解

    在Redis中直接启动redis-server服务时, 采用的是默认的配置文件.采用redis-server   xxx.conf 这样的方式可以按照指定的配置文件来运行Redis服务.按照本Redi ...

  7. Redis学习笔记一:数据结构与对象

    1. String(SDS) Redis使用自定义的一种字符串结构SDS来作为字符串的表示. 127.0.0.1:6379> set name liushijie OK 在如上操作中,name( ...

  8. Redis学习笔记之ABC

    Redis学习笔记之ABC Redis命令速查 官方帮助文档 中文版本1 中文版本2(反应速度比较慢) 基本操作 字符串操作 set key value get key 哈希 HMSET user:1 ...

  9. Hadoop学习笔记(1) ——菜鸟入门

    Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么?先问一下百度吧: [百度百科]一个分布式系统基础架构,由Apache基金会所开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序. ...

  10. Redis学习笔记(二)-key相关命令【转载】

    转自 Redis学习笔记(二)-key相关命令 - 点解 - 博客园http://www.cnblogs.com/leny/p/5638764.html Redis支持的各种数据类型包括string, ...

随机推荐

  1. win 10 提升权限

    问题:每次打开Visual Studio 提示,需要重启以获取管理员权限 解决: 1.Win+R 2.输入:gpedit.msc 3.windows设置->安全设置->本地策略->安 ...

  2. C语言学习笔记--多维数组和多维指针

    1. 指向指针的指针 (1)指针的本质是变量,会占用一定的内存空间 (2)可以定义指针的指针来保存指针变量的地址值 (3)指针是个变量,同样也存在传值调用与传址调用 重置动态空间的大小 #includ ...

  3. js-tree坑

    今天遇到一个js坑,一个页面,有两棵树,用同一个套参数初始化的,,,,当选择完另一个棵树之后,再操作另一颗树,不选择树节点,就会有错误出现,,,

  4. 【259】ucpole.dat update

    2017年2月21日 57871 +0.020896 0.007232 +0.414732 0.009212 +0.418044 0.007533 p 57872 +0.022055 0.007284 ...

  5. 百度地图SDK v2.1.2使用方法

    1.开发工具 Android开发工具有很多,开发者可根据自己的喜好进行选择.在此,我们推荐开发者使用Eclipse作为自己的开发工具,本套开发指南也是针对Eclipse开发环境下进行编写的. 2.工程 ...

  6. sql中IN的用法

    1.和where配合使用 IN操作符允许我们在where的子句中规定多个值 SELECT * FROM Persons  WHERE LastName IN ('Adams','Carter') 这句 ...

  7. 登陆Oracle出现错误java.lang.exception

    出现错误时登录企业管理器时出现的界面 出现这种错误一般是因为没有设置时区,一般默认的是agentTZRegion=GMT,也就是GMT.所以大家只要设置了这个东西,然后重新启动dbconsole就可以 ...

  8. VS调试程序时,程序出现异常,但VS不报错的解决方案

    在调试>异常> 里面把勾全勾上就行了!

  9. C++面向对象类的实例题目四

    题目描述: 以面向对象的概念设计一个类,此类包含3个私有数据:unlead.lead(无铅汽油和有铅汽油)以及total(当天总收入,无铅汽油的价格是17元/升,有铅汽油的加个是16元/升),请以构造 ...

  10. 21、conda下载,安装,卸载

    参考:https://www.cnblogs.com/Datapotumas/p/6293309.html 1.下载 conda下载网址:https://conda.io/miniconda.html ...