- 浏览: 429598 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (269)
- 原创 (7)
- Java (51)
- Java Concurrency (2)
- IDE (16)
- Linux (46)
- Database (23)
- NoSQL (35)
- Web服务器 (23)
- Log日志 (11)
- HTTP (11)
- HTML (2)
- XML (1)
- Test (7)
- Mina (0)
- Amoeba (4)
- Cobar (1)
- 序列化 (2)
- Python (5)
- PHP (1)
- Socket通信 (1)
- Network (3)
- Struts (2)
- Web前端 (10)
- Maven (6)
- SVN (15)
- Json (1)
- XMPP (2)
- Go (1)
- Other (4)
- 未整理 (5)
最新评论
-
u012374672:
[color=darkred][/color][flash=2 ...
Mongo的ORM框架的学习Morphia(annotations) -
b_l_east:
很有问题啊
利用redis的transaction功能,实现分布式下加锁
使用jedis java客户端
一:一个简单的示例代码:
- public static void main(String[] args) {
- Jedis jedis = new Jedis( "147.151.240.234" , 6379 );
- jedis.set("foo" , "bar" );
- String value = jedis.get("foo" );
- System.out.println(value);
-
}
二:spring中配置 :
首先,在项目中引入jeids的jar包。
- <!-- java readis客户端 -->
- < dependency >
- < groupId > redis.clients </ groupId >
- < artifactId > jedis </ artifactId >
- < version > 2.0.0 </ version >
- </ dependency >
其次,在spring配置文件中添加配置(也可以直接new出这些对象,一样的)
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxActive" value="50" /> <property name="maxIdle" value="10" /> <property name="maxWait" value="1000" /> <property name="testOnBorrow" value="true"/> </bean> <bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="这里填你的reids服务器ip" /> <constructor-arg index="1" value="6379" /> </bean> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1"> <list> <ref bean="jedis.shardInfo" /> </list> </constructor-arg> </bean>
最后,调用的时候
- ShardedJedis jedis = shardedJedisPool.getResource();
- jedis.get(key); //从redis服务器获取值
- jedis.set(key, value); //将值保存到redis服务器
jedis pool的问题
在使用jedis pool时遇到了这个问题:It seems like server has closed the connection
原因分析:
1.redis server 关闭了此客户端的连接:server端设置了maxidletime(默认是5分钟),服务端会不断循环检测clinet的最后一次通信时间(lastinteraction),如果大于maxidletime,则关闭连接,并回收相关资源。client在向该连接中写数据后就会由于server端已经关闭而出现 broken pipe的问题。
2.pool的设置错误:
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxActive" value="20" /> <property name="maxIdle" value="10" /> <property name="maxWait" value="1000" /> </bean> <!-- jedis shard信息配置 --> <bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="*.*.*.*" /> <constructor-arg index="1" value="6379" /> </bean> <!-- jedis shard pool配置 --> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1"> <list> <ref bean="jedis.shardInfo" /> </list> </constructor-arg> </bean> <bean id="jedisCommands" factory-bean="shardedJedisPool" factory-method="getResource" />
上面的这种配法在spring初始化时获取一次实例化jedisCommands,而后每次的redis的调用时并未从pool中获取
解决方案:
设置
<!-- POOL配置 --> <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxActive" value="20" /> <property name="maxIdle" value="10" /> <property name="maxWait" value="1000" /> <property name="testOnBorrow" value="true"/> </bean> <!-- jedis shard信息配置 --> <bean id="jedis.shardInfo" class="redis.clients.jedis.JedisShardInfo"> <constructor-arg index="0" value="*.*.*.*" /> <constructor-arg index="1" value="6379" /> </bean> <!-- jedis shard pool配置 --> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1"> <list> <ref bean="jedis.shardInfo" /> </list> </constructor-arg> </bean>
最近初次尝试使用redis,java客户端采用的jedis,写了几个简单的类满足基本的服务器配置,以及客户端对象的使用等。
客户端对象的创建
- package jediscache.common;
- import redis.clients.jedis.Jedis;
- import redis.clients.jedis.JedisPool;
- import redis.clients.jedis.JedisPoolConfig;
- import redis.clients.jedis.Protocol;
- public class JedisFactory {
- private JedisPoolConfig jedisPoolConfig;
- private JedisPool jedisPool;
- public JedisFactory(JedisPoolConfig jedisPoolConfig) {
- super ();
- this .jedisPoolConfig = jedisPoolConfig;
- }
- public Jedis getJedisInstance(String host) {
- return getJedisPool(host, Protocol.DEFAULT_PORT).getResource();
- }
- public Jedis getJedisInstance(String host, int port) {
- return getJedisPool(host, port).getResource();
- }
- public JedisPool getJedisPool(String host) {
- return getJedisPool(host, Protocol.DEFAULT_PORT);
- }
- public JedisPool getJedisPool(String host, int port) {
- if (jedisPool == null ) {
- jedisPool = new JedisPool(jedisPoolConfig, host, port);
- }
- return jedisPool;
- }
- /**
- * 配合使用getJedisInstance方法后将jedis对象释放回连接池中
- *
- * @param jedis 使用完毕的Jedis对象
- * @return true 释放成功;否则返回false
- */
- public boolean release(Jedis jedis) {
- if (jedisPool != null && jedis != null ) {
- jedisPool.returnResource(jedis);
- return true ;
- }
- return false ;
- }
- }
使用客户端对象
-
public
void
testLpush() {
-
JedisFactory factory = new
JedisFactory(
new
JedisPoolConfig());
-
Jedis jedis = factory.getJedisInstance("localhost"
);
-
-
try
{
-
String word = "word"
;
-
jedis.lpush(word, "first"
);
-
jedis.lpush(word, "second"
);
-
jedis.lpush(word, "three"
);
-
System.out.println("word : "
+ jedis.lrange(word,
0
, -
1
));
-
} finally
{
-
factory.release(jedis);
-
}
-
}
- public void testLpush() {
- JedisFactory factory = new JedisFactory( new JedisPoolConfig());
- Jedis jedis = factory.getJedisInstance("localhost" );
- try {
- String word = "word" ;
- jedis.lpush(word, "first" );
- jedis.lpush(word, "second" );
- jedis.lpush(word, "three" );
- System.out.println("word : " + jedis.lrange(word, 0 , - 1 ));
- } finally {
- factory.release(jedis);
- }
- }
发表评论
-
mongodb 地理位置处理
2016-05-16 13:39 1419我只记录我用到的部分,没有完整分析mongodb对地理位置 ... -
Redis配置文件redis.conf
2014-11-14 14:10 1868# Redis configuration file ex ... -
Redis高可用部署及监控
2014-11-12 13:25 1097一、 Re ... -
JCS官方文档的简单笔记,仅供自己参考
2014-09-26 20:08 7791. 基本配置 jcs.default=DCjcs.de ... -
JCS基本配置
2014-09-26 19:39 9431、默认的内存缓存 ... -
NoSQL解决方案比较(MongoDB vs Redis, Tokyo Cabinet, and Berkeley DB)
2013-09-30 14:20 1341NoSQL解决方案比较 NoSQL Solution: E ... -
morphia与spring的整合
2012-12-07 15:06 1484转自: http://www.blogjava.net/wat ... -
Mongo的ORM框架的学习Morphia(十五)Morphia+spring整合
2012-12-07 15:06 1657转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(十二) morphia的Query和Update
2012-12-07 15:06 1875转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(十) morphia应用
2012-12-05 14:47 1462转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(九) morphia简单使用
2012-12-05 14:44 1380转自 http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(八) morphia数据库访问接口
2012-12-05 14:35 2019转自:http://topmanopensource.itey ... -
Mongo的ORM框架的学习Morphia(annotations)
2012-12-05 14:33 2543一:@Entity的使用 @Entity ... -
Instagram的Redis实践(内存占用优化)
2012-11-30 10:43 1201转自:http://blog.nosqlfan.com/htm ... -
SQL 和Mongo 对比图表
2012-11-28 14:54 2209参看官方说明: http://www.mongodb ... -
MongoDB 入门指南、示例
2012-11-23 10:38 854转自:http://www.cnblogs.com/hoojo ... -
mongodb中使用MapReduce
2012-11-23 10:12 1213MapReduce函数的用法如下: db.users.ma ... -
python的redis用法
2012-11-22 15:48 1170#! /usr/bin/env python #coding ... -
Python连接redis
2012-11-22 15:46 5621一、Redis是流行的NOSQL内存数据库,以Key-Valu ... -
【pipeline】【分布式的id生成器】【分布式锁【watch】【multi】】【redis分布式】
2012-08-29 10:42 1376转自 http://www.bwkeji.com/a/wang ...
相关推荐
一个简单java客户端Jedis,大家可以到https://github.com/xetorthio/jedis这网址下载相关源码 这里对其进行一个简单封转 包括key valye set list hashset的封装
Redis的官方推荐Java客户端——Jedis 此Jar包为Jedis 2.9.0版(2016年7月22日发布) 支持Redis 3.0 (亲测有效) 使用方法: import redis.clients.jedis.Jedis; Jedis jedis = new Jedis("localhost"); jedis.set...
**Redis的Java客户端Jedis详解** Redis是一款高性能的键值对数据存储系统,常用于缓存、消息中间件等场景。而Jedis是Redis官方推荐的Java语言客户端,提供了丰富的API来与Redis服务器进行交互。在2018年6月10日,...
Java客户端Jedis是Redis官方推荐的Java语言接口库,它提供了丰富的API来操作Redis服务器。Jedis 2.9.0是该库的一个稳定版本,适用于各种Java项目与Redis服务器进行交互。 在Jedis 2.9.0版本中,主要包含了以下功能...
Jedis是Redis的Java客户端,它提供了一个丰富的API来操作Redis数据存储系统。Redis是一个高性能的键值数据库,常用于缓存、消息中间件以及数据结构服务器等场景。Jedis作为Java开发者与Redis交互的主要工具,使得在...
在Java开发中,我们通常使用Jedis作为客户端库来与Redis进行交互。本文将深入探讨Redis、Jedis以及Spring Data Redis这三个核心概念,并结合提供的jar包版本,解析它们在实际开发中的应用。 首先,Redis是一个开源...
spring_redis集成,通过jedis作为redis的客户端。 只提供集成方式,具体api,参照jedis API
通过上述内容,我们了解了Redis的Java客户端Jedis池的基本概念、配置和使用。在实际开发中,正确使用JedisPool能够显著提升应用性能,同时降低资源消耗。在设计系统时,应充分考虑连接池的管理,确保系统的稳定性和...
Jedis是Java社区中最常用的Redis客户端库,它提供了丰富的API来操作Redis服务器。本示例将详细介绍如何在Java应用中使用Jedis进行基本操作。 首先,我们需要在项目中引入Jedis的依赖。如果你使用的是Maven,可以在...
4. **Jedis**:Jedis是Java语言的Redis客户端库,它提供了丰富的API,使Java开发者能够方便地与Redis进行交互。Jedis支持各种Redis命令,包括数据类型操作、事务处理、发布/订阅、持久化等。在实际项目中,通过Jedis...
Java开发人员通常选择Jedis作为与Redis交互的客户端库,因为其简单易用且功能强大。本文将详细介绍如何使用Jedis在Java环境中连接和操作Redis。 ### 一、Jedis简介 Jedis是Java开发的Redis官方推荐的客户端,它...
Jedis是Redis官方推荐的Java客户端,它提供了一套完整的Redis命令实现。虽然Spring Data Redis提供了更高级别的抽象,但有时直接使用Jedis可以实现更复杂的操作或优化性能。Jedis支持连接池,以提高并发性能。如果你...
* redis主从架构的jedis客户端管理类,大概1000多行代码左右 * 1 支持主从复制key/value,pop/push,pub/sub,读/写分离等功能的灾难失败自动选择和恢复 * 2 可以选择读写分离功能,主写从读,默认不启用,都使用主服务...
Java连接Redis时,通常会使用Jedis作为客户端库,因为它是一个简单、高效的Redis客户端。标题中的"java连接Redis所需jedis客户端包(jedis2.7+commons-pool2)"指的是在Java环境中,为了实现与Redis数据库的交互,我们...
总之,Jedis作为Redis的Java客户端,为开发者提供了便捷、高效的接口,是Java开发者与Redis交互的首选工具。通过深入理解和熟练使用Jedis,你可以充分发挥Redis在数据存储和处理方面的强大能力。
总的来说,Jedis作为Redis的Java客户端,提供了全面且高效的Redis操作接口,是Java开发者在进行Redis相关开发时的首选工具。在实际项目中,结合连接池管理和适当的配置调整,可以确保应用程序在处理大量并发请求时...
Java调用Redis工具类Jedis是Java开发人员在与Redis进行数据交互时常用的库。Redis是一个高性能的...通过理解并熟练运用这些知识点,你将能够有效地使用Java通过Jedis与Redis进行数据交互,实现高效的数据存储和读取。
* redis主从架构的jedis客户端管理类,大概1000行代码左右 * 1 支持主从复制key/value,pop/push,pub/sub,读/写分离等功能的灾难失败自动选择和恢复 * 2 可以选择读写分离功能,主写从读,默认不启用,都使用主服务进行...
接下来,我们关注Java客户端与Redis的交互。Java提供了多种Redis客户端库,如Jedis、Lettuce等,这里以常用的Jedis为例: 1. 添加依赖:在你的项目中,需要添加Jedis的依赖库。如果是Maven项目,可以在pom.xml中...
在Java开发环境中,为了使用Jedis与Redis进行交互,我们需要引入相应的jar包。这些jar包通常包含了Jedis库本身和其依赖的其他库,如连接池管理、网络通信等组件。"Redis4JavaDev"这个压缩包很可能包含了这些必要的...