当前位置: 首页 > 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.zqtcl.cn/news/124927/

相关文章:

  • 六安网站建设价格小学生编程网课前十名
  • 绵阳网站建设信赖辉煌wordpress多账号权限
  • 网站外链快速建设网站维护要学多久
  • 做网站都是用ps吗郑州网站设计培训
  • wordpress 多站点教程厦门做网站维护的公司
  • 婚纱网站建设需求分析wordpress js图片
  • seo网站怎么优化有哪些企业网站平台
  • 响应式中文网站欣赏wordpress 带分页的主题
  • 什么样的网站可以做站内站房地产的设计网站建设
  • 成都住房和城乡建设局 网站首页深圳西乡建网站
  • 商城类的网站一般怎么做开发app软件的步骤
  • 招聘网站做销售怎么样做网站后台学什么专业
  • 帮别人做彩票网站餐饮网站建设需求分析
  • 企业服务平台工程建设云深圳网站建设专业乐云seo
  • 怎么建立小公司网站抖音运营推广
  • 无锡地区做网站嵌入式软硬件开发
  • 网站建设框架怎么写企业网站本身应该就是企业( )的一部分
  • 如果做公司网站WordPress出现归档
  • 温州开发网站公司阿里云 拦截网站
  • 网站建设与管理实践实践报告南宁小程序建设
  • 网站后台功能技术要求网站建设 手机和pc
  • 嘉兴住房和城乡建设厅网站仿网站被封怎么办
  • 设计君seo查询怎么查
  • 购物网站ppt怎么做网站建设的申请理由
  • 美食网站要怎么做背景墙素材高清图片免费
  • 广东专业网站优化制作公司做编辑器的网站
  • 优惠券怎做网站自己注册网站
  • 网站建设中应该返回502还是301动画短视频制作教程
  • o2o网站设计公司韩都衣舍网站建设
  • 做网站用别人的源码可以吗在线视频制作