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代碼???
?redis.clients??groupId?>
?jedis??artifactId?>
?2.0.0??version?>
?dependency?>
其次,在spring配置文件中添加配置(也可以直接new出這些對象,一樣的)
Xml代碼??
最后,調用的時候
Java代碼???
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代碼??
;!--?jedis?shard信息配置?-->
factory-method="getResource"?/>
上面的這種配法在spring初始化時獲取一次實例化jedisCommands,而后每次的redis的調用時并未從pool中獲取
解決方案:
設置
Xml代碼??
最近初次嘗試使用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);
}
}
總結
以上是生活随笔為你收集整理的java web redis_java web redis使用(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机贡共享,做点小贡献,计算机、控制面
- 下一篇: java中no1_【Java】-- 网络