Redis学习笔记(四)

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
目录
相关文章
|
1月前
|
NoSQL 数据可视化 Linux
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
本文介绍了Redis的两个可视化管理工具:付费的Redis Desktop Manager和免费的Another Redis DeskTop Manager,包括它们的下载、安装和使用方法,以及在使用Another Redis DeskTop Manager连接Redis时可能遇到的问题和解决方案。
126 1
redis学习四、可视化操作工具链接 centos redis,付费Redis Desktop Manager和免费Another Redis DeskTop Manager下载、安装
|
5月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
Redis系列学习文章分享---第十六篇(Redis原理1篇--Redis数据结构-动态字符串,insert,Dict,ZipList,QuickList,SkipList,RedisObject)
85 1
|
1月前
|
NoSQL Linux Redis
Docker学习二(Centos):Docker安装并运行redis(成功运行)
这篇文章介绍了在CentOS系统上使用Docker安装并运行Redis数据库的详细步骤,包括拉取Redis镜像、创建挂载目录、下载配置文件、修改配置以及使用Docker命令运行Redis容器,并检查运行状态和使用Navicat连接Redis。
251 3
|
1月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
31 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
5月前
|
NoSQL Java Redis
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
Redis系列学习文章分享---第十八篇(Redis原理篇--网络模型,通讯协议,内存回收)
84 0
|
5月前
|
存储 消息中间件 缓存
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
Redis系列学习文章分享---第十七篇(Redis原理篇--数据结构,网络模型)
97 0
|
5月前
|
存储 NoSQL 算法
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
Redis系列学习文章分享---第十篇(Redis快速入门之附近商铺+用户签到+UV统计)
41 0
|
5月前
|
存储 NoSQL Redis
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
Redis系列学习文章分享---第九篇(Redis快速入门之好友关注--关注和取关 -共同关注 -Feed流实现方案分析 -推送到粉丝收件箱 -滚动分页查询)
67 0
|
5月前
|
消息中间件 负载均衡 NoSQL
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
Redis系列学习文章分享---第七篇(Redis快速入门之消息队列--List实现消息队列 Pubsub实现消息队列 stream的单消费模式 stream的消费者组模式 基于stream消息队列)
73 0
|
5月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
229 0
下一篇
无影云桌面