政务网站集约化建设难点与建议徐州建设集团有限公司
web/
2025/10/3 16:54:46/
文章来源:
政务网站集约化建设难点与建议,徐州建设集团有限公司,想注册个人网站,网站建设公司一月赚多少问题#xff1a;当我们要添加缓存时#xff0c;如果我们用了PageHelper时#xff0c;PageHelper只会对查询语句有效#xff08;使用到sql的查询#xff09;#xff0c;那么如果我们把查询到的数据都添加到缓存时#xff0c;就会无法进行分页#xff1b;
此时我们选择将…问题当我们要添加缓存时如果我们用了PageHelper时PageHelper只会对查询语句有效使用到sql的查询那么如果我们把查询到的数据都添加到缓存时就会无法进行分页
此时我们选择将分页后的数据加入缓存前端传入page和count表示查询页数和个数我们将其拼接到查询物品key作为唯一key添加进入redis中每次查询不同页数都会添加缓存
但是当我们数据进行更新时可能会导致所有添加的缓存都会与数据库不符合所以每次更新我们都要将缓存进行删除操作下次查询再次进行缓存~
下面我们使用PageHelper和redis做缓存分页
每次查询页码数和每页数量和对应的key拼接起来存入redis中、
下面我们使用redisClient存入redis通过redisTemplate进行模糊扫描扫描对于key下各个页码的缓存当内容进行更新时删除掉之前的缓存当我们再次请求时才会去加缓存
直接看代码 Service public class AAAAServiceImpl implements aaaaService { Autowired private TIntegralPrizesMapper integralPrizesMapper; Resource private RedisTemplateString,String redisTemplate; Autowired private IRedisClient redisClient; Autowired private AAAAOrderMapper aaaaMapper; Autowired private AAAAServiceImpl aaaaService; public static final String XXX_KEYXXX_AS_; Override public void addPrizes(AAAA aaaa) { aaaa.setId(UUID.randomUUID().toString().replace(-,)); aaaa.setCreateTime(new Date()); aaaa.setUpdateTime(new Date()); // 处理传入数据 aaaaMapper.addPrizes(aaaa);
//查询以XXX_KEYaaaa.getxx()开头的所有缓存count表示要查询的数量我们可以大概设置一个最大值不要太大不然影响性能 ScanOptions optionsScanOptions.scanOptions().match(XXX_KEYaaaa.getxx()*).count(100).build(); Cursorbyte[] cursorredisTemplate.getConnectionFactory().getConnection().scan(options);
//循环查询数据 while (cursor.hasNext()){
//将得到的字符组转换为String String keynew String(cursor.next());
//删除缓存 redisClient.delete(key); } try {
//关闭游标 cursor.close(); } catch (IOException e) { e.printStackTrace(); } } Override public String deleteXX(AAAADTO aaaaDTO) { //更新时间 aaaaDTO.setUpdateTime(new java.util.Date()); aaaaMapper.deleteSXPrizes(aaaaDTO); ScanOptions optionsScanOptions.scanOptions().match(XXX_KEYaaaDTO.getxx()*).count(100).build(); Cursorbyte[] cursorredisTemplate.getConnectionFactory().getConnection().scan(options); while (cursor.hasNext()){ String keynew String(cursor.next()); redisClient.delete(key); } try { cursor.close(); } catch (IOException e) { e.printStackTrace(); } return msg; } Override public PageInfoXXXPrizes selectXXX(AAADTO aaaDTO) { //对于每一页设置唯一的key存入redis String key XXX_KEYaaaDTO.getxx() pageaaaDTO.getPage() countaaaDTO.getCount(); //查询缓存 String tagsStr redisClient.get(key); if (StrUtil.isNotBlank(tagsStr)) { //将String解析 return JSON.parseObject(tagsStr, new TypeReferencePageInfoXXXPrizes() {}); } //pc进行分页 PageHelper.startPage(aaaDTO.getPage(),aaaDTO.getCount()); ListTIntegralPrizes tX aaaMapper.selectxxx(aaaDTO); PageInfoXXXPrizes pageInfonew PageInfo(tX); //解决缓存穿透问题当数据库为空时给缓存一个值使其不会一直访问数据库 //因为这里我们set的值为pageInfo所以不用关心这个问题 //转换为json字符串 //存入缓存 String strList JSON.toJSONString(pageInfo); redisClient.set(key, strList, 5 * ((int) (Math.random() * 4) 1), TimeUnit.MINUTES); return pageInfo; } } 以上就是一个缓存分页的例子当然做缓存分页方法有很多此方法仅供参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86321.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!