1、主从复制

psync-> runid->runid是?则是全量->返回fullresync和runid和复制进度->bgsave命令准备RDB文件->之后的命令写入replication_buffer->发送RDB->发送replication_buffer的信息

repl_backlog_buffer环型缓冲区,主节点只有一个

psync-> runid->runid在repl_backlog_buffer中则是增量同步->定位repl_backlog_buffer中offset位置->将信息转到replication_buffer

replication_buffer每个从节点对应一个

2、redis集群

Gossip协议进行节点之间的状态交换

哈希槽2^14=16384个,因为算法是CRC16计算得出16bit的结果,然后跟2^14取余

MOVED错误(返回目标节点的信息,IP+端口)

3、redis线程

核心读写是单线程事件驱动模型,网络是I/O多路复用多线程(同步I/O),默认是禁用的

4、redis数据格式
String :最大512M

hash

list:支持两端推、弹出数据

set:使用hash表实现

Sorted set/Zset:每个元素都有个评分,用于排序,底层用跳表实现,支持快速的范围查询。

bitmap:位图

hyperloglog:估算集合的基数(cardinality),即集合中不重复元素的数量。误差在0.81%,用于UV(unique visitor)统计

stream:

5、hash数据的命令

hget/hset/hdel/hmget/hmset/hincrby(全部应该大写)

6、lua脚本

redis.call和redis.pcall

7、redis的pipeline,最多一次10K个命令

8、redis的大key问题,redis-cli --bigkeys

9、热点key:

解决热点key:拆分key,读写分离主从复制增加从节点,多级缓存,限流熔断

查看热点key:业务经验、集群监控:QPS倾斜、hotkey监控(实时性不好)、monitor命令(性能损坏特别大)、客户端收集、代理层收集

10、redis持久化:

RDB(redis database):快照,压缩的二进制文件,数据恢复不全。

redis.conf文件可以配置在x秒内至少有y个key发生变化会触发命令进行持久话操作

save命令:在主线程生成RDB文件,主线程无法执行其他命令

bgsave命令:子进程执行RDB生成命令,不会阻塞主线程,但不是完全非阻塞测,默认使用bgsave

AOF(Append Only file):体积大,重写会消耗更多资源。

混合持久化:aof-use-rdb-preamble配置开启混合持久化。先生成RDB快照,然后将新的操作追加到AOF文件中。

AOF写回策略:always(每次写操作后立即fsync,不能保证数据不丢失,因为是先执行后写入aof),everysec(每秒调用一次,默认使用这种策略),no(操作系统决定何时写入)

AOF重写机制:合理的压缩写命令,可以手动触发BGREWRITEAOF,使用auto-aof-rewrite-min-size和auto-aof-rewrite-percentage自动触发操作

redis-check-aof工具修复AOF损坏的文件,这个工具会截断文件中不完整的命令,使其恢复到一致状态。

写时复制:当主进程fork出一个子进程后,是让主进程和子进程共享相同的内存页面,他们映射同一个物理内存地址。当主进程收到写命令需要修改数据时,主进程会将对应数据所在的页复制一份,对复制的副本进行修改。

11、redis哨兵机制:高可用解决方案,完成主从切换

12、redis的主从模式的脑裂

13、redisson看门狗机制:客户端加锁后不设置过期时间,而是启动一个定时任务来检测锁,每10s一次,每次续期30s。配置参数为lockwatchdogtimeout

14、redis内存碎片化:默认使用jemalloc内存分配器,需要8K,分配器给12K。使用INFO memory命令查看内存碎片。MEMORY PURGE命令手动清理碎片,但会阻塞主线程。配置activefrag选项,redis可以在运行时尝试整理内存碎片,合并小的内存。

15、在redis6中使用listpack替换ziplist,因为ziplist在节点中存放了上一个元素的长度,如果长度超过长度记录的上限,那么可能会引起连锁更新,非常影响性能

16、redis的watch命令:乐观锁机制,但是并不是真正的锁

17、redis从节点复制缓冲区:client-output-buffer-limit配置间接控制缓冲区大小

