文章目录

  • SpringBoot集成Junit5
  • SpringBoot集成MyBatis
  • SpringBoot集成hikari
  • hikari数据库连接池
  • hikari的配置属性
  • SpringBoot集成JPA
  • JPA的注解
  • 集成JPA生成数据库表步骤
  • Lombok的使用
  • Idea安装Lombok插件,开启注解
  • 开启Lombok的注解支持
  • Lombok的注解
  • Lombok的使用需要加入依赖
  • SpringBoot集成redis
  • RedisTemplate介绍
  • redisTemplate.boundValueOps()方法介绍
  • Redis配置属性参数


SpringBoot集成Junit5

SpringBoot默认集成Junit5,可以直接使用。通过在单元测试类上添加注解 @SpringBootTest 然后在方法方法上添加注解 Test 来实现单元测试。

测试类

@SpringBootTest
class Demo01JunitApplicationTests {

    @Autowired
    IPersonService personService;
    
    @Test
    public void testPerson() {
        //new PersonServiceImpl().savePerson();
        personService.savePerson();
    }
}

service接口和对应的实现类

public interface IPersonService{
    boolean savePerson();
}
@Service
public class PersonServiceImpl implements IPersonService {

    @Override
    public boolean savePerson() {
        System.out.println("PersonServiceImpl savePerson 成功!");
        return true;
    }
}

SpringBoot集成MyBatis

  1. 先准备数据库SpringBoot和创建Person表用于测试
create database springboot;
create table `person` (
  `id` int(11) not null auto_increment,
  `name` varchar(30) default null,
  `age` int(11) default null,
  primary key (`id`)
) engine=innodb auto_increment=4 default charset=utf8;

insert into `person` values ('1', 'strive_day', '21');
insert into `person` values ('2', 'study', '4');
insert into `person` values ('3', '小皮孩', '12');
  1. 通过SpirngBoot的初始化生成器勾选MyBatis和MySQL依赖。
    勾选之后,创建的项目会自动添加MyBatis和MySQL需要的依赖(你需要用到什么,就勾选什么,是不是比Spring方便多了)

    这样在pom.xml中自动集成了mybatis依赖
<dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.3</version>
        </dependency>
  1. 创建Person类
    Person
public class Person {
    private int id;
    private String name;
    private int age;
    //省略get/set方法
}
  1. 配置数据库连接,配置MyBatis
    application.yml
spring:
  datasource: # hikari
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8
    username: root
    password: 861221293
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8  # serverTimezone=GMT%2B8表示东8区,不然报错time zone

