标签: 数据结构

  • Spring 全家桶之 Spring Boot 2.6.4( Ⅰ )- Caching(Part A)

    Spring 全家桶之 Spring Boot 2.6.4( Ⅰ )- Caching(Part A)

    一起养成写作习惯!这是我参加“一神论计划4月份经文挑战”的第25天。点击查看活动详细信息。

    一、Spring Cache Abstraction

    The spring framework provides support fojson数据r transparently adding caching to an application . at its core,The abstraction applies caspring面试

    Sspring面试题pring高速缓存抽象是一组高速缓存规范,通过定义org . springframeworkjson . cache . cache和CacheManager的两个接口集成了不同的高速缓存技术

    高速缓存接口mybatis面试题提供高速缓存组件的规范定义,并包含缓慢JSON内存的各种操作集合

    高速缓存接数据结构教程第5版李春葆答案口下的弹簧提供了多种xxxCache实现数据结构c语言版本(RedisCache、EhCjson格式怎么打开acheCache、Concurre缓存视频变成本地视频ntMapCache等)

    Cach缓存是什么意思eManager是管理各种缓存组件的缓存管理器

    CacheManager和Cache的关系类似于数据库连接池和数据库连springmvc的工作原理接。

    为了简化开发,Spring高速缓存抽象同时支持Jacache的注释,Jacache也是一组规范。

    JCache定义了五个核心接口:

    CachingProvjsonider:定义多个CacheManagerjson解析的创建、配置、导入、管理和控制,在运行过程中可以访问多个caching提springmvc的工作原理供程序

    CaCaiderManager:创建、配置、导入、管理和控制存在于Cachemanager的j数据结构c语言版严蔚敏第二版答案sonp上下文中的多个唯一命名的ca高速缓存是指che。CacheManager只能MyBatis属于一mybatis框架个Cachismybatis一级缓存和二级缓存pringngProvjson

    Cache:暂时储存类似快取的Map数目jsonp资料结构、金钥索引值。缓存只能属于一个CacheManager

    数据结构题库目:高速缓存

    的Key-数据结构有哪些Value对
  • Expiry:每一个存储spring面试题在Ca缓存文件夹名称che中的条目有一个mybatis注解定义的有效期,一旦超过这个事件,条目为过期状态且无法访问、更新和删除,缓存有数据结构知识点总结效期可以通过ExpiryPolicy设置

为了简化开发,更多是使Spring用Spring的缓存抽象,Spring的缓存抽mybatis中$和井号区别象的底数据结构教程第5版李春葆答案层概念与JSR107是一致的

Spring 缓存抽象中的重要注解

  • @Cacheable:根据方缓存清理法的请求参数对结果进行缓存
  • @CacheEvict:清空缓存
  • @CachePut:保证方法被调用,同时缓存结果缓存
  • @EnableCachispspringcloudring是什么意思ng:开springcloud启基于注解的缓存

每次调用需要缓存功能的方法时,Spring会检查数据结构严蔚敏指定参数的执springmvc的工作原理行目标方法是否已经被调用过,如果有就直接从数据结构题库spring翻译缓存中获取方法调用后的结果,如果没数据结构严蔚敏有就调用目标方法并缓存结果json怎么读后返回给用户,下次再次调用的时候直接从缓存中获取

You can a数据结构c语言版第二版课后答案lso use the standard缓存视频合并 JSR-107 (JCache) annotations (such aJSONs @CacheResult) transparently. However, we strongly advise you to not mix and match the Spring Cache and JCache annotations.

Sprisjsonppring框架ng Boot 官方建议spring框架不要混用 Spring Cache 和mybatisplus JCache 的注解

工程搭建与测试

创建spring bomybatis中$和井号区别ot工程smybatisplusprimybatis怎么读ng-boot-cache

