当前位置: 首页 > news >正文

Redis笔记

缓存过期时间很重要!redis是单线程的

对于内存过多的3中方案:

惰性删除:

在定时删除的基础上,对于已经过期了的数据,redis的随机选择算法一直没有选中这个数据,所以导致它就一直没被删除,但是查询操作一旦查到它,就把它给删了,这就是惰性删除

定时删除:

创建一个定时器,到点删除,这种方式对cpu不好,得让cpu维护定时器

定期删除:

每隔一段时间,对数据进行一次检查,删除过期的key。至于检查多少删除多少由算法决定。

内存淘汰策略:8种策略

 缓存穿透:要查的redis没有,就到mysql查,第二次依旧如此,这就是缓存穿透

缓存雪崩:热点数据因过期被删除,导致大量请求涌mysql

一大堆数据同时过了有效期,然后又有很多对这些数据的需求:

解决方案:普通数据过期时间随机,热点数据永不过期

redis突然挂掉,导致重启后内存数据都没了


持久化:为了在突然断电后,重启能恢复到之前的状态

RDB(默认开启):一次遍历全部数据然后备份到本地dump.rdb(快照方式)

手动触发:阻塞当前redis,直到rdb完成。save 命令

自动触发:save 60 1000 命令  60秒内,如果超过1千个key被修改则写入到dump.rdb文件中(fork子进程)。

AOF(默认关闭): 把写命令记录下来,像mysql一样,写入到.aof文件中(文件追加方式)

先把记录放到临时缓冲区域:aof_buf

但是慢慢的.aof文件会变得很庞大,所以有了.aof压缩,在.aof压缩的过程中,新建了一个aof_rewrite_bur区,把操作写到这个缓冲取,等压缩完毕再把aof_rewrite_bur写入新的.aof文件中,.aof一旦压缩完毕,立马用新的.aof替换旧.aof

AOF3中策略:

always:收到命令就写,效率最慢,但是持久化最彻底

everysec:每秒钟写一次

no:依赖系统,默认是30秒写一次

reids4.0推出了RDB-AOF混合方式,而且默认启用


主从复制 高可用:

默认redis是一个服务器运行的,多个redis服务器的情况:

一个当主节点,负责写入和同步,主节点执行完命令后会通知到其他子字节(命令传播),为了主节点和子节点的数据同步。

当一个子节点挂了,主节点有游标(复制偏移量),每次发缓存给子节点,游标就会标记一下,所以子节点挂了主节点就知道从哪一步开始发缓存了。当主节点挂掉,子节点中的其中一个会变成主节点,这件事由哨兵redis服务器做,哨兵不用存取数据,专门管理主节点挂掉的情况(其实哨兵也不止一个,因为会有哨兵挂掉的情况),哨兵每隔10秒跟主节点确认还有那些子节点,还有每隔1秒的跟所有节点的心跳机制,但是由会出现,1个哨兵觉得一个节点挂了,剩下2个哨兵觉得这个节点没挂,那它就没挂。子节点变成主节点由硬件性能进行排序,或者子节点中跟主节点断开时间最短的子节点变成新的主节点,或者参考数据偏移量最大的。

集群没写

参考B站视频:【趣话Redis第一弹】我是Redis,MySQL大哥被我坑惨了!_哔哩哔哩_bilibili


redis-cli.exe 客户端 输命令的

redis-server 服务的 默认是开启运行的


5种类型:Sting、Hash、List、set、zset(sorted set)

String:

存:set name tom                取:get name

删:del name

值加一:incr age 不需要初始化                值减一:decr age

keys * 拿到所有的key

exists name name是否存在

expire name 10 设置过期时间10秒                persist name 取消过期时间


Hash:存实体类

hset user name tom

hset user age 18

hget user name

hget user age

hdel user name

hexists user name name是否存在

hincrby user age 10 加10,只有加没有减

hkeys user 拿user里的所有key

hvals user 拿user里的所有value

hgetall user key和value都拿


List:队列

rpush names tom 从右边添加

lpush

lrange names 5 10 从左边拿,5开始,10结束,下标从0开始

lrange names 0 -1 拿全部

lpop names 弹出最左边的key=name的value 弹出去就没了

rpop names

llen names 列表长度

insert names before tom jack 在tom前面插入一个jack

insert names after

lset names 0 tom tom的下标变成0,它成为了第一位

lrem names 1 tom 删除1个tom

lindex names 0 通过下标获取value


Set:不可重复!乱序

sadd names tom jack

smembers names 遍历所有value