18、redis的quicklist:每个quicklist节点都是一个ziplist,相当与限定了ziplist的阈值,当超过ziplist,就用多个ziplist。ziplist+quicklist用于实现redis的链表功能

19、redis中list命令:lpush插入队头、rpush、lpop、rpop、lrange获取范围内元素、lindex通过索引获取元素、llen列表长度、lset设置制定索引的值、lrem移除列表中参与匹配的元素、ltrim裁剪list使其只包含指定范围内的元素

ltrim mylist 1 2:保留索引1到2的元素,其他的删除

lrem mylist 1 a:异常第一个a元素

lrange mylist 0 -1:返回mylist中所有元素

20、redis列表存储结构:当列表元素较多时使用linked list,便于从两端快速添加和删除,如果列表元素较少或总大小较小时,可以使用Ziplist

21、redis中的原生批处理命令:MSET/MGET。他们是原子性的,并且执行速度比pipeline更快(有优化),但是只能用于批量的写入和读取键值对,灵活性上pipeline更好。但pipeline会占用大量内存,某些redis命令不支持pipeline。

MSET key1 value1 key2 value2 key3 value3

MGET key1 key2 key3

22、redis限制字符串最大只能是512M

23、jedis、lettuce、redisson

24、GEO地理信息:geolocation。底层采用sorted set,每一个地理位置被编码为一个Geohash值,并使用Geohash的排序特性来存储在Redis的Sorted Set中,分数则是通过Geohash生成的。Geohash是一种空间编码方法,将二维地理坐标编码成一个字符串,这样在对地理坐标排序时,可以通过Geohash生成的值实现近似的范围查找

添加地理坐标:GEOADD locations 13.26589 38.65985 "member"

计算地理位置距离:GEODIST locations "member" "member1" km

查找指定位置附近范围内的所有点(弃用):GEORADIUS locations 15 37 200 km

以某个已存在位置为中心,查找指定范围内的地点(弃用):GEORADIUSBYMEMBER locations "member" 100 km 

按长方型或者圆形查找位置:GEOSEARCH用于替代GEORADIUS

将搜索结果存储到一个新的key中:GEOSEARCHSTORE

25、hyperloglog结构约12K,即使是统计百万用户,内存开销依然是恒定的12K

PFADD key element 添加一个或多个元素

PFCOUNT key 返回HyperLogLog结构中不重复元素的近似数量

PFMERGE destkey sourcekey 将多个HyperLogLog合并为一个

26、redis中的String类型底层主要基于SDS(Simple Dynamic String),并结合int/embstr/raw等不同的编码方式进行优化存储。如果一个字符串可以被解析为整数且数值比较小就会实用int编码,当字符串长度小于等于44字节,就会实用embstr编码,将字符串元数据和字符数据放在连续的内存块中redisObject和sds一起放。当超过44字节,redis会实用raw编码,这种编码方式将结构体和实际字符串数据分开存储,redisObject和sds分开放。

为什么不用C里面的字符串?:获取长度复杂、结尾用\0表示,字符串操作函数不高效、不安全,可能缓冲区溢出

27、缓存击穿、缓存穿透、缓存雪崩

28、Red Lock:红锁,用于解决在分布式环境中使用Redis实现分布式锁时的安全性问题,比如主节点宕机,主从切换,从节点没有同步到锁信息。使用Red Lock需要至少5个主库实例,集群部署(不是主从或者哨兵),客户端对这5个实例依次申请锁,过半则红锁申请成功,反之失败。红锁并非无懈可击,很多情况会导致失效。

29、redis常用命令合集:

字符串:

# 设置键值
SET key value
SET name "张三"
SET age 25# 获取值
GET key
GET name# 设置过期时间
SETEX key seconds value
SETEX session:123 3600 "user_data"# 批量设置
MSET key1 value1 key2 value2
MSET name "李四" age 30 city "北京"# 批量获取
MGET key1 key2
MGET name age city# 递增
INCR key
INCR counter# 递减
DECR key
DECR counter# 增加指定数值
INCRBY key increment
INCRBY score 10# 追加字符串
APPEND key value
APPEND message " 追加内容"#获取分布式锁
SET key value EX seconds NX

哈希操作:

