java web redis_java web redis使用(二)

上篇中已经安装好redis,然后下面就说怎么在java web中用客户端来使用regis

使用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包。

Xml代码   32ff6be27139ecbebe519f711b6fa0e1.png

 redis.clients  groupId >

 jedis  artifactId >

 2.0.0  version >

 dependency >

其次,在spring配置文件中添加配置(也可以直接new出这些对象,一样的)

Xml代码  f9342fe7371c7583cab85deaba755730.png

最后,调用的时候

Java代码   32ff6be27139ecbebe519f711b6fa0e1.png

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的设置错误:

Xml代码  f9342fe7371c7583cab85deaba755730.png

;!-- jedis shard信息配置 -->

factory-method="getResource" />

上面的这种配法在spring初始化时获取一次实例化jedisCommands,而后每次的redis的调用时并未从pool中获取

解决方案:

设置

Xml代码  f9342fe7371c7583cab85deaba755730.png

最近初次尝试使用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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值