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

led网站模板中山网站建设文化咨询

led网站模板,中山网站建设文化咨询,动画制作软件ae,佛山网站公司建设网站如果不了解Redis#xff0c;可以查看本人博客#xff1a;Redis入门 Redis基于内存#xff0c;因此查询速度快#xff0c;常常可以用来作为缓存使用#xff0c;缓存就是我们在内存中开辟一段区域来存储我们查询比较频繁的数据#xff0c;这样#xff0c;我们在下一次查询…        如果不了解Redis可以查看本人博客Redis入门 Redis基于内存因此查询速度快常常可以用来作为缓存使用缓存就是我们在内存中开辟一段区域来存储我们查询比较频繁的数据这样我们在下一次查询的时候会直接去内存中查询如果命中查询到就直接返回否则就去数据库等在磁盘位置存储的数据进行查询去磁盘硬盘等位置查询数据就比较慢了。因此用好缓存对于我们的用户体验也是很重要的。 本文基于springbootmybatisplusRedis进行实现。 首先创建一个springboot项目 不勾选依赖 导入依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-boot-starter/artifactIdversion3.5.2/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency 配置application.yaml spring:redis:host: localhostport: 6379password: 123456datasource:type: com.zaxxer.hikari.HikariDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: rooturl: jdbc:mysql://localhost:3306/hongyan_sso?characterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLfalseallowMultiQueriestrueuseJDBCCompliantTimezoneShifttrueuseLegacyDatetimeCodefalseserverTimezoneAsia/ShanghainullCatalogMeansCurrenttrueallowPublicKeyRetrievaltrue 编写实体类 package com.qcby.springbootdata.pojo;import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data;TableName(t_user) Data public class User {private Long id;private String userName;private String password;private String nickName; }编写mapper package com.qcby.springbootdata.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qcby.springbootdata.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.apache.tomcat.websocket.BackgroundProcess;Mapper public interface UserMapper extends BaseMapperUser { }编写controller package com.qcby.springbootdata.controller;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.qcby.springbootdata.mapper.UserMapper; import com.qcby.springbootdata.pojo.User; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController;import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.util.Arrays; import java.util.List;RestController Slf4j public class UserController {Resourceprivate UserMapper userMapper;Resourceprivate RedisTemplateString,String redisTemplate;GetMapping(/get-user-by-nick)public String getUserByNick(Long id){String key buildKey(String.valueOf(id));if(Boolean.TRUE.equals(redisTemplate.hasKey(key))){log.info(命中缓存id:{},id);return redisTemplate.boundValueOps(key).get();}User userPO userMapper.selectById(id);if(userPO null){redisTemplate.boundValueOps(key).set(暂无此人);return 暂无此人;}redisTemplate.boundValueOps(key).set(userPO.toString());return userPO.toString();}/*** 更新用户* 一般情况下修改后删除就行了* 但是并发比较高而且对数据比较敏感比如说金钱需要双删** param userId 用户id* param nickName 尼克名字* return {link String}* throws InterruptedException 中断异常*/GetMapping(/update-user-by-nick)public String updateUser(Long userId,String nickName) throws InterruptedException {User userPO new User();userPO.setId(userId);userPO.setNickName(nickName);//这一步删除是为了保证当sql指令发送给mysql以后查询出来的值还是旧的redisTemplate.delete(buildKey(userId.toString()));userMapper.updateById(userPO);//这一步是为保证在sql指定发送给mysql的时候来了查询如果说这个时候的查寻还是修改之前的导致缓存不更新redisTemplate.delete(buildKey(userId.toString()));return 22;}/*** 缓存预热*/PostConstructpublic void initCache(){log.info(进行缓存预热);ListLong id Arrays.asList(101110L,101112L,101116L,101118L);ListUser userPOS userMapper.selectList(new LambdaQueryWrapperUser().in(User::getId, id));userPOS.stream().forEach(item-{redisTemplate.boundValueOps(buildKey(item.getId().toString())).set(item.toString());});}private String buildKey(String Id){return user:Id_Id;} }我们看一下controller中的思路 ①.GetMapping(/get-user-by-nick)             public String getUserByNick(Long  id) 这个方法首先根据给出的查询参数构造Redis的key我们查询Redis或者存Redis数据通常会构造一个key按照这个key来存储值。 首先从Redis数据库中查询是否存在该查询结果的数据如果存有就直接拿取返回即可否则走下一步。 然后从数据库中查询需要的数据首先判断这个数据是否存在如果存在就存入Redis该数据值否则说明不存在直接存储“无此数据”即可。 这个函数的大体思路就是有数据就拿没数据就存一个下次方便拿。 ②.GetMapping(/update-user-by-nick)             public String updateUser(Long userId,String nickName) 这个函数就是用来更新数据库数据并且做到数据库与缓存之间保持同步。主要是考虑并发情况下保证缓存数据和数据库数据的最终一致性。更新前删除缓存中的数据保证尽可能的让其他进程或线程感知到数据库变化进而在缓存中没有命中进数据库中查询数据此时数据可能已经被更新了或者还没有更新。 第二次删除就是为了保证数据更新以后删除缓存中数据让其他进程或线程在缓存中无命中进而进入数据库读取最新的数据保证了最终一致性。 ③.PostConstruct             public void initCache() 这个方法主要是做缓存预热在查询数据之前预先将访问频繁的数据存入缓存进而提高缓存命中提高查询效率。
http://www.w-s-a.com/news/398411/

相关文章:

  • 免费的制作网站做图剪片文案网站app接单
  • 中国有多少网站有多少域名上海网站建设网页制作邢台
  • 网站 数据报表如何做室内设计联盟官方网站入口
  • 怎样建设网站论文合肥做网站的软件公司
  • 收款后自动发货的网站是怎么做的怎么看网站后台网页尺寸
  • 谷歌seo引擎优化宁波seo关键词
  • 外贸网站建设需要注意什么seo课程
  • 做信息图网站网站建设的软件介绍
  • 网站开发语言数据库有几种魏县审批建设的网站
  • 北京公司网站建设推荐海口建设
  • 不懂编程如何做网站婚礼网站模板
  • 像京东一样的网站wordpress入门视频教程7 - 如何在文章里加入视频和音乐
  • 惠州网站建设排名wordpress3万篇文章优化
  • 创建网站的三种方法北京建王园林工程有限公司
  • jsp网站建设模板下载十大免费excel网站
  • 网络公司网站图片网站建立好了自己怎么做优化
  • 云主机是不是可以搭建无数个网站百度快速seo优化
  • 房地产怎么做网站推广建立音乐网站
  • 川畅科技联系 网站设计网站开发的教学视频
  • 为什么学网站开发凡科登陆
  • 设计师常备设计网站大全中山精品网站建设信息
  • 杭州建设工程网seo服务是什么
  • 兼职做问卷调查的网站wordpress mysql设置
  • 怎么在百度上能搜到自己的网站山西seo谷歌关键词优化工具
  • 网站搭建免费模板飞鱼crm下载
  • 网站开发竞品分析app制作公司深圳
  • 网站建设ssc源码修复设计班级网站建设
  • 网站重定向凡科做网站不要钱
  • 佛山html5网站建设微信营销软件破解版
  • 网站单页做301南京百度推广