Redis进阶

Redis持久化配置

简介
在这里插入图片描述

Redis 提供了两种不同级别的持久化方式:RDB和AOF,可以通过修改redis.conf来进行配置.
在这里插入图片描述

当满足持久化条件时,会进行持久化保存,还来不及保存的数据,会以aof日志的方式保存下来。Redis启动时,先解析日志文件(一堆命令),恢复数据。然后还要加载rdb文件(取并集)。

RDB模式
RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照,默认开启该模式.
如何关闭 rdb 模式:
save “”
#save 900 1 //至少在900秒的时间段内至少有一次改变存储同步一次
#save xxx
#save 60 10000

AOF日志追加模式
AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数据集,默认关闭该模式。
如何开启aof模式:
appendonly yes //yes 开启,no 关闭
#appendfsync always //每次有新命令时执行一次fsync,就将缓冲区的数据放入aof文件
#这里我们启用 everysec
appendfsync everysec //每秒 fsync 一次
#appendfsync no //从不fsync(交给操作系统来处理,可能很久才执行一次fsync)
其它的参数请大家看redis.conf配置文件详解

如果满足保存策略,就会把内存的数据保存到数据文件中,还来不及保存那部分数据存放到更新日志中。在加载时,会把两个数据做一个并集。

Redis高级

redis集群
为啥要集群,一台服务器内存有限,存放的数据太多不能满足。多台服务器做集群,可实现高并发。
在这里插入图片描述

Redis Spring集成
一般项目总都是有Spring,我们使用jedis访问reids时,所有要jedis被Spring管理。集群原理就是把核心对象交给Spring管理。
Jedis核心对象:配置文件,连接池配置对象,连接池。
集成方式有两种:
Spring data-redis
自己封装(自己封装)

导入jar包
准备配置文件,配置核心对象
加载配置文件
连接池配置对象
连接池对象
管理连接对象
操作crud模板
把配置文件集成Spring–以外部文件的方式进行导入
测试
通过crud模板操作redis

Redis经典实用场景-缓存

  • 为什么要使用缓存

把经常查询的数据,很少修改的数据存放到缓存中,减少访问数据库,降低数据库压力并且缓存一般都是内存,访问速度比较快。

  • 哪些数据适合放到缓存中

经常查询:缓存就是提供数据查询高效访问。
很少修改:修改时要同步修改缓存和数据库
例如:地区数据、商品分类、数据字典 菜单(不考虑权限)

  • 选择合适的缓存

Hibernate二级缓存,mybatis二级缓存,redis中央缓存
Hibernate二级缓存,mybatis二级缓存默认不支持集群缓存,要使用redis

  • 怎么存储数据

1) json:把要存放的数据转换为json类型的字符串
保存缓存时:
Java Object----------->json字符串
获取缓存:
json字符串-------->Java Object-
Json框架:jdk-json-lib jackson gson fastjson(阿里巴巴)

2)二进制存放:把要存放的数据序列化为二进制
序列化框架实现

  • 实现菜单缓存

在这里插入图片描述在这里插入图片描述在这里插入图片描述

淘汰策略

  • 为什么要淘汰数据

淘汰一些数据,达到redis数据量都是有效的。选择合适的淘汰策略进行淘汰.

  • 怎么淘汰

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰
volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰
volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意(随机)选择数据淘汰
allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰
allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰
no-enviction(驱逐):禁止驱逐数据(不删除任意数据.默认策略,但redis还会根据引用计数器进行释放),这时如果内存不够时,会直接返回错误)

redis 确定驱逐某个键值对后,会删除这个数据并,并将这个数据变更消息发布到本地(AOF 持久化)和从机(主从连接)。

### Redis 的高级用法和特性 #### 1. 使用带有自动补全和语法高亮的交互式 CLI 为了更高效地管理和操作 Redis 数据库,可以采用具备自动完成命令以及提供语法高亮特性的客户端工具。这种增强型CLI能够显著提升用户体验,在执行复杂查询时尤为有用[^1]。 ```bash # 安装并运行支持自动完成与语法高亮特性的Redis CLI pip install interactive-redis-cli interactive_redis_cli ``` #### 2. 启用多种持久化机制保障数据安全 通过配置 `redis.conf` 文件中的设置项来激活 RDB (快照) 和 AOF (追加仅文件) 这两种不同的持久化策略。这有助于防止意外断电或其他异常情况造成的数据丢失风险。当容器启动时指定挂载外部卷用于存储这些持久化的数据库副本,从而实现跨重启后的状态保持[^2]。 ```dockerfile # Docker Compose 或者直接使用Docker指令启动带持久化的Redis实例 docker run --name redis \ -v /local/path/to/data:/data \ -v /local/path/to/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -p 6379:6379 -d redis \ redis-server /usr/local/etc/redis/redis.conf ``` #### 3. 创建受限账户提高安全性 对于生产环境下的 Redis 实例来说,创建一个专门的服务账号是非常重要的一步。该账号不具备 shell 访问权限,并且其家目录也被移除以减少潜在的安全威胁。此外还将 Redis 可执行程序及其工作路径赋予此特定用户组所有权,确保只有授权人员才能对其进行修改或访问[^3]。 ```bash # 添加不具Shell登录能力也不拥有Home Directory的新用户 sudo useradd -M -s /sbin/nologin redis # 更改Redis安装目录所属权给新建立的用户 chown -R redis:redis /path/to/installation/ ``` #### 4. 构建分布式集群架构扩展性能 随着业务增长带来的负载压力增大,单机版 Redis 很难满足需求。此时可以通过构建多节点组成的集群模式来进行横向扩容。每个节点负责处理一部分键空间内的读写请求,而整个系统的吞吐量则取决于所有成员共同协作的结果。在实际部署过程中需注意各服务器间网络连接质量及延迟等因素的影响[^4]。 ```bash # 分别于不同主机上依次启动多个Redis服务端进程作为集群组成部分之一 /usr/local/redis/src/redis-server /etc/redis/node-01.conf /usr/local/redis/src/redis-server /etc/redis/node-02.conf ... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值