srem names tom 删除tom

spop names 2 从names里随机弹出2个(3.0.5不支持)

sdiff name1s name2s 差集 name1s有且name2s没有的

sinter name1s name2s 交集

sunion name1s name2s 并集


Sorted set(Zset):

zadd nams 100 tom

zrange names 0 -1 withscores 升序查询 withscores 并且显示score

zrevrange 降序

zrank names tom 返回升序的tom下标

zrevrank 降序

zcard names 返回names的集合的个数

zincrby names tom 100 给tom加100分

zrangebyscore names 100 200 按[100,200)分数的范围正序返回value

zrevrangebycore 降序

zrem nams tom 删除names里面的tom


可读性前缀:

set user:1 tom

set user:2 jack

keys user:*  查所有的key

rename user:1 user:2 重命名


事务:

redis的命令是原子性的,所以批量执行指令时,中间某条指令错误并不会导致前面的指令回滚,后面的指令也不会停

multi 事务开始

exec 事务结束

当在做事务的时候,别的客户端发来了请求,需要等到时候后才会执行


在SpringBoot项目中使用jedis:

导包:

<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId>
</dependency>

相关文章:

Redis笔记

缓存过期时间很重要&#xff01;redis是单线程的 对于内存过多的3中方案&#xff1a; 惰性删除&#xff1a; 在定时删除的基础上&#xff0c;对于已经过期了的数据&#xff0c;redis的随机选择算法一直没有选中这个数据&#xff0c;所以导致它就一直没被删除&#xff0c;但是…...

centos 安装supervisor并运行网站

前言 之前一直用宝塔的**进程守护管理器【Supervisor】**来启动一些项目,如ThinkPHP、Hyperf的项目,或laravel的一些命令。如果不用宝塔怎么办呢? 一、简介[supervisor] [Supervisor] 是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支…...

Hadoop面试题十道

问题 1&#xff1a;Hadoop是什么&#xff1f; 答案&#xff1a;Hadoop是一个开源的分布式计算框架&#xff0c;用于处理大规模数据集的存储和处理。它基于Google的MapReduce和Google文件系统&#xff08;GFS&#xff09;的思想&#xff0c;旨在解决大数据量的处理和分析问题。…...

使用Docker-Compose对Docker容器集群快速编排

目录 一、Docker-Compose1、Docker-Compose使用场景2、Docker-Compose简介3、Docker-Compose安装部署4、YAML 文件格式及编写注意事项5、Docker Compose配置常用字段6、Docker Compose 常用命令7、Docker Compose 文件结构8、docker Compose撰写nginx 镜像9、docker Compose撰写…...

React-Redux 对Todolist修改

在单独使用redux的时候 需要手动订阅store里面 感觉特别麻烦 不错的是react有一个组件可以帮我们解决这个问题, 那就是react-redux。 react-redux提供了Provider 和 connent给我们使用。 先说一下几个重点知道的知识 Provider 就是用来提供store里面的状态 自动getState()co…...

初识微信小程序

新建小程序 创建一个新的微信小程序项目&#xff1a; 打开微信开发者工具&#xff0c;点击“新建项目”。 在弹出的窗口中&#xff0c;填写小程序的 AppID、项目名称和项目目录等信息。 点击“确定”按钮&#xff0c;等待微信开发者工具自动下载并安装所需的依赖库和框架。 …...

我们该如何入门编程呢

提醒&#xff1a;以下内容仅做参考&#xff0c;可自行发散。在发布作品前&#xff0c;请把不需要的内容删掉。 随着信息技术的快速发展&#xff0c;编程已经成为一个越来越重要的技能。那么&#xff0c;我们该如何入门编程呢&#xff1f;选择编程语言&#xff1a;选择一种编程…...

App 软件开发《判断6》试卷及答案

App 软件开发《判断6》试卷及答案 文章目录 App 软件开发《判断6》试卷及答案判断题&#xff08;对的打“√”&#xff0c;错的打“”&#xff1b;共0分&#xff09;1&#xff0e;”ionic resources --icon"命令用于生成适应不同分辨率的App图标所应用的图片。(✔)2&#…...

MVC工作原理

MVC工作原理 有视图的情况 1.客户端&#xff08;浏览器&#xff09;发起请求&#xff0c;DispatcherServlet拦截请求。 2.DispatcherServlet根据请求信息调用HandlerMapping。HandlerMapping根据uri去匹配查询能处理的Handler&#xff08;也就是我们所说的Controller&#x…...

使用 Redis 统计网站 UV 的方法

