一.项目目录
JedisClient.java
package com.taotao.rest.dao;
public interface JedisClient {
/**
* 获取String数据类型
* @param key
* @return
*/
String get(String key);
/**
* 设置String数据类型
* @param key
* @param value
* @return
*/
String set(String key, String value);
/**
* 获取hash数据类型
* 首页内容信息在redis中保存的key
* @param hkey :首页内容信息在redis中保存的key
* @param key
* @return
*/
String hget(String hkey, String key);
/**
* 设置hash数据类型
* @param hkey:首页内容信息在redis中保存的key
* @param key: key
* @param value: value
* @return
*/
long hset(String hkey, String key, String value);
long incr(String key);
long decr(String key);
/**
* 注入生存时间
* @param key
* @param second
* @return
*/
long expire(String key, int second);
/**
* 设置key的过期时间
* @param key
* @return
*/
long ttl(String key);
/**
* 删除key
* @param key
* @return
*/
long del(String key);
/**
* 删除hash数据
* @param hkey
* @param key
* @return
*/
long hdel(String hkey, String key);
}
package com.taotao.rest.dao.impl;
import org.springframework.beans.factory.annotation.Autowired;
import com.taotao.rest.dao.JedisClient;
import redis.clients.jedis.JedisCluster;
/**
* 集群版redis
* @Title: JedisClientCluster
* @author xwp
* @date 2017年1月17日下午3:40:17
*/
public class JedisClientCluster implements JedisClient {
@Autowired
private JedisCluster jedisCluster;
@Override
public String get(String key) {
return jedisCluster.get(key);
}
@Override
public String set(String key, String value) {
return jedisCluster.set(key, value);
}
@Override
public String hget(String hkey, String key) {
return jedisCluster.hget(hkey, key);
}
@Override
public long hset(String hkey, String key, String value) {
return jedisCluster.hset(hkey, key, value);
}
@Override
public long incr(String key) {
return jedisCluster.incr(key);
}
@Override
public long decr(String key) {
return jedisCluster.decr(key);
}
@Override
public long expire(String key, int second) {
return jedisCluster.expire(key, second);
}
@Override
public long ttl(String key) {
return jedisCluster.ttl(key);
}
@Override
public long del(String key) {
return jedisCluster.del(key);
}
@Override
public long hdel(String hkey, String key) {
return jedisCluster.hdel(hkey, key);
}
}
package com.taotao.rest.dao.impl;
import org.springframework.beans.factory.annotation.Autowired;
import com.taotao.rest.dao.JedisClient;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
/**
* 单机版redis
* @Title: JedisClientSingle
* @author xwp
* @date 2017年1月17日下午3:40:03
*/
public class JedisClientSingle implements JedisClient{
@Autowired
private JedisPool jedisPool;
@Override
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String string = jedis.get(key);
jedis.close();
return string;
}
@Override
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String string = jedis.set(key, value);
jedis.close();
return string;
}
@Override
public String hget(String hkey, String key) {
Jedis jedis = jedisPool.getResource();
String string = jedis.hget(hkey, key);
jedis.close();
return string;
}
@Override
public long hset(String hkey, String key, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(hkey, key, value);
jedis.close();
return result;
}
@Override
public long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}
@Override
public long decr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.decr(key);
jedis.close();
return result;
}
@Override
public long expire(String key, int second) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, second);
jedis.close();
return result;
}
@Override
public long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
}
@Override
public long del(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.del(key);
jedis.close();
return result;
}
@Override
public long hdel(String hkey, String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(hkey, key);
jedis.close();
return result;
}
}
applicationContext-jedis.xml
package com.taotao.rest.service.impl;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.taotao.common.util.JsonUtils;
import com.taotao.mapper.TbContentMapper;
import com.taotao.pojo.TbContent;
import com.taotao.pojo.TbContentExample;
import com.taotao.pojo.TbContentExample.Criteria;
import com.taotao.rest.dao.JedisClient;
import com.taotao.rest.service.ContentService;
/**
* 内容分类ServiceImpl
* @Title: ContentServiceImpl
* @author xwp
* @date 2017年1月14日下午11:31:56
*/
@Service
public class ContentServiceImpl implements ContentService {
@Autowired
private TbContentMapper contentMapper;
@Autowired
private JedisClient jedisClient;
@Value("${INDEX_CONTENT_REDIS_KEY}")
private String INDEX_CONTENT_REDIS_KEY;
@Value("${REDIS_ITEM_EXPIRE}")
private int REDIS_ITEM_EXPIRE;
@Override
public List getContentList(long contentCid) {
//添加key= "id"
String id = "" + contentCid;
//添加redis的有效时间
jedisClient.expire(INDEX_CONTENT_REDIS_KEY, REDIS_ITEM_EXPIRE);
//从缓存中取内容
try {
//从redis缓存中获取key="id "的value的值
String result = jedisClient.hget(INDEX_CONTENT_REDIS_KEY, contentCid + "");
//System.out.println("contentCid1 : " + id + " \there1 : " + jedisClient.ttl(INDEX_CONTENT_REDIS_KEY));
if (!StringUtils.isBlank(result)) {
//把字符串转换成list
List resultList = JsonUtils.jsonToList(result, TbContent.class);
return resultList;
}
} catch (Exception e) {
e.printStackTrace();
}
//根据内容分类id查询内容列表
TbContentExample example = new TbContentExample();
Criteria criteria = example.createCriteria();
criteria.andCategoryIdEqualTo(contentCid);
//执行查询
List list = contentMapper.selectByExample(example);
//向缓存中添加内容
try {
//把list转换成字符串
String cacheString = JsonUtils.objectToJson(list);
//System.out.println("contentCid : " + id + " \there : " + jedisClient.ttl(INDEX_CONTENT_REDIS_KEY));
//如果该key不存在,返回-2,如果该key未设置存活时间,返回-1,如果设置过存活时间,则返回剩余的存活秒数
/**
* 如果没有超时,则设置hash数据
*/
if (jedisClient.ttl(INDEX_CONTENT_REDIS_KEY) < 0) {
jedisClient.hset(INDEX_CONTENT_REDIS_KEY, contentCid + "", cacheString);
}else {
/**
* 如果超时,则删除
*/
jedisClient.hdel(INDEX_CONTENT_REDIS_KEY, id);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
添加redis的同步:
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.taotao.common.pojo.EUDataGridResult;
import com.taotao.common.util.HttpClientUtil;
import com.taotao.common.util.TaotaoResult;
import com.taotao.mapper.TbContentMapper;
import com.taotao.pojo.TbContent;
import com.taotao.pojo.TbContentExample;
import com.taotao.pojo.TbContentExample.Criteria;
import com.taotao.service.ContentService;
/**
* 内容分类ServiceImpl
* @Title: ContentServiceImpl
* @author xwp
* @date 2017年1月14日下午11:31:56
*/
@Service
public class ContentServiceImpl implements ContentService {
@Autowired
private TbContentMapper contentMapper;
@Value("${REST_BASE_URL}")
private String REST_BASE_URL;
@Value("${REST_CONTENT_SYNC_URL}")
private String REST_CONTENT_SYNC_URL;
@Override
public TaotaoResult insertContent(TbContent content) {
//补全pojo内容
content.setCreated(new Date());
content.setUpdated(new Date());
contentMapper.insert(content);
//添加redis缓存同步逻辑
try {
HttpClientUtil.doGet(REST_BASE_URL + REST_CONTENT_SYNC_URL + content.getCategoryId());
} catch (Exception e) {
e.printStackTrace();
}
return TaotaoResult.ok();
}
}