# 设置哈希字段
HSET key field value
HSET user:1 name "王五"
HSET user:1 age 28# 获取哈希字段
HGET key field
HGET user:1 name# 获取所有字段
HGETALL key
HGETALL user:1# 批量设置哈希字段
HMSET key field1 value1 field2 value2
HMSET user:2 name "赵六" age 32 email "zhao@example.com"# 批量获取哈希字段
HMGET key field1 field2
HMGET user:2 name age# 删除哈希字段
HDEL key field1 field2
HDEL user:1 age# 检查字段是否存在
HEXISTS key field
HEXISTS user:1 name# 获取所有字段名
HKEYS key
HKEYS user:1# 获取所有字段值
HVALS key
HVALS user:1

列表操作:

# 从左侧推入
LPUSH key value1 value2
LPUSH queue "任务1" "任务2"# 从右侧推入
RPUSH key value1 value2
RPUSH queue "任务3" "任务4"# 从左侧弹出
LPOP key
LPOP queue# 从右侧弹出
RPOP key
RPOP queue# 获取列表长度
LLEN key
LLEN queue# 获取列表元素
LRANGE key start stop
LRANGE queue 0 -1
LRANGE queue 0 2# 根据索引获取元素
LINDEX key index
LINDEX queue 0# 插入元素
LINSERT key BEFORE|AFTER pivot value
LINSERT queue BEFORE "任务2" "新任务"# 删除元素
LREM key count value
LREM queue 1 "任务1"

集合操作

# 添加成员
SADD key member1 member2
SADD tags "redis" "database" "cache"# 获取所有成员
SMEMBERS key
SMEMBERS tags# 检查成员是否存在
SISMEMBER key member
SISMEMBER tags "redis"# 获取集合大小
SCARD key
SCARD tags# 删除成员
SREM key member1 member2
SREM tags "cache"# 随机获取成员
SRANDMEMBER key count
SRANDMEMBER tags 2# 集合运算
SUNION key1 key2
SINTER key1 key2
SDIFF key1 key2
SUNION tags1 tags2

有序集合操作:

# 添加成员
ZADD key score member
ZADD leaderboard 100 "玩家1"
ZADD leaderboard 200 "玩家2"# 获取成员分数
ZSCORE key member
ZSCORE leaderboard "玩家1"# 获取排名
ZRANK key member
ZRANK leaderboard "玩家1"# 获取范围
ZRANGE key start stop
ZRANGE leaderboard 0 -1
ZRANGE leaderboard 0 9# 按分数范围获取
ZRANGEBYSCORE key min max
ZRANGEBYSCORE leaderboard 100 200# 获取集合大小
ZCARD key
ZCARD leaderboard# 删除成员
ZREM key member
ZREM leaderboard "玩家1"# 增加分数
ZINCRBY key increment member
ZINCRBY leaderboard 50 "玩家1"

键操作:

# 检查键是否存在
EXISTS key
EXISTS user:1# 删除键
DEL key1 key2
DEL user:1 user:2# 设置过期时间
EXPIRE key seconds
EXPIRE session:123 3600# 查看剩余过期时间
TTL key
TTL session:123# 获取所有键
KEYS pattern
KEYS user:*
KEYS *# 重命名键
RENAME oldkey newkey
RENAME user:1 user:1001# 获取键类型
TYPE key
TYPE user:1

发布订阅:

# 发布消息
PUBLISH channel message
PUBLISH news "重要新闻"# 订阅频道
SUBSCRIBE channel1 channel2
SUBSCRIBE news sports# 取消订阅
UNSUBSCRIBE channel
UNSUBSCRIBE news# 模式订阅
PSUBSCRIBE pattern
PSUBSCRIBE news:*

事务操作:

# 开始事务
MULTI# 执行命令
SET key1 value1
SET key2 value2
INCR counter# 执行事务
EXEC# 取消事务
DISCARD# 监视键
WATCH key1 key2
MULTI
SET key1 newvalue
EXEC

持久化操作:

# 保存数据到磁盘
SAVE# 异步保存数据到磁盘
BGSAVE# 获取最后保存时间
LASTSAVE# 获取Redis信息
INFO# 获取配置信息
CONFIG GET parameter
CONFIG GET maxmemory

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/97777.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/97777.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/97777.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elastic APM 与 Elasticsearch 集成:构建完整可观测性栈

引言 Elastic APM 深度依赖 Elasticsearch 作为数据后端,但正确集成可以解锁更强大的功能,如自定义查询、聚合分析和与其它 Elastic 工具的协同。本文探讨 APM 与 Elasticsearch 的集成细节,包括数据流、索引管理以及高级用例,帮助…

开源模型应用落地-基于DPO的Qwen3-4B意图理解精准对齐实践(二十)

一、前言 在大模型技术蓬勃发展的今天,如何让AI真正“理解”用户意图,而非仅仅生成流畅文本,已成为落地应用的核心瓶颈。尤其是在客服、搜索、智能助手等场景中,模型对用户query的深层语义解析能力,直接决定了交互体验的成败。然而,经过标准SFT(监督微调)训练的模型,往…

23种设计模式案例

一、创建型模式 1. 单例模式 (Singleton Pattern) 应用场景: 全局状态管理、全局配置、共享资源访问 // 全局状态管理器 class Store {constructor() {if (Store.instance) return Store.instance;this.state {};Store.instance this;}getState(key) { return this.state[key…

ctfshow_web13-----------文件上传.user.ini

打开题目发现是一个文件上传题扫描后发现存在upload.php.bak.bak是备份文件拿到源码正则过滤了php&#xff0c;文件大小<24,文件名小于9经尝试&#xff0c;改后缀php5,ptml均不行&#xff0c;使用.htaccess文件也不成功上传上传.user.ini&#xff0c;在文件中写上auto_prepe…

图像拼接案例,抠图案例

目录 一.图像拼接案例 1.图像拼接项目介绍 2.核心步骤 ①计算图片特征点及描述符 ②匹配特征点&#xff0c;使用暴力匹配器 ③筛选有效匹配 ④计算透视变换矩阵 ⑤应用变换和拼接 二.抠图案例 1.缩放旋转处理 2.转化为灰度图并二值化 3.找出所有轮廓&#xff0c;并在…

【左程云算法笔记016】双端队列-双链表和固定数组实现

目录 1&#xff09;双端队列的介绍 2&#xff09;双端队列用双链表的实现代码演示 3&#xff09;双端队列用固定数组的实现 代码演示 视频 【算法讲解016【入门】双端队列-双链表和固定数组实现】 Leecode leecode641 设计循环双端队列 1&#xff09;双端队列的介绍 可以…

ffplay视频输出和尺寸变换

视频输出模块 视频输出初始化的主要流程 我们开始分析视频&#xff08;图像&#xff09;的显示。 因为使⽤了SDL&#xff0c;⽽video的显示也依赖SDL的窗⼝显示系统&#xff0c;所以先从main函数的SDL初始化看起&#xff08;节选&#xff09;&#xff1a; int main(int argc, c…

协议_https协议

http http协议是将数据以明文的形式在网络上传输。若是传输的数据中包含一些敏感信息比如银行卡信息等可能会被有心人攻击造成信息泄露或被篡改。 总结&#xff1a;http协议进行数据传输难以保证数据的隐私性以及数据完整性&#xff0c;为了保证数据的准确定引入了https这一协…

阿里云 腾讯云 API 自动化查询指南

文章目录一、核心思路与架构建议二、经验与核心建议三、技术方案选型建议四、API使用详解4.1 阿里云4.2 腾讯云五、进阶&#xff1a;与内部系统联动免费个人运维知识库&#xff0c;欢迎您的订阅&#xff1a;literator_ray.flowus.cn 一、核心思路与架构建议 自动化流程可以概括…

【Unity 性能优化之路——概述(0)】

Unity性能优化概述性能优化不是某个环节的极致压榨&#xff0c;而是所有模块的协同共进。本文将为你建立完整的Unity性能优化知识体系。很多Unity开发者一提到性能优化&#xff0c;首先想到的就是Draw Call、Batches这些渲染指标。这没错&#xff0c;但它们只是性能优化中的一部…

