电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

springboot使用redis對單個對象進行自動緩存更新刪除的實現

瀏覽:97日期:2023-02-19 13:46:19

Springboot的項目搭建在此省略,pom文件依賴什么的就不說了

創建一個實體類

@Data@EqualsAndHashCode(callSuper = true)@Accessors(chain = true)@ApiModel(value='ERepository對象', description='題庫')public class ERepository extends BasicModel<ERepository> implements Serializable { private static final long serialVersionUID = 1L; @TableId(value = 'id', type = IdType.AUTO) private Long id; @ApiModelProperty(value = '安全分類id') private Long safeTypeId; @ApiModelProperty(value = '題型') private Integer quesType; @ApiModelProperty(value = '題干') private String quesContent; @ApiModelProperty(value = '選項') private String options; @ApiModelProperty(value = '答案') private String answer; @ApiModelProperty(value = '是否審核(0:未審核,1:已審核)')// @TableField('is_check') private Boolean isCheck; @Override protected Serializable pkVal() {return this.id; }}

創建一個控制器

@RequiredArgsConstructor@RestController@Slf4j@Api(tags = '題庫模塊')@RequestMapping('/api/eRepository')public class ERepositoryController { private final IERepositoryService eRepositoryService; @ApiOperation('查詢所有題目') @GetMapping(value = '/all') @ResponseBody public Result<List<ERepository>> getRespository(ERepositoryQueryCriteria criteria){return Result.success(eRepositoryService.getRepositoryAll(criteria)); } @ApiOperation(value = '多條件查詢題目',notes = '根據各種條件查詢,可分頁 n author:LiFang 2021/7/25') @GetMapping @ResponseBody public Result<IPage<ERepositoryDTO>> getRespository(PageVO pageVO,ERepositoryQueryCriteria criteria){return Result.success(eRepositoryService.getRepository(pageVO.buildPage(),criteria)); } @ApiOperation(value = '按安全分類id查詢') @GetMapping(value = '/getBySafeTypeId') public Result<List<ERepository>> getRespositoryBySafeTypeId(Long id){Long start = System.currentTimeMillis();List<ERepository> list = eRepositoryService.getBySafeTypeId(id);Long end = System.currentTimeMillis();System.out.println('耗時:'+(end-start));return Result.success(list); } @ApiOperation('新增題目') @PostMapping public Result<Void> add(@RequestBody ERepository eRepository){eRepository.setDeleted(false);eRepositoryService.addRepository(eRepository);return Result.success(); } @ApiOperation('修改題目') @PutMapping public Result<Object> update(@RequestBody ERepository eRepository){eRepository.setDeleted(false);log.info(StrUtil.format('【修改題目 /api/eRepository】操作人id:{},被修改題目id:{}', SecurityUtils.getCurrentUserId(),eRepository.getId()));return Result.success(eRepositoryService.updateRepository(eRepository)); } @ApiOperation('刪除題目') @DeleteMapping public Result<Void> delete(@RequestBody Set<Long> ids){eRepositoryService.deleteById(ids);return Result.success(); }}

建個service

public interface IERepositoryService extends IBasicService<ERepository> { List<ERepository> getRepositoryAll(ERepositoryQueryCriteria criteria); IPage<ERepositoryDTO> getRepository(IPage<ERepository> page,ERepositoryQueryCriteria criteria); List<ERepository> addRepository(ERepository eRepository); List<ERepository> updateRepository(ERepository eRepository); void deleteById(Set<Long> id); List<ERepository> getBySafeTypeId(Long id);}

新建service實現類

使用注解進行自動緩存、更新、刪除主要是在service的實現類里寫

@Slf4j@Service@EnableCaching@RequiredArgsConstructor@CacheConfig(cacheNames = 'repository')public class ERepositoryServiceImpl extends BasicServiceImpl<ERepositoryMapper, ERepository> implements IERepositoryService { private final ERepositoryMapper eRepositoryMapper; private final ERepositoryStruct eRepositoryStruct;// private final ERepositoryServiceImpl eRepositoryService; private final RedisUtils redisUtils; @Override public List<ERepository> getRepositoryAll(ERepositoryQueryCriteria criteria) {List<ERepository> eRepositories = eRepositoryMapper.selectList(buildERepositoryCriteria(criteria));return eRepositories; } @Override public IPage<ERepositoryDTO> getRepository(IPage<ERepository> page,ERepositoryQueryCriteria criteria) {IPage<ERepository> eRepositoryPage = eRepositoryMapper.selectPage(page,buildERepositoryCriteria(criteria));List<ERepositoryDTO> eRepositoryDTOList = eRepositoryStruct.toDto(eRepositoryPage.getRecords());return PageUtil.toMapStructPage(eRepositoryPage,eRepositoryDTOList); } @Cacheable(key = '’safeTypeId:’ + #p0') @Override public List<ERepository> getBySafeTypeId(Long id) {List<ERepository> eRepositoryList = eRepositoryMapper.getBySafeTypeId(id);return eRepositoryList; } private LambdaQueryWrapper<ERepository> buildERepositoryCriteria(ERepositoryQueryCriteria criteria){LambdaQueryWrapper<ERepository> wrapper = new LambdaQueryWrapper<>();//wrapper.eq(ERepository::getDeleted,false);if (ObjectUtil.isNotNull(criteria.getId())) { wrapper.eq(ERepository::getId,criteria.getId());}if(StrUtil.isNotBlank(criteria.getQuesContent())){ //默認使用like匹配 wrapper.like(ERepository::getQuesContent, criteria.getQuesContent());}if (ObjectUtil.isNotNull(criteria.getSafeTypeId())) { wrapper.eq(ERepository::getSafeTypeId, criteria.getSafeTypeId());}if(ObjectUtil.isNotNull(criteria.getQuesType())){ wrapper.eq(ERepository::getQuesType,criteria.getQuesType());}if (ObjectUtil.isNotNull(criteria.getStartTime()) && ObjectUtil.isNotNull(criteria.getEndTime())) { wrapper.between(ERepository::getCreateTime , criteria.getStartTime(), criteria.getEndTime());}return wrapper; } @CachePut(key = '’safeTypeId:’ + #p0.safeTypeId') @Override public List<ERepository> addRepository(ERepository eRepository) {eRepositoryMapper.insert(eRepository);List<ERepository> list = eRepositoryMapper.getBySafeTypeId(eRepository.getSafeTypeId());//list.add(eRepository);return list; } @CachePut(key = '’safeTypeId:’ + #p0.safeTypeId') @Override public List<ERepository> updateRepository(ERepository resources) {ERepository eRepository = getById(resources.getId());if(ObjectUtil.isEmpty(eRepository)){ log.error(StrUtil.format('【修改題目失敗】操作人id:{},修改目標ERepository為空,目標id:{}', SecurityUtils.getCurrentUserId(), resources.getId())); throw new BadRequestException('修改失敗,當前數據id不存在');}eRepositoryMapper.updateById(resources);log.info(StrUtil.format('【修改題目成功】操作人id:{},修改目標題目:{}', SecurityUtils.getCurrentUserId(),resources));List<ERepository> list = eRepositoryMapper.getBySafeTypeId(resources.getSafeTypeId());//list.removeIf(item -> resources.geMId().equals(item.getId()));//list.add(resources);//清理緩存delCaches(resources.getId());return list; } @Override public void deleteById(Set<Long> ids) {for (Long id : ids){ eRepositoryMapper.deleteById(id); //清理緩存 delCaches(id);}log.info(StrUtil.format('【刪除題目成功】操作人id:{},刪除目標repositories:{}', SecurityUtils.getCurrentUserId(),ids.toString())); } /** * 清理緩存 * * @param id / */ private void delCaches(Long id) {Long safeTypeId = eRepositoryMapper.getSafeTypeIdById(id);//刪除屬于該安全分類的題庫緩存redisUtils.del(CacheKey.REPOSITORY_SAFETYPEID + safeTypeId); }}

新建mapper接口

@Componentpublic interface ERepositoryMapper extends BasicMapper<ERepository> { @Select('SELECT * FROM e_repository WHERE safe_type_id = #{safeTypeId} AND is_deleted=0') List<ERepository> getBySafeTypeId(Long safeTypeId); @Select('SELECT safe_type_id FROM e_repository WHERE id= #{id} AND is_deleted=0') Long getSafeTypeIdById(Long id);}

6.啟動項目

使用swagger測試根據安全分類id查詢題目接口,該分類題目的查詢結果成功響應,這時打開redis管理工具,可以看到題目按分類已經被緩存到redis中了。

springboot使用redis對單個對象進行自動緩存更新刪除的實現

再次用swagger測試查詢該分類id的所有題目,可以看到IDEA控制臺并沒有sql語句打印,仍然有查詢結果成功響應。

@CacheConfig(cacheNames = “repository”)放在service實現類上,用來配置緩存名稱。@Cacheable(key = “‘safeTypeId:’ + #p0”)放在查詢方法上,‘safeTypeId:’ + #p0作為鍵,p0是該方法的第一個參數。作用:使用這兩個注解,會使查詢方法首先會根據key從緩存中查詢,如果緩存中沒有該鍵,則從使用sql語句到數據庫中差查詢,查詢后,響應結果,并自動將方法的返回結果放入redis緩存中,下一次,如果再查詢就直接從redis緩存中查詢。

好處:極大提升查詢效率,并減輕服務器壓力。

@CachePut(key = “‘safeTypeId:’ + #p0.safeTypeId”)

通常加到添加和更新方法上

當訪問新增題目接口時,數據庫新增題目成功,方法返回結果會存入redis中,這次再訪問查詢屬于該分類的題目接口,會發現該分類的題目已經添加成功。 當訪問更新題目接口時,數據庫更新題目成功,方法返回結果會根據key存入redis中,當再根據該key查詢題目時,會發現控制臺并沒有打印sql語句,直接從redis中查詢出結果。

@CacheEvict(key = “#p0”)

用在刪除方法上,走該刪除方法,會刪除數據庫中的該條記錄,而且會刪除key為方法的第一個參數(通常為id)的redis記錄。再次查詢該條記錄,發現查詢不到了。注意:上面的方法不能用來存儲集合。

到此這篇關于springboot使用redis對單個對象進行自動緩存更新刪除的實現的文章就介紹到這了,更多相關springboot redis自動緩存更新刪除內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
主站蜘蛛池模板: 深圳公司注册-工商注册公司-千百顺代理记账公司 | 呼末二氧化碳|ETCO2模块采样管_气体干燥管_气体过滤器-湖南纳雄医疗器械有限公司 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 传递窗_超净|洁净工作台_高效过滤器-传递窗厂家广州梓净公司 | 云南标线|昆明划线|道路标线|交通标线-就选云南云路施工公司-云南云路科技有限公司 | 哈希余氯测定仪,分光光度计,ph在线监测仪,浊度测定仪,试剂-上海京灿精密机械有限公司 | 长沙广告公司_制作,长沙喷绘_发光字_招牌制作_长沙泓润广告官网 长城人品牌官网 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 有声小说,听书,听小说资源库-听世界网| 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 盘式曝气器-微孔曝气器-管式曝气器-曝气盘-斜管填料 | 郑州市前程水处理有限公司 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 实体店商新零售|微赢|波后|波后合作|微赢集团 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 分轨 | 上传文件,即刻分离人声和伴奏 | 翰墨AI智能写作助手官网_人工智能问答在线AI写作免费一键生成 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 高硼硅玻璃|水位计玻璃板|光学三棱镜-邯郸奥维玻璃科技有限公司 高温高压釜(氢化反应釜)百科 | 青岛侦探_青岛侦探事务所_青岛劝退小三_青岛调查出轨取证公司_青岛婚外情取证-青岛探真调查事务所 | 粉丝机械,粉丝烘干机,粉丝生产线-招远市远东粉丝机械有限公司 | 通信天线厂家_室分八木天线_对数周期天线_天线加工厂_林创天线源头厂家 | Maneurop/美优乐压缩机,活塞压缩机,型号规格,技术参数,尺寸图片,价格经销商 | 天一线缆邯郸有限公司_煤矿用电缆厂家_矿用光缆厂家_矿用控制电缆_矿用通信电缆-天一线缆邯郸有限公司 | 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | atcc网站,sigma试剂价格,肿瘤细胞现货,人结肠癌细胞株购买-南京科佰生物 | 自动化生产线-自动化装配线-直流电机自动化生产线-东莞市慧百自动化有限公司 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 搪玻璃冷凝器_厂家-越宏化工设备 | 登车桥动力单元-非标液压泵站-非标液压系统-深圳市三好科技有限公司 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 次氯酸钠厂家,涉水级次氯酸钠,三氯化铁生产厂家-淄博吉灿化工 | 合肥风管加工厂-安徽螺旋/不锈钢风管-通风管道加工厂家-安徽风之范 | 立式壁挂广告机厂家-红外电容触摸一体机价格-华邦瀛 | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 细石混凝土泵_厂家_价格-烟台九达机械有限公司 | elisa试剂盒价格-酶联免疫试剂盒-猪elisa试剂盒-上海恒远生物科技有限公司 | 面粉仓_储酒罐_不锈钢储酒罐厂家-泰安鑫佳机械制造有限公司 | 深圳展厅设计_企业展馆设计_展厅设计公司_数字展厅设计_深圳百艺堂 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 |