【Redisベース】Redisがプロジェクトで実戦


redis構築、クラスタ構築、多くは運維知識に属し、基本的に理解すればよい.しかし、プロジェクトがどのようにredisにその特技を発揮させるかは、私たちが把握し、探求する必要があります.次に、プロジェクトでredisをキャッシュする方法について説明します.
 
適用シーン
キャッシュはどのような状況で使用されますか??1つのプロジェクトでは、長い間変更されないデータもありますが、ユーザーは特に頻繁にアクセスします.このような場合はキャッシュが使われると思います.私たちのプロジェクトの使用状況から、この点をまとめました.
私たちのプロジェクトのトップページには大きな広告スペースがあります.そして、ユーザーが最初に訪問するのはトップページであることはよく知られています.だから、訪問が特に頻繁で、広告の交換も頻繁ではありません.だから、ここで使うのが適切だと思います.
 
キャッシュからデータを取り出す方法
第一に、まずキャッシュにそのデータがあるかどうかを判断し、ない場合はデータベースから取得し、フロントに戻りながらキャッシュに格納します.キャッシュにデータがある場合は、キャッシュ内のデータを直接返します.(一部のコードだけを切り取って、主にみんなに構想を説明します)
@Override
public List getContentList(Long cid) {
	//      ,      ,      
	try {
		String json = jedisClient.hget(REDIS_CONTENT_KEY, cid + "");
		if (!StringUtils.isEmpty(json)) {
			//  json     List
			List jsonToList = JsonUtils.jsonToList(json,
					TbContent.class);
			return jsonToList;
		}
	} catch (Exception e1) {
		e1.printStackTrace();
	}
	//           
	//   cid      
	TbContentExample example = new TbContentExample();
	Criteria criteria = example.createCriteria();
	criteria.andCategoryIdEqualTo(cid);
	//     
	List list = contentMapper.selectByExampleWithBLOBs(example);

	//          
	//   content      hash ,key REDIS_CONTENT_KEY
	//      item contentCid,value list(list    json)
	try {
		jedisClient.hset(REDIS_CONTENT_KEY, cid + "",
				JsonUtils.objectToJson(list));
	} catch (Exception e) {
		e.printStackTrace();
	}
	return list;
}

キャッシュ内のデータをデータベース内のデータと同期させる方法
最初に接触したとき、プロジェクトでredisをキャッシュすると、データが変化したときにどのようにredisのデータをデータベースと同期させるかという疑問がありました.いろいろな方法があるはずですが、私たちのプロジェクトでは次の方法を使っています.
 
バックグラウンドで大広告ビットのコンテンツを追加または変更または削除しながら、キャッシュ内の大広告ビットの情報を削除します.
/**
     *     
     * @param content
     * @return 
     */
    @RequestMapping("/save")
    @ResponseBody
    public TaotaoResult insertContent(TbContent content){
        TaotaoResult result = null;
        try {
	//        
            result = contentService.insertContent(content);
            
            //        
            jedisClient.hde(REST_BASE_URL+REST_CONTENT_SYNC_URL+content.getCategoryId());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

redisの機能は強力で、現在はredisがキャッシュする機能にしか触れていないが、他はまだ探求中だ.