当前位置: 首页 > news >正文

天津定制网站建设公司wordpress 修改 缩进按钮

天津定制网站建设公司,wordpress 修改 缩进按钮,网页设计与制作的公司,福州建设厅网站目录 背景#xff1a; 思路: 问题 实现 背景#xff1a; 最近业务写到检索这块的内容#xff0c;设计到搜索记录的增删操作。考虑到频繁写库操作所以使用缓存技术 redis 和 cacha。 思路: 查询#xff1a;先查内存查缓存在查询数据库#xff0c;查询数据库先更新内存…目录 背景 思路: 问题 实现 背景 最近业务写到检索这块的内容设计到搜索记录的增删操作。考虑到频繁写库操作所以使用缓存技术 redis 和 cacha。 思路: 查询先查内存查缓存在查询数据库查询数据库先更新内存在更新缓存     插入因为搜索历史不同于文章统计功能改变其根据id 修改uv pv 值即可也考虑到检索是否正常执行完成可以保证其搜索内容的唯一性之前就是搜索一次添加一行数据修改其检索时间查询数据库根据检索时间倒序也无需在数据库层面去重操作。搜索内容在历史已经存在更新内存缓存的检索时间如果不存在添加后同步到内存在缓存。 删除删除数据库的搜索内容删除刷新内存缓存或者数据库有状态标识但重新搜索同样内容需要考虑是这条数据是做修改操作还是另外新增。第一种方式简单方便高效数据库也干净 修改无修改操作 问题 在实现的过程中发现历史搜索并不单纯只包含搜索内容搜索的时间命中的数据方便可用于后期实现搜索相关的计算和统计。所以搜索插入的时候不能靠搜索内容省去去重的操作所以每次搜索的时候相关的信息需要全部入缓存然后再同步库。 实现 搜索时先将搜索内容入库获获取主键id方便于后期可以将数据不显示 ApiOperation(模糊搜索)PostMapping(/dim)private AjaxResult dimSearch(RequestBody Validated DimSearchParam param) {SearchTypeEnum searchType SearchTypeEnum.getSearchType(param.getType());// 1.保存搜索记录SearchHistory searchHistory searchHistoryService.saveSearchInfo(param.getSearchContent(), searchType.name(), SecurityUtils.getUserId());// 2.添加搜素记录缓存LatelySearchRecordVo latelySearchRecordVo new LatelySearchRecordVo(param.getSearchContent(), searchHistory.getId());searchCacheService.addSearchRecordLocalCache(SecurityUtils.getUserId(), searchType, latelySearchRecordVo);// 3.组装参数SearchDim search (SearchDim) searchBeanContainer.getSearchBean(searchType.getBeanName());param.setSearchType(searchType);param.setId(searchHistory.getId());SearchContextEsPageInfo, DimSearchParam searchContext new SearchContext(search);// 4.执行搜索EsPageInfo esPageInfo searchContext.execute(param);return AjaxResult.success(esPageInfo);}本地缓存使用了caffeine高可用且对数据删除淘汰机制都提供了方法 private final CacheString, SetLatelySearchRecordVo searchContentCache Caffeine.newBuilder().expireAfterAccess(1, TimeUnit.SECONDS).maximumSize(1000).build(); 添加本地缓存和redis缓存 搜索记录需要去重所以删除了之前搜素内容相同的 PostMapping(/lately/search/record)ApiOperation(value 最近搜索记录)private AjaxResult latelySearchRecord(RequestBody LatelySearchRecordParam param){SearchTypeEnum searchType verifySearchType(param.getType());// 1. 获取缓存Long userId SecurityUtils.getUserId();SetLatelySearchRecordVo cacheVo searchCacheService.getSearchRecordCacheByLocal(userId, searchType, param.getPage(), param.getSize());if (StringUtils.isEmpty(cacheVo)){startPage();return success(searchHistoryService.latelySearchRecord(searchType, userId));}return success(cacheVo);} /*** 添加搜索记录缓存*/public void addSearchRecordLocalCache(Long userId, SearchTypeEnum searchType, LatelySearchRecordVo searchHistory) {String localCacheKey LocalCacheKey.getSearchContentKey(userId, searchType);SetLatelySearchRecordVo localCacheSet searchContentCache.getIfPresent(localCacheKey);if (StringUtils.isEmpty(localCacheSet)) {localCacheSet new LinkedHashSet();}// 1.添加内存localCacheSet.removeIf(l - l.getSearchContent().equals(searchHistory.getSearchContent()));localCacheSet.add(searchHistory);searchContentCache.put(localCacheKey, localCacheSet);addSearchRecordLocalRedis(userId, searchType, searchHistory);}/*** 添加搜索记录缓存*/public void addSearchRecordLocalRedis(Long userId, SearchTypeEnum searchType, LatelySearchRecordVo searchHistory) {String redisCacheKey RedisCacheKey.getSearchContentKey(userId, searchType);ZSetOperationsString, LatelySearchRecordVo redisZet redisTemplate.opsForZSet();// 2.缓存存在的清空下需要去重相同搜素内容if (redisTemplate.hasKey(redisCacheKey)){long length redisZet.size(redisCacheKey) - 1;SetLatelySearchRecordVo redisCacheSet redisZet.range(redisCacheKey, 0, length);SetLatelySearchRecordVo delCache redisCacheSet.stream().filter(l - l.getSearchContent().equals(searchHistory.getSearchContent())).collect(Collectors.toSet());if (!StringUtils.isEmpty(delCache)){redisZet.remove(redisCacheKey, delCache.toArray());}}// 3.添加缓存redisZet.add(redisCacheKey, searchHistory, System.currentTimeMillis());redisTemplate.expire(redisCacheKey, 30, TimeUnit.MINUTES);} 在查询搜索记录时优先从缓存获取 /*** 从本地缓存获取搜索记录*/public SetLatelySearchRecordVo getSearchRecordCacheByRedis(Long userId, SearchTypeEnum searchType, int pageNum, int pageSize) {String redisCacheKey RedisCacheKey.getSearchContentKey(userId, searchType);ZSetOperationsString, LatelySearchRecordVo zet redisTemplate.opsForZSet();SetLatelySearchRecordVo redisCacheSet zet.range(redisCacheKey, pageNum, pageSize);// 3.缓存没有if (StringUtils.isNull(redisCacheSet)){return null;}return redisCacheSet;}public SetLatelySearchRecordVo getSearchRecordCacheByLocal(Long userId, SearchTypeEnum searchType, int pageNum, int pageSize) {String localCacheKey LocalCacheKey.getSearchContentKey(userId, searchType);pageNum (pageNum - 1) * pageSize;pageSize pageNum * pageSize - 1;// 1.从内存获取SetLatelySearchRecordVo localCacheSet searchContentCache.getIfPresent(localCacheKey);// 2.内存没有从缓存获取if (StringUtils.isNull(localCacheSet)) {return getSearchRecordCacheByRedis(userId, searchType, pageNum, pageSize);}int maxLength localCacheSet.size() - 1;if (pageSize maxLength) {pageSize maxLength;}return localCacheSet.stream().skip(pageNum).limit(6).collect(Collectors.toSet());} 缓存没有的从库里查 添加缓存 Overridepublic ListLatelySearchRecordVo latelySearchRecord(SearchTypeEnum searchType, Long userId) {LinkedListLatelySearchRecordVo vos new LinkedList();ListSearchHistory searchRecodeList searchHistoryMapper.getLatelySearchContent(searchType.name(), userId);searchRecodeList.stream().forEach(recode - {LatelySearchRecordVo vo new LatelySearchRecordVo();BeanUtils.copyProperties(recode, vo);vos.add(vo);});if (!StringUtils.isEmpty(vos)){// 写入缓存searchCacheService.addSearchRecord(userId, searchType, vos);}return vos;} public void addSearchRecord(Long userId, SearchTypeEnum searchType, ListLatelySearchRecordVo searchHistory){addSearchRecordLocalCache(userId, searchType, searchHistory);addSearchRecordLocalRedis(userId, searchType, searchHistory);} 删除搜索记录改库 刷新缓存 DeleteMapping(/{id}/{type})ApiOperation(value 删除搜索记录)private AjaxResult removeSearchHistoryNoDisplay(Validated RemoveSearchHistoryNoDisplayParam param){SearchTypeEnum searchType verifySearchType(param.getType());searchHistoryService.searchRecodeNoDisplay(param.getId(), SecurityUtils.getUserId(), searchType);return success();}DeleteMapping(/all)ApiOperation(value 删除所有的搜索记录)private AjaxResult removeSearchHistoryAllNoDisplay(RequestBody RemoveSearchHistoryAllNoDisplayParam param){SearchTypeEnum searchType verifySearchType(param.getType());searchHistoryService.searchHistoryAllNoDisplay(SecurityUtils.getUserId(), searchType);return success();} Overridepublic void searchRecodeNoDisplay(Long id, Long uid, SearchTypeEnum searchType) {searchHistoryMapper.updateSearchRecodeNoDisplay(id, uid);// 刷新缓存searchCacheService.refreshCache(uid, searchType);}Overridepublic void searchHistoryAllNoDisplay(Long userId, SearchTypeEnum searchType) {searchHistoryMapper.updateAllSearchRecodeNoDisplay(userId, searchType.name());// 刷新缓存searchCacheService.refreshCache(userId, searchType);}
http://www.pierceye.com/news/124927/

