查询优化的一些经验

  1、加缓存

  2、list里面需要组装不同的bean,这些bean需要分别查询数据库或缓存,可以查询完之后,建一个5分钟的缓存,下次查,直接从缓存中取

  3、读写分离

http://lvwenwen.iteye.com/blog/1486939

  4、tomcat数据源jndi

package com.moji.article.web.pattern;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import com.moji.article.service.ArticleService;
import com.moji.article.service.ArticleStatService;
import com.moji.article.web.pattern.ArticleDetailResBean.ArticleResBean;
import com.moji.sns.common.constant.article.ArticleMemcachePoolValues;
import com.moji.util.common.LocaleUtil;

public class ArticleListByIdsStrategyImpl implements ArticleListByIdsStrategy {

    private ArticleDetailStrategy articleDetailStrategy;
    private ArticleService articleService;

    @Override
    public ArticleListByIdsResBean listByIds(ArticleListByIdsReqForm form) {
        ArticleListByIdsResBean resBean = new ArticleListByIdsResBean();
        resBean.setCode(0);

        List<Long> articleIdList = form.getParams().getArticle_id_list();
        Integer lanId = Integer.parseInt(LocaleUtil.getLocaleByLanguageKey(form
                .getCommon().getLanguage()));
        Long snsId = form.getCommon().getSnsid();

        // 查5分钟缓存的memCache是否存在
        List<ArticleDetailResBean.ArticleResBean> articleBeanList = getFromMem();
        if (articleBeanList != null) {
            resBean.setArticle_list(articleBeanList);
            return resBean;
        }
        
        
        articleBeanList = new ArrayList<ArticleDetailResBean.ArticleResBean>();
        for (Long articleId : articleIdList) {
            ArticleDetailResBean.ArticleResBean articleBean = articleDetailStrategy
                    .format(articleId, lanId, snsId);
            if (articleBean != null
                    && articleBean.getDel_status().intValue() == ArticleStatService.STAT_NOT_DEL
                            .intValue()) {
                articleBeanList.add(articleBean);
            }
        }
        // 存5分钟缓存
        setToMem(articleBeanList);
        resBean.setArticle_list(articleBeanList);
        return resBean;
    }
    
    private void setToMem(List<ArticleDetailResBean.ArticleResBean> articleBeanList){
        articleService.setBeanToMem(
                ArticleListByIdsStrategy.ARTICLE_DEATIL_RES_BEAN_KEY,
                ArticleMemcachePoolValues.LATEST_MEMCACHE_POOL_ARTICLE,
                articleBeanList, new Date(1000 * 60 * 5));
    }
    
    private List<ArticleDetailResBean.ArticleResBean> getFromMem(){
        @SuppressWarnings("unchecked")
        List<ArticleDetailResBean.ArticleResBean> articleBeanList = (List<ArticleResBean>) articleService
                .getBeanFormMemcache(
                        ArticleListByIdsStrategy.ARTICLE_DEATIL_RES_BEAN_KEY,
                        ArticleMemcachePoolValues.LATEST_MEMCACHE_POOL_ARTICLE,
                        List.class);
        return articleBeanList;
    }
    public void setArticleService(ArticleService articleService) {
        this.articleService = articleService;
    }

    public void setArticleDetailStrategy(
            ArticleDetailStrategy articleDetailStrategy) {
        this.articleDetailStrategy = articleDetailStrategy;
    }
}
原文地址:https://www.cnblogs.com/fubaizhaizhuren/p/5442027.html