【Redis-TTshop】添加缓存--缓存同步

本文探讨了在查询内容列表时使用缓存的优化策略,包括如何在查询数据库前检查缓存,以及如何在缓存缺失时更新缓存。同时,深入解析了在后台管理系统中新增内容时的缓存同步问题,确保数据的一致性和有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、添加缓存

1.1功能分析

查询内容列表时添加缓存。

  1. 查询数据库之前先查询缓存。
  2. 查询到结果,直接响应结果。
  3. 查询不到,缓存中没有需要查询数据库。
  4. 把查询结果添加到缓存中。
  5. 返回结果。

参数 

函数:jedisClient.hset(key, field, value)

INDEX_CONTENT_AD:表示总的广告位名称

120 :表示其中一个id所辖的内容(轮播图),可以是其余的广告分类内容

XXX:表示根据key所查询的内容

1.2 代码实现

public List<TbContent> getContentList(long category_Id){
		
//		1、添加try catch。进行判断redis中是否有缓存
//		2、若有缓存,则直接进行 json转成list 进行返回
		
		try {
			String json = jedisClient.hget("INDEX_CONTENT_AD", category_Id+"");
			if(StringUtils.isNotBlank(json)){
//			将json数据转成list
				List<TbContent> list = JsonUtils.jsonToList(json, TbContent.class);
				return list;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
//		获取条件查询对象
		TbContentExample example = new TbContentExample();
//		添加查询的条件
		Criteria criteria = example.createCriteria();
		criteria.andCategoryIdEqualTo(category_Id);
//		执行查询,返回list集合
		List<TbContent> list = tbContentMapper.selectByExample(example);
		
//		3、若无缓存,则将list转成json放入redis缓存中
		try {
			jedisClient.hset("INDEX_CONTENT_AD", category_Id+"", JsonUtils.objectToJson(list));
//			jedisClient.hset(key, field, value)
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
		
	}

2、缓存同步

在实际应用中,若在后台管理系统中增加新的广告内容,由于读取的是缓存,所以会造成输入的内容无效情况。因此需要缓存同步。

代码实现

	/**
	 * 添加内容广告
	 * 
	 */
	public TaotaoResult addContent(TbContent tbContent) {

//		补全pojo信息
//		
		tbContent.setUpdated(new Date());
		tbContent.setCreated(new Date());
		
		tbContentMapper.insert(tbContent);
		//缓存同步,删除此id的缓存,下次重新读取数据库
		jedisClient.hdel("INDEX_CONTENT_AD", tbContent.getCategoryId().toString());

		return TaotaoResult.ok();
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值