根据S缓存的视频在哪QL文件新建tesla、json格式怎么打开factory两数据结构有哪些张表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for factory
-- ----------------------------
DROP TABLE IF EXISTS `factory`;
CREATE TABLE `factory` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `factory_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1166057542 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of factory
-- ----------------------------
BEGIN;
INSERT INTO `factory` VALUES (1, '上海特斯拉超级工厂');
INSERT INTO `factory` VALUES (2, '加州弗拉蒙特特斯拉超级工厂');
INSERT INTO `factory` VALUES (3, '得克萨斯州特斯拉超级工厂');
INSERT INTO `factory` VALUES (4, '柏林特斯拉超级工厂');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for tesla
-- ----------------------------
DROP TABLE IF EXISTS `tesla`;
CREATE TABLE `tesla` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `price` double(10,2) DEFAULT NULL,
  `vehicle_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `factory_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1166057542 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of tesla
-- ----------------------------
BEGIN;
INSERT INTO `tesla` VALUES (1166057520, 'Model 3P 2021', 280000.00, '四门轿车', 1);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;

entity包下增加Tesla和Factory实体类

@Data
public class Tesla {
    private Integer id;
    private String name;
    private Double price;
    private String vehicleType;
    private Integer factoryId;
}
@Data
public class Factory {
    private Integer id;
    private String factoryName;
}

application.ym数据结构c语言版第二版课后答案l中配置druid

spring:
  datasource:
    # driver可以不写,会根据连接自动判断
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/test
    druid:
      # 初始化大小,最小,最大
      initial-size: 5
      max-active: 100
      min-idle: 1
      # 配置获取连接等待超时的时间
      max-wait: 60000
      # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存时间
      min-evictable-idle-time-millis: 300000
      # 用来检测连接是否有效的sql 必须是一个查询语句 注意没有此语句以下三个属性不会生效
      validation-query: SELECT 1 FROM DUAL
      # 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-return: false
      # 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
      test-on-borrow: true
      # 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
      test-while-idle: true
      # 配置监控统计拦截的 Filter,去掉后监控界面 SQL 无法统计,wall 用于防火墙
      filters: stat,wall
      # 通过 connection-properties 属性打开 mergeSql 功能;慢 SQL 记录
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
      # 配置 DruidStatFilter
      web-stat-filter:
        enabled: true
        url-pattern: /*
        exclusions: .js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
      # 配置 DruidStatViewServlet
      stat-view-servlet:
        url-pattern: /druid/*
        # IP 白名单,没有配置或者为空,则允许所有访问
        #allow: 127.0.0.1
        # IP 黑名单,若白名单也存在,则优先使用
        #deny: 192.168.31.253
        # 禁用 HTML 中 Reset All 按钮
        reset-enable: true
        # 登录用户名/密码
        login-username: root
        login-password: 123
        # 注意 此处必须开启,否则无法访问druid监控面板
        enabled: true
      use-global-data-source-stat: true
logging:
  level:
    # 输出mapper接口中方法执行的SQL语句
    com.lilith.mapper: debug
mybatis:
  # 全局配置文件的位置
  config-location: classpath:mybatis-config.xml
  mapper-locations: classpath:mappers/*.xml
    # configuration:
  # map-underscore-to-camel-case: true
debug: true

在mymybatisplusbatis-config.mybatis分页插件实现原理xml缓存视频合并app中配置MyBatis全局配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.lilith.entity"/>
    </typeAliases>
</configuration>

mapper包下增加TeslaMapper和FactspringoryMapper两个接口,实现增删改查方法

public interface TeslaMapper {
    void insert(Tesla tesla);
    Tesla selectOneById(Integer id);
    void update(Tesla tesla);
    void deleteOneById(Integer id);
}
public interface FactoryMapper {
    Factory selectOneById(Integer id);
    void deleteOneById(Integer id);
    void insert(Factory factory);
    void update(Factory factory);
}

resourcmybatispluses目录下m数据结构教程第5版李春葆答案appers文件夹中的Mapper XML映射文件TeslaMap数据结构题库per.xml和FactoryMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lilith.mapper.TeslaMapper">
    <sql id="Base_Columns_List">
        id, name, price, vehicle_type, factory_id
    </sql>
    <select id="selectOneById" resultType="tesla">
        select <include refid="Base_Columns_List" /> from tesla where id = #{id}
    </select>
    <insert id="insert">
        INSERT INTO tesla (name, price, vehicle_type, factory_id)
        VALUES (#{name}, #{price}, #{vehicleType},#{factoryId})
    </insert>
    <update id="update">
        UPDATE tesla SET name = #{name}, price = #{price}, vehicle_type = #{vehicleType}, factory_id = #{factoryId}
        WHERE id = #{id}
    </update>
    <delete id="deleteOneById">
        DELETE FROM tesla WHERE id=#{id}
    </delete>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lilith.mapper.FactoryMapper">
    <sql id="Base_Columns_List">
        id, factory_name
    </sql>
    <select id="selectOneById" resultType="factory">
        SELECT <include refid="Base_Columns_List" /> FROM factory WHERE id = #{id}
    </select>
    <delete id="deleteOneById">
        DELETE FROM factory WHERE id=#{id}
    </delete>
    <insert id="insert" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        INSERT INTO factory (factory_name)
        VALUES (#{factoryName})
    </insert>
    <update id="update">
        UPDATE factory SET factory_name = #{factoryName} where id = #{id}
    </update>
</mapper>

初始化spring-boot-cache工程的步骤:

  1. 创建tesla和factory两张表
  2. spri数据结构c语言版ng-boot-cache中entity包下创建TJSONespring框架sla和Factory实体类
  3. 整合Druid数据源
  4. 配置MyBatis
  5. 新建TeslaMapp数据结构mybatis一级缓存和二级缓存c语言版第二版课后答案er、Factory数据结构Mapper并增加增删改查方法
  6. 测试TeslaMapper、FactoryMapper的增删改缓存查方法

数据结构知识点总结配置完成数据访问层并测试成功之后,新建service包并在该目录下新增impl包,在springservice包中新增TeslaService接口并在impl包中新增TeslaService的实现类TeslaServiceIMyBatismpl

public interface TeslaService {
    Tesla getTeslaById(Integer id);
}
@Service
@Slf4j
public class TeslaServiceImpl implements TeslaService {
    @Autowired
    private TeslaMapper teslaMapper;
    @Override
    public Tesla getTeslaById(Integer id) {
        log.info("查询" + id + "特斯拉");
        return teslaMapper.selectOneById(id);
    }
}

新增controller包,spring增加TeslaController类,返回JSON格式数据

@RestController
public class TeslaController {
    @Autowired
    private TeslaService teslaService;
    @GetMapping("/tesla/{id}")
    public Tesla find(@PathVariable("id") Integer id){
        Tesla teslaById = teslaService.getTeslaById(id);
        return teslaById;
    }
}

启动应用,测试Controller缓存类,不要忘了数据结构c语言版在主程序类上添加@MapperSc缓存是什么意思a数据结构c语缓存是什么意思言版第二版课后答案n扫描所有的Mapper接口

Spring Cache 的使用

首先在主程序类上使用@EnableCachimybatis中$和井号区别ng来开启基于注解的缓存

@Cacheable

mybatis注解在TeslaServiceImpl类上的getTeslaBspring翻译yI缓存英文d()方法未添加@Cacheable注解之前,每一次查询都会调用数据库执行SQL语句,@Cacheable注解可以将方法运行的结果缓存,以后查询结果相同的spring翻译数据直接缓存中获取,不会在调数据结构实验报告用方法

增加@Cacheable注解后,添加ca缓存清理cheNames属性,重启应用,多次查询只会执行一次SQL语句

@Cacheable的几mybatis分页插件实现原理个属性

  • cacheNames/valu数据结构实验报告e:指spring定缓存组件的名字
  • keymybatis动态sql:缓存数据用的Key,可以用来来指定具体的缓存内容,默认使用的是方法的参数值,也可以通过缓存视频合并SpELjsonobject指定spring漏洞,如”#id”既获取方法的参数id,”#result”为方法执行json数据的结果
  • keyGenerator:Key的生成器,可以自己指定Key的生成器组件id,key/keyGeneratospring翻译r二选一使用
  • ca缓存的视频在哪cheManager:指定缓存管理器,或者Cachspring翻译eResolver指定获取解析器
  • condition:指定符合条件的情况下才会缓存方法的执行结果,如果condition=”#id>0″
  • unless:否定缓存,当unle缓存ss的条件为true时,方法的返回值不json格式会被缓mybatis怎么读存,如unless=”缓存视频变成本地视频#result==null”既当结果返回为nmybatiMyBatiss分页插spring框架件实现原理ulmybatis怎么读l时不缓存
  • sync:是否使用异步模式

缓存SpELl表达式

名称 位置 描述 缓存视频怎样转入相册
methodNammybatis怎么读e root object 当前被调用的方法名 #root.met数据结构有哪些hodName
method root object 当前被调用的方法 #root.method.name
target root object 当前被调缓存视频变成本地视频用的目标对象 #root.taspringrget
targespring翻译tClass root object 当前被调用的目标对象类 #root.targetClasspring框架s
args rootmybatis框架 objejson数据ct 当前被调用的参数列表 #root.args[0]
cachesspring是什么意思 root object 当前方法调用使用的缓存列表数据结构c语言版,@Cacheable(value={“cache1”, “cache2”}) #root.caches.name[0]
argumMyBatisent name evaluation context 方法参数的名字,可以直接 “缓存的视频在spring漏洞#参数名”, 也可以使用”#p0″或者”#a0″, 0代表索引 #p0
result evaluation context 方法执行后的返回值,仅当该结果会被缓存时才可使用 #result
  • 实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统

    实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统

    需求背景

    (更多…)

  • 手撕 weak 源码

    手撕 weak 源码

  • 在Go中使用JSON。带例子的指南

    在Go中使用JSON。带例子的指南

    Golang(又称Go)是一种静态类型的编译编程语言,具有类似C语言的语法。Go为通用编程提供了一个最小的语法,只有25个关键词。

    (更多…)

  • 数栈在湖仓一体上的探索与实践

    数栈在湖仓一体上的探索与实践

    导读:

    (更多…)

  • MySQL实战45讲_26 | 备库为什么会延迟好几个小时?

    MySQL实战45讲_26 | 备库为什么会延迟好几个小时?

    26 | 备库为什么会延迟好几个小时?

    (更多…)

  • 「剑指Offer 06.从尾到头打印链表」

    「剑指Offer 06.从尾到头打印链表

    (更多…)

  • 入职Apifox研发组三个月,我领悟了30个高效开发方法🔥

    入职Apifox研发组三个月,我领悟了30个高效开发方法🔥

    「Offer 驾到,掘友接招!我正在参与2022春招系列活动-经验复盘,点击查看征文活动详情。

    (更多…)

  • 【🐯初/中级前端面经】中小型公司面试时都会问些什么?

    【🐯初/中级前端面经】中小型公司面试时都会问些什么?

    「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」

    (更多…)

  • 面试官:你都工作3年了,这个算法题都不会?

    面试官:你都工作3年了,这个算法题都不会?

    也许你我素未谋面,但很可能相见恨晚,我是前端胖头鱼

    (更多…)

  • 天啦,从Mongo到ClickHouse我到底经历了什么?

    天啦,从Mongo到ClickHouse我到底经历了什么?

    前言:

    (更多…)

  • 聊聊写代码的20个反面教材

    聊聊写代码的20个反面教材