十、Redis配置文件详解
网络
bind 127.0.0.1 -::1 # 绑定的IP
protected-mode yes # 保护模式
port 6379 # 默认端口号
通用GENERAL
daemonize yes # 以守护进程的方式运行,默认是no,我们需要修改为yes
pidfile /var/run/redis_6379.pid # 如果以后台方式运行,我们就需要指定一个pid文件
# 日志
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel notice
logfile "" # 日志的文件位置名
databases 16 # 数据库的数量,默认16个数据库
always-show-logo no # 是否总显示LOGO
快照
持久化,在规定的时间内,执行了多少次操作,则会持久化到文件 .rdb .aof
redis 是内存数据库,如果没有持久化,那么数据断电即失!
# 如果3600秒内,如果至少有一个key进行了修改,我们就会进行持久化操作
save 3600 1
# 如果300秒内,如果至少有100个key进行了修改,我们就会进行持久化操作
save 300 100
# 如果60秒内,如果至少有10000个key进行了修改,我们就会进行持久化操作
save 60 10000
# 我们后续会定义自己的测试
stop-writes-on-bgsave-error yes # 持久化如果出错,是否继续工作
rdbcompression yes # 是否压缩rdb文件,需要消耗一些CPU的资源
rdbchecksum yes # 保存rdb文件的时候,进行错误的检查校验
dir ./ # rdb文件保存的目录
SECURITY 安全
设置密码
127.0.0.1:6379> CONFIG GET requirepass #获取redis的密码
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG SET requirepass "zjch1328" # 设置redis的密码
OK
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "zjch1328"
127.0.0.1:6379> CONFIG GET requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH zjch1328 # 使用密码进行登录
OK
CLIENTS 客户端
maxclients 10000 # 设置能连接上redis的最大客户端的数量
maxmemory <bytes> # redis 配置最大的内存容量
maxmemory-policy noeviction # 内存到达上限之后的处理策略
1、volatile-lru:只对设置了过期时间的key进行LRU(默认值)
2、allkeys-lru : 删除lru算法的key
3、volatile-random:随机删除即将过期key
4、allkeys-random:随机删除
5、volatile-ttl : 删除即将过期的
6、noeviction : 永不过期,返回错误
APPEND ONLY aof模式
appendonly no # 默认是不开启aof模式的
appendfilename "appendonly.aof" # 持久化的文件的名字
# appendfsync always # 每次修改都会写入 sync
appendfsync everysec # 美妙执行一次 sync,可能会丢失着一秒的数据
# appendfsync no # 不执行 sync,这个时候操作系统自己同步数据,速度最快
10.2、网络相关的配置
- bind 默认情况 bind=127.0.0.1 只能接受本机的访问请求 注释掉bind=127.0.0.1
- 不写的情况下,无限制接受任何IP地址访问,生产环境肯定要写你的应用服务器的地址;服务器是需要远程访问的,所以要将其注释掉。
- protected-mode 开启之后,也只能本地链接 把protected-mode no
- tcp-backlog 设置tcp的backlog,backlog其实是一个链接队列,backlog队列=未完成三次握手的队列+王城三次握手的队列。在高并发下你需要一个高的backlog值来避免慢客户端的问题
- timeout 设置连接无操作超时时间
十一、Jedis
测试
1、导入对应的依赖
<dependencies>
<!--导入jedis的依赖包-->
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
</dependencies>
2、编码测试
- 连接数据库
- 操作命令
- 断开连接
public class TestPing {
public static void main(String[] args) {
// 1、new Jedis()对象即可
Jedis jedis = new Jedis("***.***.***.***",6379);
// jedis 所有命令就是之前的所有指令
jedis.auth("*******");
System.out.println(jedis.ping());
}
}
IDEA上连接jedis时报错:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
解决:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
查看端口开放信息,如果没看见 6379,就需要设置
firewall-cmd --list-ports
开启 6379 端口
firewall-cmd --zone=public --add-port=6379/tcp --permanent
最后记得重载防火墙生效
重载:firewall-cmd --reload
十二、Redis的持久化
RDB
rdb保存的文件是dump.rdb都在我们的配置文件快照中进行配置的!
触发机制
1、save的规则满足的情况下,会自动触发rdb规则
2、执行了flushall命令也会触发我们的rdb规则
3、退出redis,也会产生rdb文件
备份就自动生成一个dump.rdb
比如save 10 100表示10秒内有n次修改时,自动触发bgsave,还有其他配置。
stop-writes-on-bgsave-error:设置yes表示bgsave失败时redis停止接收数据
rdbcompression:是否压缩
rdbchecksum:持久化时是否进行数据校验
如何恢复rdb文件!
1、只需要将rdb文件放在我们redis启动目录就可以,redis启动的时候会自动检查dump.rdb恢复其中的数据!
2、查看需要存放的位置
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/usr/local/bin" # 如果在这个目录下存在dump.rdb文件,启动就会自动恢复其中的数据
优点:
1、适合大规模的数据恢复!
2、对数据的完整性要求不高!
缺点:
1、需要一定的时间间隔进行操作如果redis意外宕机了这个最后一次的修改数据就没了
2、fork进程的时候,会占用一定的内存空间
AOF
AOF是指Redis将每一条指令(这里指可能对数据状态产生变化的写指令)通过write写入到AOF文件中。为了解决aof文件越来越大问题,redis提供bgrewriteaof命令,将内存数据先写入到内存文件,再fork线程将文件重写到新的aof文件。
AOF的三种触发机制
1、always:每次修改立即写入磁盘,性能最差数据完整性最好
2、everysec:每秒将内存指令写入磁盘,可能会造成数据丢失
3、no:由操作系统决定将内存指令写入磁盘
append
默认时不开启的,需要我们进行手动配置! 我们只需要将appendonly 改为yes就开启了 aof !
重启,redis就可以生效了!
如果这个aof文件有错误,这时候redis是启动不起来的,我们需要修复这个aof文件
redis 给我们提供了一个工具redis-check-aof --fix
优点和缺点!
appendonly no # 默认是不开启aof模式的
appendfilename "appendonly.aof" # 持久化的文件的名字
# appendfsync always # 每次修改都会写入 sync
appendfsync everysec # 美妙执行一次 sync,可能会丢失着一秒的数据
# appendfsync no # 不执行 sync,这个时候操作系统自己同步数据,速度最快
优点:
1、每一次修改都会同步,文件的完整会更加好!
2、每秒同步一次,可能会丢失一秒的数据
3、从不同步,效率是最高的
缺点:
1、相对于数据文件来说,aof远远大于rdb,修复的速度也比rdb慢
2、aof运行的效率也要比 rdb 慢,所以我们redis默认的配置就是 rdb 持久化