redis整合spring

一、代碼編寫

package cn.sp.component;

public interface JedisClient {
	public String set(String key,String value);
	public String get(String key);
	public Long hset(String key,String item,String value);
	public String hget(String key,String item);
	//刪除
	public Long del(String key);
	
	
}

package cn.sp.component.imp;

import org.springframework.beans.factory.annotation.Autowired;

import cn.sp.component.JedisClient;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

public class JedisClientImpl implements JedisClient {
	@Autowired
	private JedisPool jedisPool;
	
	@Override
	public String set(String key, String value) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.set(key, value);
		jedis.close();
		return result;
	}
	@Override
	public String get(String key) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.get(key);
		jedis.close();
		return result;
	}
	@Override
	public Long hset(String key, String item, String value) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.hset(key, item, value);
		jedis.close();
		return result;
	}
	@Override
	public String hget(String key, String item) {
		Jedis jedis = jedisPool.getResource();
		String result = jedis.hget(key, item);
		jedis.close();
		return result;
	}

	@Override
	public Long del(String key) {
		Jedis jedis = jedisPool.getResource();
		Long result = jedis.del(key);
		jedis.close();
		return result;
	}

}
@Resource
	private JedisClient jedisClient;
	
	
	@RequestMapping(value="index")
	public String index(@RequestParam(value="page",required=false)String page,@RequestParam(value="typeId",required=false)String typeId,
			@RequestParam(value="releaseDateStr",required=false)String releaseDateStr,ModelMap m,HttpServletRequest request){
		Gson gson = new Gson();
		if (StringUtils.isBlank(page)) {
			page = "1";
		}
		Map<String, Object> map = new HashMap<String,Object>();
		
		PageBean pageBean = new PageBean(Integer.parseInt(page),10);
		map.put("size", pageBean.getPageSize());
		map.put("start", pageBean.getStart());
		map.put("typeId", typeId);
		map.put("releaseDateStr", releaseDateStr);
		
		//先從緩存中取數據
		String json2 = jedisClient.hget(Constant.REDIS_LIST, page);
		Type type = new TypeToken<ArrayList<Blog>>(){}.getType();
		List<Blog> bloglist2 = gson.fromJson(json2, type);
		if(bloglist2 != null &&  bloglist2.size() > 0 &&  StringUtil.isEmpty(typeId) && StringUtil.isEmpty(releaseDateStr)){//搜索條件爲空時
			m.put("blogList", bloglist2);
			
		}else{
			
			List<Blog> blogList = blogService.list(map);
			//使用jsoup抓取圖片
			for (Blog blog : blogList) {
				String content = blog.getContent();
				Document doc = Jsoup.parse(content);
				Elements jpgs = doc.select("img[src$=.jpg]");
				List<String> imageList = blog.getImageList();
				for(int i=0 ; i<jpgs.size() ; i++){
					Element jpg = jpgs.get(i);
					
					imageList.add(jpg.toString());
					if (i == 2) {
						//最多三個圖
						break;
					}
				}
					
			}
			
			//將blogList加入緩存,當搜索條件爲空時
			if(StringUtil.isEmpty(typeId) && StringUtil.isEmpty(releaseDateStr)){
				String json = gson.toJson(blogList);
				jedisClient.hset(Constant.REDIS_LIST, page, json);
			}
			
			m.put("blogList", blogList);
		}
		
		
		//先判斷有無
		String result = jedisClient.hget(Constant.REDIS_KEY, page);
		if(StringUtil.isNotEmpty(result)){
			m.put("pageCode", result);
		}else{
			//跳轉的url
			String url =request.getContextPath()+"/index.html";
			
			//總記錄數
			Long totalNum = blogService.getTotal(map);
			
			StringBuffer param = new StringBuffer();
			//分頁條件回顯
			if (StringUtils.isNotBlank(typeId)) {
				param.append("typeId="+typeId+"&");
			}
			
			if (StringUtils.isNotBlank(releaseDateStr)) {
				param.append("releaseDateStr="+releaseDateStr);
			}
			
			//生成分頁html
			String pageCode = PageUtil.genPagination(url, totalNum, Integer.parseInt(page), 10, param.toString());
			//放入redis緩存,以當前頁沒 item
			jedisClient.hset(Constant.REDIS_KEY, page, pageCode);
			m.put("pageCode", pageCode);
		}
		
		
		m.put("mainPage", "/front/common/list.jsp");
		
		m.put("title", "開源博客系統");
		return "index";
	}

谷歌的gson就是強大。這裏把分頁數據和分頁html代碼放進了redis緩存中。

二、applicationContext.xml

2.1單機版

<!-- jedis配置 -->
    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
    	<constructor-arg name="host" value="192.168.75.129"></constructor-arg>
    	<constructor-arg name="port" value="6379" ></constructor-arg>
    </bean>
    <bean id="jedisClient" class="cn.sp.component.imp.JedisClientImpl"></bean>

結果使用ab壓力測試結果,不加緩存的情況1000次請求10個併發,共需要16s,加緩存後大概只要5s的時間。

刷新緩存的話,只需要刪除對應的key即可。

2.2集羣版配置

<!-- 配置redis客戶端集羣版 -->
	<!-- <bean id="jedisCluster" class="redis.clients.jedis.JedisCluster">
		<constructor-arg>
			<set>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7001"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7002"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7003"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7004"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7005"/>
				</bean>
				<bean class="redis.clients.jedis.HostAndPort">
					<constructor-arg name="host" value="192.168.25.153"/>
					<constructor-arg name="port" value="7006"/>
				</bean>
			</set>
		</constructor-arg>
	</bean>
	<bean id="jedisClientCluster" class="com.taotao.rest.component.impl.JedisClientCluster"/> -->


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章