轉載自:http://blog.csdn.net/jesting1988/article/details/55803915
一:導入依賴
<dependency>
<groupId>Redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
二:簡單示例
public class JedisDemo{
public static void main(String [ ] args){
//創建jedis對象
Jedis jedis=new Jedis("127.0.0.1",6379);
//向redis中添加數據
jedis.set("mytest","123");
//從redis中讀取數據
String value=jedis.get("mytest");
//關閉連接
jedis.close();
}
}
三:連接池的使用
public class JedisPoolDemo{
public static void main(String [] args){
//構建連接池配置信息
JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
//設置最大連接數
jedisPoolConfig.setMaxTotal(50);
//從連接池中獲取連接
Jedis jedis=jedisPool.getResource();
//從redis中讀取數據
String value=jedis.get("mytest");
//將連接還到連接池中
jedisPool.returnResource(jedis);
//釋放連接池
jedisPool.close();
}
}
四:分片式集羣的使用
1.1.1. 分片式集羣的使用
publicclass ShardedJedisPoolDemo {
publicstaticvoid main(String[]args) {
// 構建連接池配置信息
JedisPoolConfig poolConfig =new JedisPoolConfig();
// 設置最大連接數
poolConfig.setMaxTotal(50);
// 定義集羣信息
List<JedisShardInfo> shards =newArrayList<JedisShardInfo>();
shards.add(new JedisShardInfo("127.0.0.1", 6379));
shards.add(new JedisShardInfo("192.168.29.112", 6379));
// 定義集羣連接池
ShardedJedisPool shardedJedisPool =new ShardedJedisPool(poolConfig,shards);
ShardedJedis shardedJedis =null;
try {
// 從連接池中獲取到jedis分片對象
shardedJedis = shardedJedisPool.getResource();
// for (int i = 0; i < 100;i++) {
// shardedJedis.set("key_" + i, "value_" + i);
// }
System.out.println(shardedJedis.get("key_49"));
System.out.println(shardedJedis.get("key_7"));
} catch (Exceptione) {
e.printStackTrace();
} finally {
if (null !=shardedJedis) {
// 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態
shardedJedis.close();
}
}
// 關閉連接池
shardedJedisPool.close();
}
}
五:將jedis集成到項目中(一)添加依賴
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.6.0</version>
</dependency>
(二)spring和jedis的整合
<!—連接池的配置-->
<bean id =”jedisPoolConfig” class=”redis.clients.jedis.JedisPoolConfig”>
<!—設置最大連接數-->
<propertyname=”maxTotal” value=”${redis.maxTotal}”/>
<!--分片式連接池-->
<bean class=”redis.clients.jedis.ShardedJedisPool”>
<constructor-argindex=”0” ref=”jedisPoolConfig”/>
<constructor-argindex=”1”>
<list>
<beanclass=”redis.clients.jedis.JedisSharedInfo”>
<constructor-argindex=”0” value=”${redis.node1.ip}”/>
<constructor-argindex=”1” value=”${redis.node1.port}”/>
</bean>
</list>
</constructor-arg>
</bean>
(三)封裝redisService
1.1.1. 封裝RedisService
package com.taotao.manage.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
@Service
publicclass RedisService {
@Autowired
private ShardedJedisPoolshardedJedisPool;
/**
* 執行set操作
*
* @param key
* @param value
* @return
*/
public String set(Stringkey, String value) {
ShardedJedis shardedJedis =null;
try {
// 從連接池中獲取到jedis分片對象
shardedJedis = shardedJedisPool.getResource();
returnshardedJedis.set(key,value);
} finally {
if (null !=shardedJedis) {
// 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態
shardedJedis.close();
}
}
}
/**
* 執行get操作
*
* @param key
* @return
*/
public String get(Stringkey) {
ShardedJedis shardedJedis =null;
try {
// 從連接池中獲取到jedis分片對象
shardedJedis = shardedJedisPool.getResource();
returnshardedJedis.get(key);
} finally {
if (null !=shardedJedis) {
// 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態
shardedJedis.close();
}
}
}
}
(四)優化redisservice定義接口
public interface Function<T,E>{
public T callback(E,e);
}
RedisService的實現:
package com.taotao.manage.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
@Service
publicclass RedisService {
@Autowired
private ShardedJedisPoolshardedJedisPool;
private <T> Texecute(Function<T, ShardedJedis>fun) {
ShardedJedis shardedJedis =null;
try {
// 從連接池中獲取到jedis分片對象
shardedJedis = shardedJedisPool.getResource();
returnfun.callback(shardedJedis);
} finally {
if (null !=shardedJedis) {
// 關閉,檢測連接是否有效,有效則放回到連接池中,無效則重置狀態
shardedJedis.close();
}
}
}
/**
* 執行set操作
*
* @param key
* @param value
* @return
*/
public String set(final String key, final Stringvalue) {
returnthis.execute(new Function<String, ShardedJedis>() {
@Override
public String callback(ShardedJedise) {
returne.set(key,value);
}
});
}
/**
* 執行get操作
*
* @param key
* @return
*/
public String get(final String key) {
returnthis.execute(new Function<String, ShardedJedis>() {
@Override
public String callback(ShardedJedise) {
returne.get(key);
}
});
}
/**
* 執行刪除操作
*
* @param key
* @return
*/
public Long del(final String key) {
returnthis.execute(new Function<Long, ShardedJedis>() {
@Override
public Long callback(ShardedJedise) {
returne.del(key);
}
});
}
/**
* 設置生存時間,單位爲:秒
*
* @param key
* @param seconds
* @return
*/
public Long expire(final String key, final Integerseconds) {
returnthis.execute(new Function<Long, ShardedJedis>() {
@Override
public Long callback(ShardedJedise) {
returne.expire(key,seconds);
}
});
}
/**
* 執行set操作並且設置生存時間,單位爲:秒
*
* @param key
* @param value
* @return
*/
public String set(final String key, final Stringvalue, final Integerseconds) {
returnthis.execute(new Function<String, ShardedJedis>() {
@Override
public String callback(ShardedJedise) {
String str = e.set(key,value);
e.expire(key,seconds);
returnstr;
}
});
}
}
(五)實現緩存邏輯
1.先從緩存中命中,命中則返回
2.沒有命中則把結果放入緩存中
public ItemCatResult queryItemCatList(){
//從緩存中命中
String key=“REDIS_KEY”;
String cacheData=this.redisService.get(key);
if(StringUtils.isNotEmpty(cacheData)){
try{
return MAPPER.readValue(cacheData,ItemCatResult.class);
}cache(Exception e){
e.printStatckTrace();
}
}
//如果沒有命中,則從數據庫中查找,並把結果寫入緩存中
try{
//將結果集寫入到緩存中
this.redisService.set(REDIS_KEY,MAPPER.writerValueAsString(result),REDIS_TIME);
}cache(Exception e){
e,printStatckTrace();
}
}