Redis 工作总结
1.Redis是什么
Redis是互联网技术领域使用最为广泛的存储中间件,它是Remote Dictionary Service的首字母缩写,也就是远程字典服务。
2.Redis的用途?
2.1 计数器
2.2 缓存
2.3 分布式锁
2.4 消息中间件
3.Redis的数据类型
3.1 string(字符串)
Redis的字符串是动态字符串,是可以修改的字符串,采用预分配冗余空间的方式 来减少内存的频繁分配。当字符串长度小于1M时,扩容都是加倍扩容,当超过1M时,每次扩容时增加1M的空间【字符串最大长度为 512M】 。
基本命令: set 、 get 、 exists 、 del
批量命令: mset 、 mget
其他命令: expire 、 setex 、 setnx 、 incr 、 incrby 【自增的最大值是signed long】
3.2 list(列表)
Redis的列表相当于Java语言里面的 LinkedList ,底层是链表实现。插入和删除操作非常快,时间复杂度为 O(1),但是索引定位很慢,时间复杂度为 O(n)。当列表弹出了最后一个元素之后,该数据结构自动被删除,内存被回收。
常用命令: rpush 、 lpush 、 rpop 、 lpop
查询命令: llen 、 lrange 、 lindex 、 ltirm
3.3 hash(哈希)
Redis 的字典相当于 Java 语言里面的 HashMap ,它是无序字典。内部实现结构上同 Java 的 HashMap 也是一致的,同样的数组 + 链表二维结构。当 hash 移除了最后一个元素之后,该数据结构自动被删除,内存被回收
常用命令: hset 、 hget 、 hgetall 、 hlen 、 hmet
其他命令: hincr 、 hincrbu
3.4 set(集合)
Redis 的集合相当于 Java 语言里面的 HashSet ,它内部的键值对是无序的唯一的。当集合中最后一个元素移除之后,数据结构自动删除,内存被回收。
常用命令: sadd 、 smembers 、 sismember 、 scard 、 spop
3.5 zset(有序集合)
Redis 的Zset 类似Java 的 SortedSet 和 HashMap 的结合体,一方面它是一个 set ,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score ,代表这个 value 的排序权 重。它的内部实现用的是一种叫着「 跳跃列表 」的数据结构。zset 中最后一个 value 被移除后,数据结构自动删除,内存被回收。
常用命令: sadd 、 smembers 、 sismember 、 scard 、 spop
3.6 公共操作
3.6.1 删除操作
del key [key …]
3.6.2 有效期
expire key second [单位] 设置key的有效期
ttl key 查看key的有效期 【-1 永久有效 -2 已失效 正整数 有效期】
已设置有效期的字符串重新set key value后有效期失效。
4.Redis数据持久方案
4.1 RDB
是一种快照式的数据存储,它会周期性的保存当前时间点Redis所有的数据到磁盘中。
当Redis需要进行快照操作时,它会fork出一个子进程,负责将快照写入磁盘,而父进程则继续处理请求。由于Redis使用了写时复制(COW)的技术,所以子进程只需要复制到父进程中发生过改变的数据页,而不是复制整个Redis进程的内存空间。因此,这个过程不会对父进程的性能造成较大的影响。
Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开6379.conf文件之后,我们搜索save,可以看到下面的配置信息:
save 900 1 #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000 #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。
优点:RDB持久化文件,速度比较快,而且存储的是一个二进制文件,传输起来很方便。
缺点:RDB无法保证数据的绝对安全,有时候就是1s也会有很大的数据丢失。
4.2 AOF
是一种追加式的存储方式,会实时的记录Redis的写操作到磁盘中。
在Redis的配置文件中存在三种同步方式,它们分别是:
vim /etc/redis/6379.conf
● appendfsync always:
命令写入aof_ buf后立即调用系统fsync操作同步到AOF文件,fsync完成后线程返回。这种情况下,每次有写命令都要同步到AOF文件,硬盘IO成为性能瓶颈,Redis只能支持大约几百TPS写入,严重降低了Redis的性能;即便是使用固态硬盘(SSD),每秒大约也只能处理几万个命令,而且会大大降低SSD的寿命。
● appendfsync no:
命令写入aof_ buf后调用系统write操作,不对AOF文件做fsync同步;同步由操作系统负责,通常同步周期为30秒。这种情况下,文件同步的时间不可控,且缓冲区中堆积的数据会很多,数据安全性无法保证。
● appendfsync everysec:
命令写入aof_ buf后调用系统write操作,write完成后线程返回; fsync同步文件操作由专门的线程每秒调用一次。everysec是前述两种策略的折中,是性能和数据安全性的平衡,因此是Redis的默认配置,也是我们推荐的配置。
AOF执行流程:
命令追加(append): 将Redis的写命令追加到缓冲区aof_buf;【避免硬盘IO成为Redis的瓶颈】
文件(write)和(sync):根据不同的同步策略将aof_buf中的内容同步到硬盘;【丢失数据】
文件重写(rewrite): 定期重写AOF文件,达到压缩的目的。AOF文件重写:
子进程执行【避免Redis无法正常使用】新增一个AOF文件,子进程开启时增加了一个AOF重写缓存,Redis服务器主进程在执行完写命令之后,会同时将这个写命令追加到AOF缓冲区和AOF重写缓冲区 。AOF重写文件写完之后会将AOF重写缓存中的数据写入AOF重写文件【主线程阻塞】,写入完成后将AOF重写文件重命名为覆盖原有文件【主线程阻塞】。
AOF文件重写触发条件:
1.没有BGSAVE命令(RDB持久化)/AOF持久化在执行;
2.没有BGREWRITEAOF在进行;
3.当前AOF文件大小要大于server.aof_rewrite_min_size(默认为1MB),或者在redis.conf配置了auto-aof-rewrite-min-size大小;
4.当前AOF文件大小和最后一次重写后的大小之间的比率等于或者等于指定的增长百分比(在配置文件设置了auto-aof-rewrite-percentage参数,不设置默认为100%)
5.如果前面三个条件都满足,并且当前AOF文件大小比最后一次AOF重写时的大小要大于指定的百分比,那么触发自动AOF重写。
优点:AOF相对RDB更加安全,一般不会有数据的丢失或者很少。
缺点:AOF相对RDB持久化的速度更慢,存储的是一个文本文件,到了后期文件会比较大,传输困难。
官方推荐同时开启AOF和RDB。
5.Redis集群模式
5.1 Codis
Codis是基于Redis Cluster的代理工具,可以通过代理实现数据的分片和负载均衡。Codis具有配置简单、扩展性好等特点。
5.2 Redis Sentinel
Redis Sentinel是Redis官方提供的高可用方案,可以通过自动故障检测、自动主从切换等功能,实现Redis的高可用。
5.3 Redisson
Redisson是一个开源的Redis客户端,支持分布式锁、分布式集合、分布式对象等功能,可以将多个Redis实例组成一个集群来提供高并发服务。
5.4 Twemproxy
Twemproxy是一个代理工具,支持多个Redis实例之间的分片和负载均衡,可以通过配置实现数据的分片和负载均衡
6.RedisAP模式
6.1 高可用性
Redis在分布式模式下采用AP模型,可以在节点故障的情况下,保证整个系统的高可用性,不会影响用户使用和数据的完整性。Redis采用主从复制和哨兵模式来保证系统在节点故障时的高可用性。
6.2 数据一致性
Redis为了保证数据一致性,对于主从复制中的主节点和从节点进行数据同步,采用异步复制方式,保证了高性能。Redis同时采用哨兵模式,负责监控所有的Redis节点,一旦某个节点故障,哨兵会自动发现新的主节点,保证数据的一致性和可用性。
6.3 高扩展性
Redis采用AP模型,可以实现分布式的节点扩展,保证系统的高扩展性。Redis的节点之间采用无中心化的结构,各个节点之间相互独立,通过分片的方式来进行数据存储与同步,简单易上手,非常容易实现扩展。
7.内存淘汰策略
7.1 拒绝淘汰
noeviction 拒绝写入操作。【3.0+默认策略,保证业务数据的安全性】
7.2 允许淘汰
7.2.1全量数据范围淘汰
allkeys-random:随机淘汰任意键值。【数据集较大,保持数据的随机性要求】
allkeys-lru:淘汰整个键值中最久未使用的键值。【数据集小,侧重当前热度。】
allkeys-lfu:淘汰整个键值中最少使用的键值。【数据集小,侧重整体热度。4.0+】
7.2.2设置过期时间数据淘汰
volatile-random:随机淘汰设置了过期时间的任意键值。【数据集较大,保持数据的随机性要求】
volatile-ttl:优先淘汰更早过期的键值。【数据集小,侧重数据的及时更新】
volatile-lru:淘汰所有设置了过期时间的键值中,最久未使用的键值。【数据集小,侧重当前热度。3.0-默认策略】
volatile-lfu:淘汰所有设置了过期时间的键值中,最少使用的键值。【数据集小,侧重整体热度。4.0+】
相关文章:
Redis 工作总结
1.Redis是什么 Redis是互联网技术领域使用最为广泛的存储中间件,它是Remote Dictionary Service的首字母缩写,也就是远程字典服务。 2.Redis的用途? 2.1 计数器 2.2 缓存 2.3 分布式锁 2.4 消息中间件 3.Redis的数据类型 3.1 string&am…...
GO学习之 数据库(Redis)
GO系列 1、GO学习之Hello World 2、GO学习之入门语法 3、GO学习之切片操作 4、GO学习之 Map 操作 5、GO学习之 结构体 操作 6、GO学习之 通道(Channel) 7、GO学习之 多线程(goroutine) 8、GO学习之 函数(Function) 9、GO学习之 接口(Interface) 10、GO学习之 网络通信(Net/Htt…...

谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制
JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作,例如AJAX,setTimeout等等;也有很多事件,例如用户触发的点击事件,鼠标…...
User Java bean的命名规范
Java Bean 是一种用于表示简单的、可重用的组件的规范。它是一个符合特定命名和约定的 Java 类,通常用于封装数据和提供访问方法。以下是关于 Java Bean 命名规范的一些准则: 类名: 类名应该使用驼峰命名法(Camel Case)…...
ajax和fetch的区别
ajax 和 fetch的相同点和区别是什么? 以前我们都用ajax去做请求, 但是原生的ajax不好用,我们会用$.ajax或者axios插件去请求,他们都是ajax的封装 最近出来个fetch是什么? 问到这里的时候,你就已经入坑了&am…...

java+springboot+mysql村务档案管理系统
项目介绍: 使用javaspringbootmysql开发的村务档案管理系统,系统包含超级管理员、工作人员角色,功能如下: 超级管理员:系统用户管理(工作人员管理);公开资料;会议记录&…...

windows查看/删除DNS缓存
一、查看DNS缓存 打开CMD,输入ipconfig/displaydns 二、删除DNS缓存 打开CMD,输入ipconfig/flushdns...

自动化测试之Junit
Junit引入注解参数化单参数多参数方法传参 测试用例执行顺序断言测试套件 Junit引入 Junit来编写和组织自动化测试用例,使用Selenium来实际模拟用户与Web应用程序的交互。也就是使用JUnit的测试功能来管理和运行Selenium测试。常见的做法是,使用JUnit作…...

Spring Boot 整合MyBatis-Plus
😀前言 本篇博文是关于Spring Boot 整合MyBatis-Plus的,希望你能够喜欢😊 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的…...

CC++ 常用技巧
C 中的C C 是面向过程的是把整个大程序分为一个个的子函数;C 是面向对象的是把整个程序划分为一个个的类。C 是完全兼容C 的,C 是C 的子集,C 是C 的超集。C 又对C 做了很多补充和提升,因此使用C 会比使用纯C 更方便。混用C和C&am…...

【AndroidStudio】屏蔽小米打印
使用小米手机调试时,会一直有notifyQueue load error的打印 在过滤器重添加过滤条件即可 -message:notifyQueue...

Tomcat的安装与介绍
首先我们先了解一下什么是服务器?什么是服务器软件? 什么是服务器?安装了服务器软件的计算机。 什么是服务器软件? 服务器软件是一种运行在服务器操作系统上,用于接收和处理客户端请求,并提供相应服务和资…...

说点大实话丨知名技术博主 Kirito 测评云原生网关
作者:徐靖峰 关注了阿里云云原生公众号,经常能看到 MSE-Higress 相关的推文,恰逢这次阿里云产品举办了一个 MSE-Higress 云原生网关的测评活动,借此机会体验了一把云原生网关的功能。 购买流程体验 购买网关时,页面明…...

时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测
时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现SO-CNN-BiLSTM蛇群算法优化卷积双向长短期记忆神经网络时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 时序预测 | MATLAB实现SO-CNN-BiL…...

简述docker的网络模式
Docker 提供了多种网络模式,用于控制容器之间以及容器与主机之间的网络通信。以下是 Docker 的一些常见网络模式 briage模式: docker容器启动时默认就是该模式,在该模式下,docker容器会连接到一个名为docker0的虚拟以太网桥上,通…...
MySql-8.0.34 CentOS 安装命令记录
1、执行以下命令获取 glibc 版本,根据版本下载相应的MySQL安装包。 ldd --version 2、下载MySQL。 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz 3、解压 tar -xzvf mysql-8.0.34-linux-glibc2.17-x86_64.t…...

开发电子木鱼功德+1需要多少钱
冥想木鱼小程序是一种结合了冥想和科技的应用形式,为用户提供了随时随地进行冥想的便捷方式。开发一款高质量的冥想木鱼小程序需要综合考虑技术实现、冥想专业性和用户体验等多个方面。本文将详细介绍冥想木鱼小程序的开发过程,并探讨其中的专业性与思考…...
批处理中扩展解释%~的相关知识和用法,并给出示例和实际运行结果展示
批处理中扩展解释%~的相关知识和用法,并给出示例和实际运行结果展示 在批处理脚本中,%~是一个特殊的前缀,用于对参数和变量进行字符串处理。这个前缀后面可以跟着不同的字符,用于执行不同的操作。下面是一些常见的用法:…...
LA@向量组间的表示关系
文章目录 2个向量组间的表示关系向量组的相互表出向量组用另一个向量组表示👺线性表示的系数矩阵矩阵乘法与线性表出列向量组线性表示行向量组线性表示 向量组等价👺向量组等价的性质推论 等价矩阵与向量组等价的关系行等价矩阵的行向量组等价列等价矩阵…...

Mybatis与Spring集成
目录 一.Spring整合Mybatis 1.什么是Spring整合Mybatis 新建一个ssm 编辑 导入pom依赖 导入generatorConfig.xml 导入Spring-context.xml文件 导入Spring-mybatis.xml文件 自动生成Bookmapper.xml和Bookmapper文件 编写接口类:Bookbiz 编写接口实现类 …...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...

归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...

CVE-2023-25194源码分析与漏洞复现(Kafka JNDI注入)
漏洞概述 漏洞名称:Apache Kafka Connect JNDI注入导致的远程代码执行漏洞 CVE编号:CVE-2023-25194 CVSS评分:8.8 影响版本:Apache Kafka 2.3.0 - 3.3.2 修复版本:≥ 3.4.0 漏洞类型:反序列化导致的远程代…...

java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
MeanFlow:何凯明新作,单步去噪图像生成新SOTA
1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架,旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念,这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换,显…...