我们于2021/09/07 的学习目标是:Redis,核心任务为:
1、学习技术:
1)、关系型数据库与非关系型数据库
2)、Java操作Redis
3)、Redis搭建主从复用
2、文档总结
1)、关系型数据库与非关系型数据库
数据库按照连接分,可以分为关系型数据库和非关系型数据库
- 关系型数据库:指采用了关系模式(二维表格模型)来组织数据的数据库。
- 非关系型数据库:指非关系型的,分布式的,且一般不保证会遵循ACID原则的数据存储系统。
非关系型数据库的结构:
- 以键值对的形式存储数据
- 结构不固定
- 每一个元组可以有不一样的字段
- 每个元组可以根据需要增加键值对
- 不局限于固定结构
非关系型数据库的特点:
- 可以减少一些时间和空间的开销
- 适合大量,动态,短时间存储数据
关系型数据库与非关系型数据库的区别:
- 数据存储结构:关系型数据库有明确的表结构和表关系,并且需要使用DDL(Data Definition Language)即数据库模式定义语言来修改表结构,不是很容易进行扩展;非关系型数据库则是基于键值对的方式进行存储,对于数据的格式和结构十分灵活,方便扩展。
- 数据一致性:
- 关系型数据库强调数据的强一致性;非关系型数据库强调的是数据的最终一致性。
2)、Java操作Redis
创建SpringBoot项目并添加pom依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<!-- lookup parent from repository -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<!-- FIXME Subscribe to my BLOG!! -->
<groupId>com.sdf</groupId>
<artifactId>radis_test</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- JUnit Jupiter API -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.7.0</version>
<scope>test</scope>
</dependency>
<!-- spring data redis 组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!--
1.x 的版本默认采用的连接池技术是 Jedis,
2.0 以上版本默认连接池是 Lettuce,
如果采用 Jedis,需要排除 Lettuce 的依赖。
-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- jedis 依赖 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!-- web 组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- test 组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- TODO Subscribe qq_59903099@CSDN -->
</project>
application.yml配置文件
spring:
redis:
# Redis服务器地址
host: 192.168.11.4
# Redis服务器端口
port: 6379
# Redis服务器密码
password: qq_59903099@CSDN
# 选择哪个库,默认0库
database: 0
# 连接超时时间
timeout: 30000ms
jedis:
pool:
max-active: 1024
max-wait: 30000ms
max-idle: 200
min-idle: 5
测试连接
@Test
public void redisTest1() {
System.out.println("RedisTest.redisTest1");
Jedis jedis =new Jedis("192.168.11.4",6379,30000,30000);
jedis.auth("root");
jedis.select(0);
System.out.println(jedis.ping());
}
通过Redis连接池获取连接对象并操作服务器
@Test
public void redisTest2() {
// 初始化redis客户端连接池
JedisPool jedisPool = new JedisPool(new JedisPoolConfig(),"192.168.10.100", 6379, 10000, "root");
// 从连接池获取连接
Jedis jedis = jedisPool.getResource();
// 指定数据库 默认是0
jedis.select(2);
// 使用ping命令,测试连接是否成功
String result = jedis.ping();
System.out.println(result);// 返回PONG
// 添加一条数据
jedis.set("username", "zhangsan");
// 获取一条数据
String username = jedis.get("username");
System.out.println(username);
// 释放资源
if (jedis != null)
jedis.close();
}
3)、Redis搭建主从复用
创建三个目录
mkdir -p /opt/redis/data
mkdir -p /opt/redis/log
mkdir -p /opt/redis/conf
复制redis.conf至/opt/redis/conf目录下
cp /root/redis-5.0.5/redis.conf /opt/redis/conf/redis-common.conf
修改redis-common.conf公共配置文件
#注释绑定端口
#bind 127.0.0.1
#关闭保护模式,修改为no
protect-mode no
#注释公共配置端口
#port 6379
#修改为后台启动
daemonize yes
#注释进程编号记录文件
#pidfile /var/run/redis_6379.pid
#注释公共配置日志文件
#logfile ""
#注释公共配置日志文件
#在默认情况下,Redis 将数据库快照
#保存在名字为 dump.rdb 的二进制文件中
#当然,这里可以通过修改 redis.conf 配置文件
#来对数据存储条件进行定义
#规定在“ N 秒内数据集至少有 M 个改动”这一条件被满足时
#自动保存一次数据集
#也可以通过调用save 或bgsave
#手动让Redis进行数据集保存操作
#dbfilename和dir组合使用
#dbfilename找dir路径生成数据文件
#dbfilename dump.rdb
dir /opt/redis/data
#添加从服务器访问主服务器认证
masterauth root
#添加访问认证
requirepass root
# 当appendonly为yes时
#每当Redis执行一个改变数据集的命令时(比如 SET)
#这个命令就会被追加到 AOF 文件的末尾
#这样的话,当Redis重启时
#程序就可以通过重新执行AOF文件中的命令
#来达到重建数据集的目的
appendonly no
# appendfilename和dir组合使用,找dir(/opt/redis/data)路径生成数据文件
#appendfilename "appendonly.aof"
#从服务器默认是只读不允许写操作
#不用修改 :-)
slave-read-only yes
添加3个服务的私有配置文件
touch redis-6379.conf
touch redis-6380.conf
touch redis-6381.conf
编辑私有配置文件
#复制redis-6379.conf的内容至redis-6380.conf,redis-6381.conf
# 并且修改其内容,slaveof以外的将6379替换即可
#引用公共配置
include /opt/redis/conf/redis-common.conf
#进程编号记录文件
pidfile /var/run/redis-6379.pid
#进程端口号
port 6379
#日志记录文件
logfile "/opt/redis/log/redis-6379.log"
#数据记录文件
dbfilename dump-6379.rdb
#追加文件名称
appendfilename "appendonly-6379.aof"
#下面的配置无需在6379里配置
#备份服务器从属于6379推荐配置配局域网IP
slaveof 192.168.10.100 6379
查看redis服务器主从状态
./redis-cli -p 6379 -a root
运行命令
info replication
结果role:master
./redis-cli -p 6380 -a root
./redis-cli -p 6381 -a root
运行命令
info replication
结果role:slave
在主服务器下添加数据 并测试从服务器数据是否正常显示
结果:从服务器只读,不允许写操作