`

Jedis(redis 客户端)

 
阅读更多

Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET

等。基于这些限制,有必要考虑Redis

  

言归正传,目前Redis大概有3中基于Java语言的Client:

  • Jredis
  • Jedis
  • Redis4J

这里只说Jedis,因为它是官方提供的唯一Redis Client For Java Provider!

 

一、简单使用Jedis

需要Jedis就从Maven获取吧!
Maven Pom.xml

 

Xml代码  收藏代码
  1. <dependency>  
  2.     <groupId>redis.clients</groupId>  
  3.     <artifactId>jedis</artifactId>  
  4.     <version>2.1.0</version>  
  5.     <type>jar</type>  
  6.     <scope>compile</scope>  
  7. </dependency>  

 

 

如果只是简单使用Jedis,以下这么几行代码足够:

 

Java代码  收藏代码
  1. Jedis jedis = new Jedis("10.11.20.140");  
  2. String keys = "name";  
  3.   
  4. // 删数据  
  5. jedis.del(keys);  
  6. // 存数据  
  7. jedis.set(keys, "snowolf");  
  8. // 取数据  
  9. String value = jedis.get(keys);  
  10.   
  11. System.out.println(value);  

 

二、池化使用Jedis

Jedis使用commons-pool完成池化实现。

先做个配置文件:

Properties代码  收藏代码
  1. #最大分配的对象数  
  2. redis.pool.maxActive=1024  
  3. #最大能够保持idel状态的对象数  
  4. redis.pool.maxIdle=200  
  5. #当池内没有返回对象时,最大等待时间  
  6. redis.pool.maxWait=1000  
  7. #当调用borrow Object方法时,是否进行有效性检查  
  8. redis.pool.testOnBorrow=true  
  9. #当调用return Object方法时,是否进行有效性检查  
  10. redis.pool.testOnReturn=true  
  11. #IP  
  12. redis.ip=10.11.20.140  
  13. #Port  
  14. redis.port=6379  

 

 在静态代码段中完成初始化:

 

Java代码  收藏代码
  1. private static JedisPool pool;  
  2. static {  
  3.     ResourceBundle bundle = ResourceBundle.getBundle("redis");  
  4.     if (bundle == null) {  
  5.         throw new IllegalArgumentException(  
  6.                 "[redis.properties] is not found!");  
  7.     }  
  8.     JedisPoolConfig config = new JedisPoolConfig();  
  9.     config.setMaxActive(Integer.valueOf(bundle  
  10.             .getString("redis.pool.maxActive")));  
  11.     config.setMaxIdle(Integer.valueOf(bundle  
  12.             .getString("redis.pool.maxIdle")));  
  13.     config.setMaxWait(Long.valueOf(bundle.getString("redis.pool.maxWait")));  
  14.     config.setTestOnBorrow(Boolean.valueOf(bundle  
  15.             .getString("redis.pool.testOnBorrow")));  
  16.     config.setTestOnReturn(Boolean.valueOf(bundle  
  17.             .getString("redis.pool.testOnReturn")));  
  18.     pool = new JedisPool(config, bundle.getString("redis.ip"),  
  19.             Integer.valueOf(bundle.getString("redis.port")));  
  20. }  

 然后,修改前面那段jedis操作Redis

Java代码  收藏代码
  1. // 从池中获取一个Jedis对象  
  2. Jedis jedis = pool.getResource();  
  3. String keys = "name";  
  4.   
  5. // 删数据  
  6. jedis.del(keys);  
  7. // 存数据  
  8. jedis.set(keys, "snowolf");  
  9. // 取数据  
  10. String value = jedis.get(keys);  
  11.   
  12. System.out.println(value);  
  13.   
  14. // 释放对象池  
  15. pool.returnResource(jedis);  

 改为从对象池中,获取Jedis实例:

 

Java代码  收藏代码
  1. // 从池中获取一个Jedis对象  
  2. Jedis jedis = pool.getResource();  

 

 

 切记,最后使用后,释放Jedis对象:

 

Java代码  收藏代码
  1. // 释放对象池  
  2. pool.returnResource(jedis);  

 

 

三、一致性哈希

 

Memcached完全基于分布式集群,而RedisMaster-Slave,如果想把Reids,做成集群模式,无外乎多做几套Master-Slave,每套Master-Slave完成各自的容灾处理,通过Client工具,完成一致性哈希。

PS:Memcached是在Server端完成ShardingRedis只能依靠各个ClientSharding。可能会在Redis 3.0系列支持ServerSharding

 

保留前面的JedisPoolConfig,新增两个Redis的IP(redis1.ip,redis2.ip),完成两个JedisShardInfo实例,并将其丢进List中:

 

Java代码  收藏代码
  1. JedisShardInfo jedisShardInfo1 = new JedisShardInfo(  
  2.                 bundle.getString("redis1.ip"), Integer.valueOf(bundle                       .getString("redis.port")));  
  3. JedisShardInfo jedisShardInfo2 = new JedisShardInfo(  
  4.                 bundle.getString("redis2.ip"), Integer.valueOf(bundle                       .getString("redis.port")));  
  5.   
  6. List<JedisShardInfo> list = new LinkedList<JedisShardInfo>();  
  7. list.add(jedisShardInfo1);  
  8. list.add(jedisShardInfo2);  

 初始化ShardedJedisPool代替JedisPool:

 

Java代码  收藏代码
  1. ShardedJedisPool pool = new ShardedJedisPool(config, list);  

 改由ShardedJedis,获取Jedis对象:

 

Java代码  收藏代码
  1. // 从池中获取一个Jedis对象  
  2. ShardedJedis jedis = pool.getResource();  
  3. String keys = "name";  
  4. String value = "snowolf";  
  5. // 删数据  
  6. jedis.del(keys);  
  7. // 存数据  
  8. jedis.set(keys, value);  
  9. // 取数据  
  10. String v = jedis.get(keys);  
  11.   
  12. System.out.println(v);  
  13.   
  14. // 释放对象池  
  15. pool.returnResource(jedis);  

 

 

 

四、Spring封装参考

 Ok,完成上述代码足够完成简单任务,如果有必要,可以用Spring封装初始化:

 

Xml代码  收藏代码
  1. <context:property-placeholder location="classpath:redis.properties" />  
  2. <bean  
  3.     id="jedisPoolConfig"  
  4.     class="redis.clients.jedis.JedisPoolConfig"  
  5. >  
  6.     <property  
  7.         name="maxActive"  
  8.         value="${redis.pool.maxActive}" />  
  9.     <property  
  10.         name="maxIdle"  
  11.         value="${redis.pool.maxIdle}" />  
  12.     <property  
  13.         name="maxWait"  
  14.         value="${redis.pool.maxWait}" />  
  15.     <property  
  16.         name="testOnBorrow"  
  17.         value="${redis.pool.testOnBorrow}" />  
  18. </bean>  
  19. <bean  
  20.     id="shardedJedisPool"  
  21.     class="redis.clients.jedis.ShardedJedisPool"  
  22. >  
  23.     <constructor-arg  
  24.         index="0"  
  25.         ref="jedisPoolConfig" />  
  26.     <constructor-arg index="1">  
  27.         <list>  
  28.             <bean class="redis.clients.jedis.JedisShardInfo">  
  29.                 <constructor-arg  
  30.                     index="0"  
  31.                     value="${redis1.ip}" />  
  32.                 <constructor-arg  
  33.                     index="1"  
  34.                     value="${redis.port}"  
  35.                     type="int" />  
  36.             </bean>  
  37.             <bean class="redis.clients.jedis.JedisShardInfo">  
  38.                 <constructor-arg  
  39.                     index="0"  
  40.                     value="${redis2.ip}" />  
  41.                 <constructor-arg  
  42.                     index="1"  
  43.                     value="${redis.port}"  
  44.                     type="int" />  
  45.             </bean>  
  46.         </list>  
  47.     </constructor-arg>  
  48. </bean>  

 代码可以更简洁一些:

 

Java代码  收藏代码
  1. private ApplicationContext app;  
  2. private ShardedJedisPool pool;  
  3.   
  4. @Before  
  5. public void before() throws Exception {  
  6.     app = new ClassPathXmlApplicationContext("applicationContext.xml");  
  7.     pool = (ShardedJedisPool) app.getBean("shardedJedisPool");  
  8. }  
  9.   
  10. @Test  
  11. public void test() {  
  12.   
  13.     // 从池中获取一个Jedis对象  
  14.     ShardedJedis jedis = pool.getResource();  
  15.     String keys = "name";  
  16.     String value = "snowolf";  
  17.     // 删数据  
  18.     jedis.del(keys);  
  19.     // 存数据  
  20.     jedis.set(keys, value);  
  21.     // 取数据  
  22.     String v = jedis.get(keys);  
  23.   
  24.     System.out.println(v);  
  25.   
  26.     // 释放对象池  
  27.     pool.returnResource(jedis);  
  28.   
  29.     assertEquals(value, v);  
  30. }  

 
当然,Spring提供了对于Redis的专门支持:spring-data-redis,以后有机会再深入研究。

 

转载:

相关链接:

征服 Redis

征服 Redis + Jedis

征服 Redis + Jedis + Spring (一)—— 配置&常规操作(GET SET DEL)

征服 Redis + Jedis + Spring (二)—— 哈希表操作(HMGET HMSET)

征服 Redis + Jedis + Spring (三)—— 列表操作

分享到:
评论

相关推荐

    redis客户端

    RedisClient是Redis客户端的GUI工具,使用Java swt和jedis编写,可以方便开发者浏览Redis数据库。该软件支持简体中文,非常适合国内用户使用,不需要汉化就可以直接使用。RedisClient将redis数据以资源管理器的界面...

    redis客户端工具(绿色版)

    同时,它利用Jedis这个Java客户端库连接并操作Redis服务器,确保了高效稳定的性能。 4. **功能全面**:作为一个客户端工具,RedisClient通常会包含如键的查看、添加、删除、修改,以及对集合、哈希表、有序集合等...

    jedisRedis的Java客户端

    总之,Jedis作为Java开发中的Redis客户端,提供了全面的Redis操作支持,是构建高性能、高可用Java应用的重要工具。了解并熟练使用Jedis的各项特性和最佳实践,能够帮助开发者充分发挥Redis在缓存、消息传递等方面的...

    nginx+tomcat+redis +redis客户端 等负载均衡资料

    `redis客户端`则是与`redis`服务器通信的应用程序,如Jedis(Java客户端)、Redisson(Java客户端)等。开发人员可以通过这些客户端库方便地在自己的应用程序中集成`redis`功能,进行数据的存取操作。 在负载均衡...

    redis客户端连接、spring boot整合、分布式锁.zip

    项目中的 `redis-jedis` 可能是包含 Jedis 客户端使用示例的目录,`redis-lock` 可能是关于分布式锁实现的代码,而 `redis-boot-sentinel-cluster` 可能是配置和使用 Redis Sentinel 进行高可用集群的示例。...

    redis客户端工具 redisclient

    RedisClient 是 Redis 客户端 GUI 工具,使用 Java swt 和jedis 编写。它将redis数据以windows资源管理器的界面风格呈现给用户,可以帮助redis开发人员和维护人员方便的建立,修改,删除,查询redis数据,可以将数据...

    jedis-2.9.0 最新版Redis客户端CSDN下载

    Jedis是Java语言中使用最广泛的Redis客户端库,它提供了丰富的API来操作Redis服务器。在这个"jedis-2.9.0"的最新版本中,我们包含了三个重要的文件: 1. `jedis-2.9.0.jar`:这是Jedis的二进制发行版,包含了所有...

    各种版本的redis+Jedis驱动包

    4. **Jedis**:Jedis是Java语言的Redis客户端库,它提供了丰富的API,使Java开发者能够方便地与Redis进行交互。Jedis支持各种Redis命令,包括数据类型操作、事务处理、发布/订阅、持久化等。在实际项目中,通过Jedis...

    redis客户端和redis绿色免安装版和redis插件

    本文将深入探讨Redis客户端、Redis绿色免安装版以及与Java开发相关的Redis插件。 首先,Redis客户端在开发和管理Redis服务器时起着至关重要的作用。`redis-desktop-manager-0.8.8.384.exe` 是一个名为Redis Desktop...

    redis客户端,连接查看redis数据库

    - **Java的Jedis**:Java的Redis客户端,支持所有Redis命令,适用于企业级应用。 5. **连接管理** - **连接池**:为了优化性能,通常会使用连接池来复用连接,避免频繁创建和关闭连接。 - **心跳检测**:客户端...

    jedis Redis的java客户端的工具包

    分享一下Redis的JAVA客户端,Jedis工具包

    redis客户端及jar包.zip

    2. **Jedis** (jedis-2.9.0.jar): Jedis是Java语言开发的Redis客户端库,广泛用于Java应用与Redis服务器之间的交互。它提供了丰富的API,涵盖了Redis命令的大部分功能,如字符串、哈希表、列表、集合、有序集合等...

    redis客户端连接工具

    而“redis客户端连接工具”指的是可以与Redis服务器交互的应用程序,帮助开发者执行命令、查看数据、进行管理操作。这里我们将详细探讨Redis客户端工具的使用、特性和选择。 首先,Redis客户端工具分为命令行界面...

    spring_redis集成(jedis java客户端)

    spring_redis集成,通过jedis作为redis的客户端。 只提供集成方式,具体api,参照jedis API

    Redis客户端Java服务接口封装

    本文将围绕“Redis客户端Java服务接口封装”这一主题进行深入探讨,结合给定的`RedisClientTemplate.java`文件,我们将讨论如何在Java环境中高效地与Redis进行交互。 首先,`RedisClientTemplate`这个名字暗示它是...

    redis客户端,java编写

    首先,Java开发Redis客户端最常用的库是Jedis,它是一个开源的Java客户端,提供了丰富的Redis命令支持。在本文中,我们关注的`redisclient-win32.x86_64.2.0.jar`文件很可能是一个基于Java编写的Redis客户端库,但请...

    redis客户端和服务端

    这可能是一个包含 Redis 连接池实现的 Java 库,如 JedisPool,它简化了 Redis 客户端连接管理,提供了连接池的配置和管理功能。使用这个库,开发者可以方便地在 Java 应用中集成 Redis,并有效管理 Redis 连接。 ...

    redis客户端操作实战-redisDemo.zip

    1. Jedis:Java开发的Redis客户端,广泛应用于Java项目中。Jedis提供了一系列API,如连接、选择数据库、执行命令、关闭连接等。 2. Lettuce:另一个流行的Java Redis客户端,它基于Netty框架,提供了异步和反应式...

    Redis客户端之Jedis

    **Redis客户端之Jedis** Redis是一款高性能的键值存储系统,广泛应用于缓存、消息队列、数据持久化等多个场景。Java开发人员通常选择Jedis作为与Redis交互的客户端库,因为其简单易用且功能强大。本文将详细介绍...

Global site tag (gtag.js) - Google Analytics