当前位置: 首页 > 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属性是只读的…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...