# 配置Mybatis:实体类别名包、映射文件、日志等
mybatis:
  type-aliases-package: com.xgf.demo02_mybatis.domain # 类型别名(以后可以用类名以小写字母开头来代替)
  mapper-locations: classpath:com.xgf.demo02_mybatis.dao/*.xml  # xml文件(mapper映射),类路径
  #使用注解在启动类上面配置注解 @MapperScan("com.xgf.demo02_mybatis.dao")   //用于存放dao接口
  # 配置MyBatis的日志(添加这个配置就可以了奈斯)
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #mybatis日志
  1. 在Application启动类上添加@MapperScan注解扫描dao
@SpringBootApplication
@MapperScan("com.xgf.demo02_mybatis.dao")   //扫描dao接口
public class Demo02MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(Demo02MybatisApplication.class, args);
    }
}
  1. SpirngBoot集成MyBatis测试
    6.1 编写Mapper接口(dao)
    PersonDao
public interface PersonDao {
    //查找所有的person
    List<Person> findAllPersons();
}

6.2 配置Mapper映射文件
PersonDao.xmll

<?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.xgf.demo02_mybatis.dao.PersonDao">

    <select id="findAllPersons" resultType="person">
        select * from person
    </select>
</mapper>

6.3 编写测试类测试

@SpringBootTest
class Demo02MybatisApplicationTests {

    @Autowired
    PersonDao personDao;    //如果出现运行无错误,编译爆红,按Alt+Enter修复选择disabled inspection不做语法检查

    @Test
    void test01() {
        System.out.println(personDao.findAllPersons());
    }
}

6.4 运行结果

springboot dao层和mybatis的mapper_SpringBoot整合框架

【注意】
如果出现错误java.sql.SQLException: The server time zone value,这是因为jdbc驱动的时区要设置,可以设置为东八区(北京时间)
jdbcURL
jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8




SpringBoot集成hikari

hikari数据库连接池

Hikari是一款非常强大,高效,并且号称【史上最快连接池】。并且在springboot2.0之后,采用的默认数据库连接池就是Hikari。不需要引入依赖,已经在SpringBoot中包含了。
已经自动集成了,我们只需要配置就行

HikariCP的GitHub地址:https://github.com/brettwooldridge/HikariCP

因为SpringBoot默认使用hikari数据库连接池,所以我们只需要修改hikari的配置属性就行。
application.yml

# 数据库配置
spring:
  datasource: # hikari
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8
    username: root
    password: 861221293
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8  # serverTimezone=GMT%2B8表示东8区,不然报错time zone

  # 修改Hikari 连接池配置
  # 最小空闲连接数量
  hikari:
    minimum-idle: 5
    # 空闲连接存活最大时间,默认600000(10分钟)
    idle-timeout: 180000
    # 连接池最大连接数,默认是10
    maximum-pool-size: 10
    # 此属性控制从池返回的连接的默认自动提交行为,默认值:true
    auto-commit: true
    # 连接池名称
    pool-name: MyHikariCP
    # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
    max-lifetime: 1800000
    # 数据库连接超时时间,默认30秒,即30000
    connection-timeout: 30000
    connection-test-query: SELECT 1

hikari的配置属性

Hikari 配置名称

描述

默认值

默认配置validate之后的值

validate重置

autoCommit

自动提交从池中返回的连接

true

true

-

connectionTimeout

等待来自池的连接的最大毫秒数

SECONDS.toMillis(30) = 30000

30000

如果小于250毫秒,则被重置回30秒

idleTimeout

连接允许在池中闲置的最长时间

MINUTES.toMillis(10) = 600000

600000

如果idleTimeout+1秒>maxLifetime 且 maxLifetime>0,则会被重置为0(代表永远不会退出);如果idleTimeout!=0且小于10秒,则会被重置为10秒

maxLifetime

池中连接最长生命周期

MINUTES.toMillis(30) = 1800000

1800000

如果不等于0且小于30秒则会被重置回30分钟

connectionTestQuery

如果您的驱动程序支持JDBC4,我们强烈建议您不要设置此属性

null

null

-

minimumIdle

池中维护的最小空闲连接数

-1

10

minIdle<0或者minIdle>maxPoolSize,则被重置为maxPoolSize

maximumPoolSize

池中最大连接数,包括闲置和使用中的连接

-1

10

如果maxPoolSize小于1,则会被重置。当minIdle<=0被重置为DEFAULT_POOL_SIZE则为10;如果minIdle>0则重置为minIdle的值

metricRegistry

该属性允许您指定一个 Codahale / Dropwizard MetricRegistry 的实例,供池使用以记录各种指标

null

null

-

healthCheckRegistry

该属性允许您指定池使用的Codahale / Dropwizard HealthCheckRegistry的实例来报告当前健康信息

null

null

-

poolName

连接池的用户定义名称,主要出现在日志记录和JMX管理控制台中以识别池和池配置

null

HikariPool-1

-

initializationFailTimeout

如果池无法成功初始化连接,则此属性控制池是否将 fail fast

1

1

-

isolateInternalQueries

是否在其自己的事务中隔离内部池查询,例如连接活动测试

false

false

-

allowPoolSuspension

控制池是否可以通过JMX暂停和恢复

false

false

-

readOnly

从池中获取的连接是否默认处于只读模式

false

false

-

registerMbeans

是否注册JMX管理Bean(MBeans

false

false

-

catalog

为支持 catalog 概念的数据库设置默认 catalog

driver default

null

-

connectionInitSql

该属性设置一个SQL语句,在将每个新连接创建后,将其添加到池中之前执行该语句。

null

null

-

driverClassName

HikariCP将尝试通过仅基于jdbcUrl的DriverManager解析驱动程序,但对于一些较旧的驱动程序,还必须指定driverClassName

null

null

-

transactionIsolation

控制从池返回的连接的默认事务隔离级别

null

null

-

validationTimeout

连接将被测试活动的最大时间量

SECONDS.toMillis(5) = 5000

5000

如果小于250毫秒,则会被重置回5秒

leakDetectionThreshold

记录消息之前连接可能离开池的时间量,表示可能的连接泄漏

0

0

如果大于0且不是单元测试,则进一步判断:(leakDetectionThreshold < SECONDS.toMillis(2) or (leakDetectionThreshold > maxLifetime && maxLifetime > 0),会被重置为0 . 即如果要生效则必须>0,而且不能小于2秒,而且当maxLifetime > 0时不能大于maxLifetime

dataSource

这个属性允许你直接设置数据源的实例被池包装,而不是让HikariCP通过反射来构造它

null

null

-

schema

该属性为支持模式概念的数据库设置默认模式

driver default

null

-

threadFactory

此属性允许您设置将用于创建池使用的所有线程的java.util.concurrent.ThreadFactory的实例。

null

null

-

scheduledExecutor

此属性允许您设置将用于各种内部计划任务的java.util.concurrent.ScheduledExecutorService实例

null

null

-

此图来自CSDN【把酒问天】博客:




SpringBoot集成JPA

JPA(Java Persistence API)java 持久化应用接口,简单说就是一种规范。是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
目前有很多java持久层的框架,比如Hibernate、TopLink、OpeanJPA等等,这么多框架导致java程序员不得不学习多种持久层框架。
使用JPA规范的持久层框架,只要按照JPA的规范开发持久层代码,而不用关心究竟是哪种框架实现的,而且JPA还对实现其规范的持久层框架做了封装,使得这些框架在使用时更加方便。

JPA的注解

JPA注解

作用描述

@Entity

声明类为实体或表。

@Table

声明表名。

@Basic

指定非约束明确的各个字段。

@Embedded

指定类或它的值是一个可嵌入的类的实例的实体的属性。

@Id

指定的类的属性,用于识别(一个表中的主键)。

@GeneratedValue

指定如何标识属性可以被初始化,例如自动、手动、或从序列表中获得的值。

@Transient

指定的属性,它是不持久的,即:该值永远不会存储在数据库中。

@Column

指定持久属性栏属性。

@SequenceGenerator

指定在@GeneratedValue注解中指定的属性的值。它创建了一个序列。

@TableGenerator

指定在@GeneratedValue批注指定属性的值发生器。它创造了的值生成的表。

@AccessType

这种类型的注释用于设置访问类型。如果设置@AccessType(FIELD),则可以直接访问变量并且不需要getter和setter,但必须为public。如果设置@AccessType(PROPERTY),通过getter和setter方法访问Entity的变量。

@JoinColumn

指定一个实体组织或实体的集合。这是用在多对一和一对多关联。

@UniqueConstraint

指定的字段和用于主要或辅助表的唯一约束。

@ColumnResult

参考使用select子句的SQL查询中的列名。

@ManyToMany

定义了连接表之间的多对多一对多的关系。

@ManyToOne

定义了连接表之间的多对一的关系。

@OneToMany

定义了连接表之间存在一个一对多的关系。

@OneToOne

定义了连接表之间有一个一对一的关系。

@NamedQueries

指定命名查询的列表。

@NamedQuery

指定使用静态名称的查询。

来自CSDN【深存少年梦】:

(1)添加Spring Data JPA的起步依赖
(2)添加数据库驱动依赖
(3) 在application.properties中配置数据库和jpa的相关属性

集成JPA生成数据库表步骤

  1. SpirngBoot自动集成了JPA,通过SpringBoot的初始化工具创建勾选就能集成。

    这样在pom.xml中就自动集成了JPA的依赖
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
  1. 配置JAP和mysql
    application.yml
# 数据库配置
spring:
  datasource: # hikari
    type: com.zaxxer.hikari.HikariDataSource  # 数据库类型,默认就是hikari(如果不改的话可以不写)
    driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8 需要添加时区
    username: root
    password: 861221293
    url: jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8  # serverTimezone=GMT%2B8表示东8区,不然报错time zone


  # 配置jpa
  jpa:
    database: mysql  # 使用的数据库MySQL数据库
    show-sql: true   # 对框架操作,希望显示sql语句
    generate-ddl: true  # 自动生成主键
    hibernate:
      ddl-auto: update  # 表的生成策略,设置为update,如果表不存在就创建表,否则直接使用操作表,配置create,就是每次都创建
      naming: # 命名生成策略,设置表的字段生成方式(小驼峰/下划线形式)
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy  #下划线形式aa_bb_cc
        #PhysicalNamingStrategyStandardImpl小驼峰形式aaBbCc
        #SpringPhysicalNamingStrategy 下划线形式aa_bb_cc(一般数据库表字段以下划线形式生成,所以用这种)
  1. 创建User类(需要生成的数据库表)
@Entity     //表示当前类,在数据库有表与它对应
@Table(name = "tb_user")    //数据库的表,与当前类对应,这里会有下划线报错,但是无影响
public class User {
    @Id     //表示id
    @GeneratedValue(strategy = GenerationType.IDENTITY)     //id设为主键自增长
    private int id;

    private String username;
    private String password;
    private String girlFriend;  //小驼峰形式
    private String name;
    //省略get/set方法
}
  1. 创建dao来实现增删查改

这里我们只需要用集成JPA的JpaRepository类,就可以实现表的基本增删查改了。
JpaRepository<T,ID> : T泛型,写类名称(对应的表),ID是表的主键。

//继承通用的JPA接口JpaRepository<T,ID>,就可以可完成增删改查
public interface UserDao extends JpaRepository<User,Integer> {
}

里面什么都不用写,因为JpaRepository类已经满足我们需要的基本的增删查改了。

JpaRepository类的内容

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List<T> findAll();

    List<T> findAll(Sort var1);

    List<T> findAllById(Iterable<ID> var1);

    <S extends T> List<S> saveAll(Iterable<S> var1);

    void flush();

    <S extends T> S saveAndFlush(S var1);

    void deleteInBatch(Iterable<T> var1);

    void deleteAllInBatch();

    T getOne(ID var1);

    <S extends T> List<S> findAll(Example<S> var1);

    <S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
  1. 创建测试类,测试通过JPA进行数据库操作
@SpringBootTest
class Demo03JpaApplicationTests {

    @Autowired
    UserDao userDao;

    //测试通过JPA插入数据库字段(配置jpa的时候配置了ddl-auto: update,所以如果不存在对应的表就创建,存在更新数据)
    @Test
    void test01() {
        User user = new User();
        user.setGirlFriend("strive_day");
        user.setUsername("strive_gf@163.com");
        user.setName("jpa测试");
        userDao.save(user);//--->orm方式 -- >将对象值取出-->sql-->数据库
    }

    //测试查询插入的字段
    @Test
    void test02() {

        List<User> allUser = userDao.findAll();
        System.out.println(allUser);
    }

}

6.运行结果

test01方法,插入数据库成功(并且生成了对应User类上的注解@Table(name = "tb_user")的表tb_user)

springboot dao层和mybatis的mapper_redis_02


查看数据库

springboot dao层和mybatis的mapper_SpringBoot整合框架_03


运行test02,通过JPA查询所有的数据

springboot dao层和mybatis的mapper_SpringBoot整合框架_04




Lombok的使用

我们一般编写数据库表对应的实体类(比如Person、User等等实体类),一般情况下都需要编写对应的get/set/toString等这些方法,但是编写这些会耗时并且会让实体类看起来比较臃肿(字段一多,就有一堆的get、set方法)。

这时候就可以使用lombok插件对实体类进行简化
Lombok是一个插件工具类包,提供了一些注解像@Data、@Getter等这些注解去简化实体类中的构造方法、get、set等方法的编写。
就是通过注解,简化javabean(或者叫pojo)实体类的代码,让我们不需要编写构造方法、get、set等方法又能满足我们调用构造方法、get、set等方法。

Idea安装Lombok插件,开启注解

file -> settings -> Plugins -> Marketplace -> 搜索框输入Lombok搜索,然后点击Install下载,下载成功重启idea就可以使用了

springboot dao层和mybatis的mapper_SpringBoot_05

开启Lombok的注解支持

File -> Settings -> 搜索Annotation -> 打开Annotatin Processors -> 勾选Enable annotation processors -> Apply -> ok

springboot dao层和mybatis的mapper_redis_06

Lombok的注解

Lombok类的注解

作用描述

@Data

在JavaBean中使用,该注解自动提供getter、setter、hashCode、equals、toString等方法

@getter

在JavaBean中使用,该注解会生成对应的getter方法

@setter

在JavaBean中使用,注解会生成对应的setter方法

@Slf4j

在需要打印日志的类中使用,项目中使用slf4j日志框架,自动在bean中提供log变量,其实就是用的slf4j的日志功能(使用sl4j调用log4j)

@Log4j

在需要打印日志的类中使用,项目中使用log4j日志框架

@ToString

在JavaBean中使用,注解会自动重写对应的toStirng方法

@ToString(exclude={"column1","column2"}):排除多个column列所对应的元素

@ToString(of={"column1","column2"}):只生成包含多个column列所对应的元素

@NoArgsConstructor

在JavaBean中使用,注解会生成对应的无参构造方法

@AllArgsConstructor

在JavaBean中使用,注解会生成对应的有参构造方法

@EqualsAndHashCode

在JavaBean中使用,注解会自动重写对应的equals方法和hashCode方法

@NonNull

快速判断是否为空null,为空抛出``java.lang.NullPointerException`异常

@Synchronized

该注解自动添加到同步机制,生成的代码并不是直接锁方法,而是锁代码块, 作用范围是方法上

@Cleanup

该注解用于确保已分配的资源被释放(IO的连接关闭)

@Accessors(chain = true)

链式风格,在调用set方法时,返回这个类的实例对象

来自博客园【张界】:

Lombok的使用需要加入依赖

pom.xml中加入Lombok对应的依赖

<!-- 插入lombok的依赖 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>




SpringBoot集成redis

redis执行流程图

springboot dao层和mybatis的mapper_java_07

  1. 勾选Redis创建SpringBoot项目
  2. 创建测试类模拟Redis缓存
    先开启Redis服务器

    按照你自己的需要对application.ymlapplication.properties文件进行修改
    比如:application.properties
# redis配置
spring.redis.host=localhost # 主机地址
spring.redis.port=6379      # 端口号

使用RedisTemplate模拟缓存,用创建数据模拟从数据库查找数据。

@SpringBootTest
class Demo05RedisApplicationTests {

    //RedisTemplate来获取Redis连接
    @Autowired
    RedisTemplate<String, String> redisTemplate;

    @Test
    void test01() {

        /**
         * (BoundValueOperations)  redisTemplate.boundValueOps(key)方法
         *      append(String value)  在原来值的末尾添加值
         *      get()                 获取字符串所有值
         */


        //查找是否有缓存
        String cachejson = redisTemplate.boundValueOps("cacheJSON").get();

        //有就直接返回
        if (cachejson != null) {
            System.out.println("来自redis缓存 : " + cachejson);
        } else {
            //创建数据
            String json = "{name:strive_day,age:21}";
            //保存到缓存中,再显示
            redisTemplate.boundValueOps("cacheJSON").set(json);
            System.out.println("保存json " + json);
        }

    }

}

