redis搭建,集群搭建,多属于运维知识,基本了解就可以。但是在项目如何让redis发挥它的特长就属于我们需要掌握和探索的。接下来讲解一下在项目中如何使用redis来做缓存的。
适用场景
什么样的情况才会用到缓存呢??一个项目中有些数据长时间不会发生变动,但是用户又访问特别频繁。我觉得这样的情况会用到缓存。从我们项目的使用情况,我总结出来了这一点。
我们项目的首页上会有一些大的广告位,而且大家都知道用户最先访问的都会是首页,所以访问特别频繁,广告更换也不会很频繁,所以我们觉得用在这里挺合适的。
如何让数据从缓存中取到
第一,我们首先会判断缓存中是否有该数据,如果没有就从数据库中获取,返回给前台的同时存入到缓存一份儿。如果缓存中有数据,则直接返回缓存中的数据。(只截取一段儿代码,主要给大家讲解思路)
- @Override
- public List getContentList(Long cid) {
-
- try {
- String json = jedisClient.hget(REDIS_CONTENT_KEY, cid + "");
- if (!StringUtils.isEmpty(json)) {
-
- List jsonToList = JsonUtils.jsonToList(json,
- TbContent.class);
- return jsonToList;
- }
- } catch (Exception e1) {
- e1.printStackTrace();
- }
-
-
- TbContentExample example = new TbContentExample();
- Criteria criteria = example.createCriteria();
- criteria.andCategoryIdEqualTo(cid);
-
- List list = contentMapper.selectByExampleWithBLOBs(example);
-
-
-
-
- try {
- jedisClient.hset(REDIS_CONTENT_KEY, cid + "",
- JsonUtils.objectToJson(list));
- } catch (Exception e) {
- e.printStackTrace();
- }
- return list;
- }
如何让缓存中的数据与数据库中的保持同步
刚开始接触的时候,我有一个疑问,不知道大家有没有,就是在项目中如果使用redis做缓存的话,如果数据有变化的时候怎么让redis中的数据与数据库中的保持同步。应该会有很多种方法,我们项目中用的是下面这种方法。
在后台对大广告位的内容进行添加或修改或删除的同时删除缓存中大广告位的信息。
-
-
-
-
-
- @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做缓存的功能,其它还在探索中。
转自:http://blog.csdn.net/u010539352/article/details/51787324