Redis学习笔记(四)

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis的配置文件是非常重要的Redis使用Jedis连接Redis的持久化

十、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文件。f7b9823e8f344a6795c16a035c1013c6

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 持久化

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
存储 NoSQL Linux
小白带你学习linux的Redis基础(三十二)
小白带你学习linux的Redis基础(三十二)
74 0
|
3月前
|
存储 NoSQL Redis
redis源码学习
redis源码学习
|
4月前
|
存储 NoSQL Ubuntu
在Ubuntu上安装Redis并学习使用get、set和keys命令
在Ubuntu上安装Redis并学习使用get、set和keys命令
|
5月前
|
缓存 NoSQL Redis
【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构
【Redis 系列】redis 学习十六,redis 字典(map) 及其核心编码结构
|
5月前
|
NoSQL 算法 Redis
【Redis 系列】redis 学习十四,sorted_set 初步探究梳理
【Redis 系列】redis 学习十四,sorted_set 初步探究梳理
|
5月前
|
存储 NoSQL Redis
【Redis 系列】redis 学习十五,redis sds数据结构和底层设计原理
【Redis 系列】redis 学习十五,redis sds数据结构和底层设计原理
|
5月前
|
负载均衡 NoSQL Redis
【Redis 系列】redis 学习十,Redis 集群搭建和主从复制
【Redis 系列】redis 学习十,Redis 集群搭建和主从复制
|
3月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
82 2
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
73 0
|
5月前
|
存储 NoSQL 算法
[Redis 系列]redis 学习 17,redis 存储结构原理 1
[Redis 系列]redis 学习 17,redis 存储结构原理 1

热门文章

最新文章