第一次运行结果:

springboot dao层和mybatis的mapper_SpringBoot_08


第2,3…n次运行结果:

springboot dao层和mybatis的mapper_SpringBoot整合框架_09

RedisTemplate介绍

spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。

RedisTemplate源码

public class RedisTemplate<K, V> extends RedisAccessor implements RedisOperations<K, V>, BeanClassLoaderAware {
    private boolean enableTransactionSupport = false;
    private boolean exposeConnection = false;
    private boolean initialized = false;
    private boolean enableDefaultSerializer = true;
}

RedisTemplate中定义的5种对数据结构操作方法

//就是对Redis五中结构类型进行操作
redisTemplate.opsForValue();	//操作字符串String
redisTemplate.opsForHash();		//操作hash
redisTemplate.opsForList();		//操作list
redisTemplate.opsForSet();		//操作set redisTemplate.opsForZSet();		//操作有序set
redisTemplate.boundValueOps()方法介绍

redis中通过键值对(key,value)存储数据
redisTemplate.boundValueOps(key)通过读取redis的key对value进行操作。
返回的是一个BoundValueOperations对象。

BoundValueOperations bvo= redisTemplate.boundValueOps("key"); bvo.append(); //原来值的末尾添加值bvo.get(); // 获取字符串所有值

