登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
签到
每天签到奖励2-10圆
导读
排行榜
TG频道
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
VIP申请
VIP网盘
网盘
联系我们
发帖说明
每日签到
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
安全
›
Redis组件介绍(三)
Redis组件介绍(三)
[ 复制链接 ]
睿哝
3 天前
写在前面
今天来继续学习 Redis。
Redis 持久化机制
快照 (Snapshot)
特点
快照持久化可以将某一时刻的所有数据写入硬盘,默认开启,保存为 .rdb 文件,也称为 RDB 持久化。
快照生成方式
客户端方式
BGSAVE
使用 BGSAVE 命令创建快照,Redis 会创建一个子进程进行写入,父进程继续处理命令请求。
名词解释
: fork 是创建子进程的操作,初期父子进程共享内存,直到写操作发生才会分开。
SAVE
使用 SAVE 命令创建快照,Redis 在快照创建期间会阻塞,不响应其他命令。
注意
: SAVE 命令会使 Redis 处于阻塞状态。
服务器配置自动触发
满足配置自动触发
在 redis.conf 中设置 save 配置选项,Redis 会在满足条件时自动触发 BGSAVE。
设置多个 save 选项时,任意条件满足均会触发 BGSAVE。
接收客户端 shutdown 指令
执行 shutdown 指令时,Redis 会执行 SAVE 命令,然后关闭服务器。
配置生成快照名称和位置
修改生成快照名称
dbfilename dump.rdb
修改生成位置
dir ./
问题
快照可能导致数据丢失,尤其是在快照后有写操作而断电的情况下。
AOF 只追加日志文件
特点
将所有写命令记录到日志文件中,通过执行日志文件中的命令来恢复数据。
开启 AOF 持久化
在 redis.conf 中开启:
appendonly yes
appendfilename "appendonly.aof"
日志追加频率
always
【谨慎使用】
每个写命令都同步写入硬盘,降低 Redis 性能,SSD 用户应慎用。
everysec
【推荐默认】
每秒同步一次 AOF 文件,性能与无持久化时接近,最多丢失一秒数据。
no
【不推荐】
由操作系统决定同步时间,不会影响 Redis 性能,但可能丢失不定数量的数据。
修改同步频率
修改 appendfsync 为 everysec、always 或 no。
AOF 文件的重写
AOF 文件会变大,Redis 提供 AOF 重写机制来压缩文件。
触发重写方式
客户端方式触发
执行 BGREWRITEAOF 命令,不会阻塞 Redis 服务。
服务器配置自动触发
配置 auto-aof-rewrite-percentage 和 auto-aof-rewrite-min-size 选项。
重写原理
7.0.0之前
从 Redis 7.0.0 开始,使用多部分 AOF 机制,将 AOF 文件拆分为基础文件和增量文件,通过清单文件跟踪。
重写流程
Redis 调用 fork,子进程重写 AOF 文件。
父进程继续处理客户端请求,将写命令缓存。
子进程完成重写后,父进程将缓存的写命令写入新文件。
用新文件替换旧文件。
总结
可以同时使用 AOF 和快照持久化,也可以单独使用,具体选择取决于数据和应用的需求。持久化文件应定期备份。
常见问题
Redis 中持久化方案有几种?
两种方案:RDB 快照持久化和 AOF 文件持久化。
如何触发 RDB 持久化?几种方式?有什么区别?
BGSAVE
: 创建子进程进行快照。
SAVE
: 阻塞当前 Redis 实例,创建快照。
shutdown
: 服务器关闭时自动执行 SAVE。
ctrl+c 或 kill -9
: 直接停止进程,触发 SAVE。
AOF 持久化与 RDB 持久化的优缺点?
RDB
: 启动快,可能丢失数据。
AOF
: 数据持久性好,启动时性能差,文件变大。推荐结合使用。
Redis 7.0 之前和之后的重写机制?
之前
: 父进程将操作放到内存,子进程生成新 AOF 文件。
之后
: 使用多部分 AOF 文件,父进程写入新文件,子进程生成基础 AOF 文件和增量文件,原子替换。
如何不让启动界面占用窗口?
在 redis.conf 中设置 daemonize 为 yes。
位图 (Bitmap)
介绍
位图不是一种真正的数据类型,而是定义在字符串类型中的。一个字符串最多可以存储 512MB 的内容。
位上限
: 2^(9(512) + 10(1024) + 10(1024) + 3(8b=1B)) = 2^32b
位操作命令
SETBIT
说明
: 设置某一位上的值。
语法
: SETBIT key offset value (offset 为位偏移量,从 0 开始)
GETBIT
说明
: 获取某一位上的值。
语法
: GETBIT key offset
BITPOS
说明
: 返回指定值 (0 或 1) 在指定区间上首次出现的下标。
语法
: BITPOS key bit [start] [end]
查找范围
:
不指定范围:BITPOS key bit
指定开始位置:BITPOS key bit start
指定开始和结束位置:BITPOS key bit start end
BITOP
说明
: 对一个或多个保存二进制位的字符串进行位操作,并将结果保存到 destkey。
操作类型
:
AND
: BITOP AND destkey key [key ...]
OR
: BITOP OR destkey key [key ...]
XOR
: BITOP XOR destkey key [key ...]
NOT
: BITOP NOT destkey key
BITCOUNT
说明
: 统计指定区间内值为 1 的个数。
语法
: BITCOUNT key [start] [end]
区间
:
正方向:BITCOUNT key start end(从左向右)
负方向:BITCOUNT key start end(从右向左)
位图应用场景
网站用户签到的天数统计
用户 ID 为 key,天作为 offset,签到置为 1。
例如,第 366 天签到,数据存储为 000000000000000。
按天统计网站活跃用户
天作为 key,用户 ID 为 offset,活跃用户置为 1。
统计活跃用户数量:例如,50000000 用户分布在 366 天的数据大约为 2GB。
用户在线状态和人数统计
使用位图记录用户在线状态,可以有效统计当前在线人数和活动情况。
Java 操作 Redis
引入依赖
在 pom.xml 文件中添加 Jedis 连接依赖:
<dependency>
<groupId>redis.clients</groupId>
jedis</artifactId>
<version>4.3.2</version>
</dependency>
复制代码
创建 Jedis 对象
public static void main(String[] args) {
// 1. 创建 Jedis 对象
Jedis jedis = new Jedis("192.168.xxx.xxx", 7000);
// 2. 选择操作的数据库,默认为 0 号库
jedis.select(0);
// 3. 执行相关操作
// ...
// 4. 释放资源
jedis.close();
}
复制代码
操作 Key 相关 API
DEL
说明
: 删除指定的 key。
返回值
: 被删除 key 的数量。
EXISTS
说明
: 检查 key 是否存在。
返回值
: 存在返回 1,不存在返回 0。
EXPIRE
说明
: 为已经存在的 key 设置过期时间。
返回值
: 设置成功返回 1,失败返回 0。
扩展
:
PEXPIRE: 毫秒级别。
PEXPIREAT: 指定时间戳。
KEYS
说明
: 返回符合模式的 key 列表。
返回值
: 符合模式的 key 列表。
MOVE
说明
: 将 key 移动到另一个数据库。
返回值
: 移动成功返回 1,失败返回 0。
TTL
说明
: 获取 key 的剩余生存时间。
返回值
:
当 key 不存在时返回 -2。
当 key 存在但没有设置剩余生存时间时返回 -1。
否则,返回剩余生存时间(秒)。
PTTL
说明
: 获取 key 的剩余生存时间(毫秒级)。
RANDOMKEY
说明
: 返回一个随机的 key。
返回值
: 数据库不为空时返回一个 key,空时返回 null。
RENAME
说明
: 重命名 key。
返回值
: 成功返回 OK,失败返回错误信息。
TYPE
说明
: 获取 key 的数据类型。
返回值
: none (key 不存在)、string、list、set、zset、hash。
操作 String 相关 API
SET
说明
: 设置 key 的值。
GET
说明
: 获取 key 的值。
MSET
说明
: 批量设置多个 key 的值。
MGET
说明
: 批量获取多个 key 的值。
返回值
: 字符串列表。
GETSET
说明
: 获取 key 的值并设置新值。
示例
: GETSET age 24 返回原值,设置新值为 24。
STRLEN
说明
: 获取 key 对应字符串的长度。
APPEND
说明
: 追加字符串到 key 的值末尾。
返回值
: 修改后的长度。
GETRANGE
说明
: 获取 key 对应字符串的子串。
示例
: GETRANGE key 0 4 返回子串。
SETEX
说明
: 设置 key 的值并设置过期时间(秒)。
示例
: 10 秒后自动销毁。
PSETEX
说明
: 设置 key 的值并设置过期时间(毫秒)。
SETNX
说明
: 仅当 key 不存在时设置 key 的值。
返回值
: 已存在返回 0,不存在返回 1。
MSETNX
说明
: 批量设置多个 key 的值,仅当所有 key 都不存在时成功。
返回值
: 仅当所有 key 都不存在时成功。
DECR
说明
: 将 key 对应的值减 1。
示例
: DECR key 返回减少后的值。
DECRBY
说明
: 将 key 对应的值减指定的值。
示例
: DECRBY key 2 返回减少后的值。
INCR
说明
: 将 key 对应的值加 1。
示例
: INCR key 返回增加后的值。
INCRBY
说明
: 将 key 对应的值加指定的值。
示例
: INCRBY key 2 返回增加后的值。
INCRBYFLOAT
说明
: 将 key 对应的值按浮点数增加。
示例
: INCRBYFLOAT key 2.5 返回增加后的值。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
Redis
组件
介绍
相关帖子
国产化Excel处理组件Spire.XLS教程:Java在 Excel 表格中轻松添加下标
银河麒麟下Redis的安装和集群配置
flink on k8s的基本介绍
Redis是如何进行内存管理的?缓存中有哪些常见问题?如何实现分布式锁?
redis-list类型基本命令
一款开源免费、组件丰富的 WPF UI 控件库,提供了 100 多款常用控件!
redis使用lua脚本迁移数据到集群版redis失败怎么解决
介绍几款文字生成视频的开源框架
代码管理工具-Git基础介绍及常用技巧
redis概述安装与基本数据类型
vip免费申请,1年只需15美金$
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
国产化Excel处理组件Spire.XLS教程:Java在 Excel 表格中轻松添加下标
0
476
仁夹篇
2025-09-29
业界
银河麒麟下Redis的安装和集群配置
0
521
夔新梅
2025-09-30
安全
flink on k8s的基本介绍
0
432
钦遭聘
2025-10-01
业界
Redis是如何进行内存管理的?缓存中有哪些常见问题?如何实现分布式锁?
1
546
当贵
2025-10-01
安全
redis-list类型基本命令
0
541
赊朗爆
2025-10-01
业界
一款开源免费、组件丰富的 WPF UI 控件库,提供了 100 多款常用控件!
0
277
屠焘
2025-10-05
安全
redis使用lua脚本迁移数据到集群版redis失败怎么解决
0
349
娄静曼
2025-10-06
安全
介绍几款文字生成视频的开源框架
0
43
任静柔
2025-10-06
安全
代码管理工具-Git基础介绍及常用技巧
0
337
富账慕
2025-10-07
安全
redis概述安装与基本数据类型
0
686
虽裘侪
2025-10-07
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
业界
签约作者
程序园优秀签约作者
发帖
睿哝
3 天前
关注
0
粉丝关注
16
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
dage888
999994
富账慕
10013
匝抽
9986
4
孙淼淼
9992
5
筒濂
9985
6
柴古香
9993
7
凌彦慧
9991
8
崔瑜然
9984
9
敖可
9991
10
慢秤
9979
查看更多