灵码产品演示:软件工程架构分析

作者&#xff1a;了哥 演示目的演示灵码对于整个复杂软件工程项目的架构分析能力&#xff0c;输出项目的软件系统架构图。演示文档接口生成能力。演示准备 克隆工程地址到本地&#xff08;需提前安装好 git 工具&#xff0c; 建议本地配置 brew&#xff09;&#xff1a; git cl…

银河麒麟部署mysql8.0并连接应用

​客户需在国产化银河麒麟系统中部署软件应用&#xff0c;使用mysql8.0数据库。机器放置了两三年&#xff0c;里面命令工具和依赖都不太全。而且客户环境不联网&#xff0c;只能采用离线部署的方式。部署过程中踩了很多坑&#xff0c;也用到很多资源&#xff0c;记录一下。 过…

GitAgent-面壁智能联合清华大学发布的大模型智能体应用框架

本文转载自&#xff1a;https://www.hello123.com/gitagent ** 一、&#x1f50d; GitAgent 框架&#xff1a;大模型智能体的工具箱革命 GitAgent 是由面壁智能与清华大学自然语言处理实验室联合研发的创新型框架&#xff0c;旨在解决大模型智能体在复杂任务中的工具扩展瓶颈…

灵码产品演示:Maven 示例工程生成

作者&#xff1a;轻眉 演示主题&#xff1a;由 AI 自动生成 0 到 1 的电商订单 Java 项目 演示目的 面向 Java 零基础的用户&#xff0c;通过灵码的产品能力&#xff08;如提示词、编码智能体、项目 Rules 和 SQLite MCP 服务、单元测试&#xff09;自动生成 0 到 1 的电商订单…

AI编程从0-1开发一个小程序

小伙伴们&#xff0c;今天我们利用AI实现从0到1开发一个小程序&#xff01;需求交给AI&#xff1a; 我们只要说出自己的开发思路&#xff0c;具体需求交给AI完成&#xff01;输入提示词&#xff1a;个人开发的小程序 能开发哪些好备案&#xff0c;用户喜欢使用的 AI给出…

DDoS高防IP是什么? DDoS攻击会暴露IP吗?

DDoS高防IP是什么&#xff1f;高防IP是指一种网络安全服务&#xff0c;主要用于防御DDoS攻击。随着技术的发展&#xff0c;黑客进行网络攻击的强度也在加大&#xff0c;所以我们要做好网络防护&#xff0c;及时预防DDoS攻击。DDoS高防IP是什么&#xff1f;DDoS高防IP是指基于IP…

k8s事件驱动运维利器 shell operator

Shell-Operator 概述 Shell-Operator 是 Kubernetes 的一个工具&#xff0c;用于通过 shell 脚本扩展集群功能。它允许用户编写简单的脚本&#xff08;Bash、Python 等&#xff09;来响应 Kubernetes 事件&#xff08;如资源变更、定时任务&#xff09;&#xff0c;无需编译复…

(二)文件管理-文件权限-chmod命令的使用

文章目录1. 命令格式2. 基本用法2.1 符号模式2.2 八进制数字模式3. 高级用法3.1 递归操作3.2 参考权限3.3 特殊权限位(Setuid, Setgid, Sticky Bit)3.4 X 特殊执行权限4. 注意事项4.1权限与所有权4.2 Root 权限4.3 安全风险4.4 -R 的风险4.5 目录的执行权限1. 命令格式 chmod …

医院预约挂号脚本

医院预约挂号脚本 功能介绍 本脚本是一个用 Python 编写的医院预约挂号程序&#xff0c;支持以下功能&#xff1a; 自动预约&#xff1a;通过api交互选择医院、科室、医生和时间段。自动监控&#xff1a;持续检查指定医生的号源状态&#xff0c;发现可预约时段时自动尝试预约。…

.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)

在使用MudTools.OfficeInterop.Word库进行Word文档自动化处理时&#xff0c;深入理解Word对象模型的核心组件是至关重要的。Word对象模型提供了一套层次化的结构&#xff0c;使开发者能够通过编程方式控制Word应用程序、文档以及文档内容。本章将详细介绍Word对象模型中最核心的…