append(String value)

在原来值的末尾添加值

get(key)

获取对应key的所有值

BoundValueOperations方法(V是泛型)

作用描述

get(long start, long end)

获取指定区间位置的值

set(V value)

给绑定键重新设置值

set(V value, long offset)

截取原有值的指定长度后添加新的值在后面

Boolean setIfAbsent(V value);

没有值存在就添加值

getAndSet(V value)

获取原来的值并重新赋新的值

size()

获取绑定值的长度

Redis配置属性参数

reids配置参数

参数属性说明

daemonize

如果值是“yes”,则启动服务的时候是后台守护进程形式,如果值是“no”,则相反

pidfile

指定存储Redis进程号的文件路径

port

指定当前Redis服务的端口,默认为6379

tcp-backlog

此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。

timeout

客户端和Redis服务端的连接超时时间,默认是0,表示永不超时。

tcp-keepalive

如果值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是60S。

loglevel

Redis总共支持四个级别:debug、verbose、notice、warning。Debug:记录很多信息,用于开发和测试;Varbose:有用的信息,不像debug会记录那么多;Notice:普通的verbose,常用于生产环境;Warning:只有非常重要或者严重的信息会记录到日志;默认是notice级别。

logfile

日志的存储路径

databases

可用的数据库数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间,个人觉得DB的概念类似于命名空间