使用 Redis 统计网站 UV 的方法(概率算法) 文章目录 前言思路HyperLogLog 使用 Redis 命令操作使用 Java 代码操作 HyperLogLog 实现原理及特点使用 Java 实现 HyperLogLog小结 前言 网站 UV 就是指网站的独立用户访问量Unique Visitor&#xff0c;即相同用户的多次访问需要…...

黑客工具软件大全

黑客工具软件大全100套 给大家准备了全套网络安全梓料&#xff0c;有web安全&#xff0c;还有渗透测试等等内容&#xff0c;还包含电子书、面试题、pdf文档、视频以及相关的网络安全笔记 &#x1f447;&#x1f447;&#x1f447; 《黑客&网络安全入门&进阶学习包》 &a…...

uniapp主题切换功能的第二种实现方式(scss变量+require)

在上一篇 “uniapp主题切换功能的第一种实现方式&#xff08;scss变量vuex&#xff09;” 中介绍了第一种如何切换主题&#xff0c;但我们总结出一些不好的地方&#xff0c;例如扩展性不强&#xff0c;维护起来也困难等等&#xff0c;那么接下我再给大家介绍另外一种切换主题的…...

# 蓝牙音频相关知识

蓝牙音频相关知识 文章目录 蓝牙音频相关知识1 音频源2 蓝牙音频编解码器3 一些标准4 蓝牙音频其他相关知识4.1 蓝牙版本4.2 ANC&#xff08;主动降噪&#xff09;4.3 音响相关参数4.4 音质评价4.5 HI-Fi声音特点4.6 耳机线材4.7 耳机分类4.8 IP防尘防水等级4.9 噪音与量化噪音…...

【AI作画】使用DiffusionBee with stable-diffusion在mac M1平台玩AI作画

DiffusionBee是一个完全免费、离线的工具。它简洁易用&#xff0c;你只需输入一些标签或文本描述&#xff0c;它就能生成艺术图像。 DiffusionBee下载地址 运行DiffusionBee的硬性要求&#xff1a;MacOS系统版本必须在12.3及以上 DBe安装完成后&#xff0c;去C站挑选自己喜欢…...

2 STM32库函数 之 通用同步异步收发器(USART、串口)所有函数的介绍及使用

2 STM32库函数 之 通用同步异步收发器&#xff08;USART、串口&#xff09;所有函数的介绍及使用 前言一、USART固件库函数预览二、USART固件库函数具体介绍2.1 库函数 USART_DeInit2.2 库函数 USART_Init2.2.1 USART_InitTypeDef structure2.2.2 USART_InitTypeDef 成员 USART…...

SpringCloudAlibaba整合Sentinel实现流量控制熔断降级

目录 一、概念 二、整合Sentinel控制台 三、Sentinel规则配置 四、@SentinelResource资源保护注解...

CentOS 7安装 Postgre

零、前置条件 系统CentOS 7&#xff0c;并已联网&#xff0c;已安装gcc或者g编译器&#xff0c;GNU make版本3.80或以上&#xff0c;系统有至少一个除root之外的普通用户user gcc安装-参考链接查看make命令的版本——make --version更新make版本-参考链接postgresql的使用一般…...

rpc 异步非阻塞 io 配置 线程池和队列

相关 雪崩 - 如何重试 - sla和重试风暴的双保证_个人渣记录仅为自己搜索用的博客-CSDN博客 接口耗时公式 耗时 cpu时间 io时间 线程池数量 最佳数目 1s / 平均cpu时间 * 内核数. 最大平均cpu时间 接口耗时- all外部io时间. 结合gc , linux本身其他线程, 只会还少点. …...

【Turfjs的java版本JTS】前面讲了Turfjs可以实现几何计算,空间计算的功能,如果后端要做这项功能也有类似的类库,JTS

JTS Java Topology Suite 几何计算&#xff1a; 1. 前端js就用这个 Turfjs的类库。参考网站&#xff1a; 计算两线段相交点 | Turf.js中文网 2. 后端java语言就可以用 JTS这个类库&#xff0c;参考网站&#xff1a; JTS参考网站&#xff1a; 1. https://github.com/locatio…...

从Window中先多瞥几眼

JavaFx17官方文档中有如下的描述: Window类是一个顶层窗口类,在其中可以承载场景,并与用户交互。窗口可以是Stage、PopupWindow或其他类似的顶层窗口。 JavaFX Stage类是顶级的JavaFX容器。初级阶段由平台搭建。其他Stage对象可以由应用程序构造。 许多Stage属性是只读的…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...