Redis应用流程
展示流程: 先从缓存取 ,如果不存在 ,从数据库取出来,写入缓存,再返回页面;如果存在key ,直接从缓存中取出来,展示到页面。
同步缓存:当事务提交(更新,删除,插入)后,需要同步缓存,直接根据Key 删除redis的key(清空缓存) ,再展示时 由上边的流程展示。
同步缓存:
package com.taotao.content.service.impl; import java.util.Date; 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.pojo.TaotaoResult; import com.taotao.common.utils.JsonUtils; import com.taotao.content.jedis.JedisClient; import com.taotao.content.service.ContentService; import com.taotao.mapper.TbContentMapper; import com.taotao.pojo.TbContent; import com.taotao.pojo.TbContentExample; import com.taotao.pojo.TbContentExample.Criteria; @Service public class ContentServiceImpl implements ContentService { @Autowired private JedisClient client; @Autowired private TbContentMapper mapper; @Value("${CONTENT_KEY}") private String CONTENT_KEY; @Override public TaotaoResult saveContent(TbContent content) { // 1.注入mapper // 2.补全其他的属性 content.setCreated(new Date()); content.setUpdated(content.getCreated()); // 3.插入内容表中 mapper.insertSelective(content); // 当需要添加内容是,需要情况此内容所属分类下的所有缓存 try { client.hdel(CONTENT_KEY, content.getCategoryId() + ""); System.out.println("当插入时,清空缓存!!!!!!!!!!"); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } return TaotaoResult.ok(); } @Override public List<TbContent> getTbContentByCategoryId(Long categoryId) { // TODO Auto-generated method stub // 添加缓存不能影响正常的业务逻辑 // 判断 是否redis中有数据 如果有 直接从redis中获取数据 返回 try { String jsonstr = client.hget(CONTENT_KEY, categoryId + "");// 从redis数据库中获取内容分类下的所有的内容。 // 如果存在,说明有缓存 if (StringUtils.isNotBlank(jsonstr)) { System.out.println("这里有缓存啦!!!!!"); return JsonUtils.jsonToList(jsonstr, TbContent.class); } } catch (Exception e1) { e1.printStackTrace(); } // 根据cidchax TbContentExample example = new TbContentExample(); // 设置查询条件 Criteria createCriteria = example.createCriteria(); createCriteria.andCategoryIdEqualTo(categoryId); // 执行查询 List<TbContent> list = mapper.selectByExample(example); // 返回 // 将数据写入到redis数据库中 // 注入jedisclient // 调用方法写入redis key - value try { System.out.println("没有缓存!!!!!!"); client.hset(CONTENT_KEY, categoryId + "", JsonUtils.objectToJson(list)); } catch (Exception e) { e.printStackTrace(); } return list; } }
redis.properties
CONTENT_KEY=TBCONTENT_KEY