save

保存数据库快照信息到磁盘,其对应的值有两个,比如save 300 10表示:300秒内至少有300个key被改变时,触发保存信息到磁盘的事件。

stop-writes-on-bgsave-error

当持久化出现错误之后,是否继续提供写服务

rdbcompression

持久化到RDB文件时,是否压缩,“yes”为压缩,“no”则反之

rdbchecksum

读取和写入的时候是否支持CRC64校验,默认是开启的

dbfilename

镜像文件的名字

dir

当前工作目录,配置文件和镜像文件等都在此目录下

masterauth

设置访问master服务器的密码

slave-serve-stale-data

当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候,如果此参数值设置“yes”,slave服务器可以继续接受客户端的请求,否则,会返回给请求的客户端如下信息“SYNC with master in progress”

slave-read-only

是否允许slave服务器节点只提供读服务

repl-disable-tcp-nodelay

指定向slave同步数据时,是否禁用socket的NO_DELAY选 项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到 slave的时间。若配置为“no”,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。 通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。

slave-priority

指定slave的优先级。在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master。需要注意的是,若该配置项为0,则对应的slave永远不会自动提升为master。

appendonly

开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF指令,对appendonly.aof 进行重新整理。默认是不开启的。

appendfilename

默认为appendonly.aof。

appendfsync

设置aof的同步频率,有三种选择always、everysec、no,默认是everysec表示每秒同步一次。

no-appendfsync-on-rewrite

指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。Redis在后台写RDB文件或重写afo文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。

auto-aof-rewrite-percentage

指定Redis重写aof文件的条件,默认为100,表示与上次rewrite的aof文件大小相比,当前aof文件增长量超过上次afo文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite

auto-aof-rewrite-min-size

指定触发rewrite的aof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite。

lua-time-limit

一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000

notify-keyspace-events

见参考3,按键通知事件

aof-rewrite-incremental-fsync

aof rewrite过程中,是否采取增量文件同步策略,默认为“yes”。 rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数