关于redis缓存时间过期处理 ----在项目中的使用


一.项目目录


二.关于redis处理类

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



	
	
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	
	
	
	
	
	
		
			
				
					
					
				
				
					
					
				
				
					
					
				
				
					
					
				
				
					
					
				
				
					
					
				
			
		
		
	
	

相关redis的操作处理,请看我另外的博文:

在相关的serviceImpl中的操作例子

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();
	}
}





你可能感兴趣的:(linux)