相关文章:

  • 青岛高端网站开发wordpress修改logo地址
  • 做网站实名认证有什么用青岛网站建设运营
  • 大数据分析网站做汽车保养的网站上
  • 网站开发费用一般是多少怎么建设宣传网站
  • 做网站的背景怎么做ps免费模板网站
  • 为什么要建设应急管理网站sketch做网站
  • 做的网站在百度上搜不出来的宁波关键词优化平台
  • 哪里有手机网站建设公司有道网站收录提交入口
  • 赣州网站建设较好的公司贵州网站建设hsyunso
  • 网站建设和管理是教什么科目鹤壁网站建设鹤壁
  • 网站域名和邮箱域名解析国外网站国内做二维码
  • 万万州州微微网站网站建建设设福州建设网站效果图
  • 长安网站建设详细教程鸿科经纬教网店运营推广
  • 微信营销模式有seo短视频网页入口引流推广
  • 做商城网站简单吗长春网站建设服务
  • 工厂弄个网站做外贸如何app开发报价公司
  • 网销网站建设流程如何创建网站挣钱
  • 韶关网站制作手机推广app
  • Linux做视频网站网速均衡网页编辑实践报告
  • 做ppt好的模板下载网站如何查看网站空间商
  • 武义公司网站建设公司如何建设网站首页
  • hdwiki做网站罗湖网站建设联系电话
  • 深圳网站建设 利科技wordpress插件 手机版
  • 南通优普网站建设团队课程设计模板
  • 网站建设与维护的选择题浦东新区做网站
  • 做视频网站视频放在哪里网站备案目的
  • 建设部安全事故通报网站怎么更改网站的备案号
  • 重庆网站建设维护网络推广引流方法
  • 精品网站开发分销网站建站
  • 建设一个教程视频网站需要什么资质策划书案例范文