日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

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

瀏覽:208日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲福利国产| 国产91在线精品| 麻豆视频一区二区| 亚洲天堂日韩在线| 黄色免费成人| 久久aⅴ国产紧身牛仔裤| 日本韩国欧美超级黄在线观看| 国产精品亚洲综合在线观看| 亚洲网站视频| 在线一区视频观看| bbw在线视频| 久久久久一区| 偷拍精品精品一区二区三区| 国产999精品在线观看| 久久伊人亚洲| 欧美激情视频一区二区三区免费 | 蜜桃久久久久久| 欧美日韩少妇| 亚洲人亚洲人色久| 日韩中文字幕麻豆| 在线免费观看亚洲| 日韩中文字幕无砖| 亚洲最新av| 日韩网站在线| 免费人成精品欧美精品| 制服诱惑一区二区| 免费视频一区三区| 91精品蜜臀一区二区三区在线 | 首页欧美精品中文字幕| 天堂成人免费av电影一区| 午夜在线观看免费一区| 久久高清一区| 亚洲va久久久噜噜噜久久| 在线精品视频一区| 国产精品videossex久久发布 | 美腿丝袜亚洲一区| 日本欧美国产| 国产 日韩 欧美一区| 在线综合视频| 日韩欧美中文字幕一区二区三区 | 国产一区欧美| 日韩一二三区在线观看| 国产激情欧美| 国产精品麻豆久久| 999国产精品| 亚洲二区三区不卡| 亚洲欧洲日韩精品在线| 国产精品久久久久久久久久白浆 | 99在线|亚洲一区二区| 午夜精品影视国产一区在线麻豆| 9久re热视频在线精品| 国产日韩一区| 欧美日韩网址| 久久国产电影| 免费久久99精品国产| 欧美黄色一区二区| 亚洲成a人片| 久久亚洲影院| 超碰超碰人人人人精品| 亚洲精品91| 欧美亚洲综合视频| 91精品国产91久久久久久黑人| 亚洲欧洲另类| 日本三级亚洲精品| 日韩理论片av| 国产国产精品| 久久国产精品免费精品3p| 欧美日韩精品在线一区| 午夜久久av| 岛国av免费在线观看| 亚洲精品日本| 成人精品视频| 老鸭窝毛片一区二区三区| 国产aⅴ精品一区二区四区| 国产亚洲在线观看| 欧美www视频在线观看| 午夜久久免费观看| 99亚洲视频| 国产一区二区三区亚洲综合| 欧美在线网站| 捆绑调教美女网站视频一区 | 国产一区福利| 日本成人手机在线| 日韩精品网站| 欧美91在线| 视频精品一区二区| 丝袜美腿诱惑一区二区三区 | 日韩国产一二三区| 国产一区二区中文| 久久精品免视看国产成人| 日韩中文字幕麻豆| 欧美日韩精品一区二区视频| 国产成人久久精品麻豆二区| 欧美片网站免费| 在线一区二区三区视频| 国产一在线精品一区在线观看| 丁香婷婷久久| 欧美精品第一区| 欧美亚洲色图校园春色| 久热精品在线| 亚洲国产日韩欧美在线| 中文字幕人成乱码在线观看 | 国产日韩一区| 中文不卡在线| 免费日本视频一区| 午夜欧美精品| 久久免费黄色| 超碰超碰人人人人精品| 国产成人免费精品| 国产精品115| 国产精品调教| 久久国产三级| 欧美在线黄色| 五月亚洲婷婷 | 亚洲一区中文| 欧美日韩日本国产亚洲在线 | 亚洲激情偷拍| 亚洲二区三区不卡| 国产伊人精品| 日韩精品水蜜桃| 日韩精品久久久久久久电影99爱| 高清不卡一区| 黄色在线观看www| 97精品中文字幕| 国产精品www994| 国产精品网站在线看| 国产精品蜜月aⅴ在线| 国产调教精品| 国产激情欧美| 久久亚洲精精品中文字幕| 麻豆高清免费国产一区| 国产精品成人一区二区网站软件| 国产精品成人一区二区网站软件| 国产欧美一区二区三区精品观看| 国产精品天天看天天狠| 免费在线观看一区| 国产66精品| 日韩中文首页| 亚洲网站视频| 精品欧美激情在线观看| 午夜欧美视频| 免费观看在线综合色| 亚洲人成网77777色在线播放| 日韩中文字幕无砖| 国产亚洲观看| 精品日产乱码久久久久久仙踪林| 国内精品亚洲| 今天的高清视频免费播放成人| 影音先锋久久| 爽爽淫人综合网网站| 日本不卡的三区四区五区| 国产日韩视频在线| 激情综合婷婷| 免费成人网www| 国产精品试看| 欧美日韩网址| 日本不良网站在线观看| 国产在线欧美| 色综合视频一区二区三区日韩 | 欧美freesex黑人又粗又大| 九一成人免费视频| 亚洲人成精品久久久| 国产精品片aa在线观看| 国产精品chinese| 日韩欧美一区二区三区在线观看 | 中文字幕av亚洲精品一部二部 | 久久免费视频66| 久久精品影视| 亚洲午夜久久| 国产劲爆久久| 激情综合激情| 亚洲精品乱码| 精品视频97| 欧美精品激情| 国产乱码精品一区二区三区四区| caoporn视频在线| 性色av一区二区怡红| 久久av网站| 欧美va天堂在线| 热久久国产精品| 久久免费精品| 国产一区成人| 精品国产美女a久久9999| 夜夜嗨网站十八久久| 国产九一精品| 极品日韩av| 美腿丝袜在线亚洲一区| 韩国精品主播一区二区在线观看| 免费日韩精品中文字幕视频在线| 国产伦精品一区二区三区视频 | 香蕉国产精品| 国产精品网在线观看| 激情欧美一区二区三区| 日本视频一区二区| 99视频精品视频高清免费| 日韩高清成人在线| 91精品精品| 国产欧美一区二区三区精品观看 | 日本精品黄色| 香蕉久久一区|