Redis工作原理与机制

Doris Streamloader安装教程 Doris Streamloader 是一款用于将数据导入 Doris 数据库的专用客户端工具。本文介绍其在centos7环境下的安装过程 阅读详情

redis 怎么说呢,在项目中经常用,但是仅仅只是限于用它常用的一些api

至于它里面的原理也是一直都没有搞清楚

今天就来具体探究一下redis内部的工作机制和底层原理吧

概述:

Redis 是一个开源的key-value 存储系统,no-sql 数据库

支持存储的value类型 可以包括String(字符串), list(链表), set(集合),zset(sorted set --有序集合)和 hash(哈希类型)

这些数据类型支持 push/pop、add/remove 及取交集并集和差集及更多操作,且这些操作都是原子性的

数据都缓存在内存中的,redis会周期性的把更新的数据写入磁盘,或把修改操作写入追加的记录文件

常用命令

./redis-server /etc/redis.conf 启动 redis

./redis-cli 登录

set key value 设置key 和值

get key 获取key对应的值

keys * 查看当前库所有 key

exists key 判断某个key是否存在

type key 查看你的key 是什么类型

del key 删除指定的key数据

unlink key 根据key选择非阻塞删除 仅将keys 从keyspace 元数据中删除,真正删除会在后续异步操作

expire key 10 设置key过期时间10秒钟

ttl key 查看还有多少秒过期,-1 表示永不过期,-2 表示已经过期

select 1 选择库

dbsize 查看当前数据库的key的数量

flushdb 清空当前库

mset k1 v1 k2 v2 k3 v3 设置多个key-value

mget k1 k2 k3 获取多个key 对应的值

msetnx k11 v11 k22 v22 k33 v33 原子性,

setex k 30 value 设置 k 值为value 过期时间30秒


工作原理:

Redis 线程模型:

redis 采用 nio 的io多路复用原则,也就是一个线程维护多个不同的redis客户端连接,从而提高处理并发效率和保证线程安全的问题,底层采用linux系统的epoll技术避免空轮询。

我觉得暂时了解到这里就可以了吧,至于底层linux的epoll技术是什么呢?有兴趣的话可以接着深入探究一下

redis 缓存机制与原理

可存储的五种数据类型对应的是 value的类型

String 类型,Hash类型,List类型,Set类型,Sorted-Sets

String 的数据结构为简单动态字符串 Simple Dynamic String[SDS], 是可以修改的字符串,内部结构实现上类似java 的ArrayList,采用预分配冗余空间的方式来减少内存频繁分配 最大长度512M

string 常用命令

set key value 设置key 和值

get key 获取key对应的值

append key value2 在key对应的值后面追加value2

strlen key 获取key对应的值的长度

setnx key value 当key 不存在时 才能设置成功

incr key 增加1 incrby key 10 增加10

decr key 减1 decrby key 9 减9


List 单键–多值 如:name ----“gexl,xiaozhang,xiaoli”

底层数据结构是双向链表 quicklist 快速链表

lpush/rpush 存值[左/右]

lpop/rpop 取值[左/右]

在这里插入图片描述

lrange key 0 -1 取出k对应的全部值


set 类型

set 集合的操作命令

将一个或多个元素添加到指定的集合总

sadd key value [value value …]

sadd set01 a b c

sadd set01 d e f

获取指定集合中所有的元素: smembers key

smembers set01

判断指定元素是否在集合中存在 sismember key member

存在 返回1

不存在 返回0

sismember set01 d

获取指定集合的长度

scard key

scard set01

指定移除集合中的一个或者多个元素:

srem key member [member …]

srem set01 a b f

将指定集合中的指定元素移动到另一个集合中

smove source dest member

smove set1 set2 c

获取第一个集合中有但是 其他集合中没有的元素组成的新集合

sdiff key key [key …]

sdiff set1 set2 set3

获取所有指定集合中所有元素中相同的元素

sinter set1 set2 set3

获取所有指定集合中所有元素组成的大集合

sunion set1 set2 set3

sorted-sets类型

hash 类型

hash 类型的数据结构 特别适合对象的存储

key–user value ----> field value user = {id=1,name=gexl,age=20} 不过修改数据时 不方便

​ id 1

​ name gexl

​ age 20

第二种 数据分开存储 user:id 1

​ user:name gexl

​ user:age 20 缺点数据分散

第三种方案 hash id 1

​ user—> name gexl

​ age 20

命令:hset user:1001 id 1

​ hset user:1001 name gexl

​ hset user:1001 age 20

​ hget user:1001

​ hkeys user:1001 查看key

​ hvals user:1001 查看key对应的value

Redis 的持久化机制 aof 、 rdb(默认)

redis 宕机之后数据不会丢失的原因就是持久化机制

默认开启的持久化

RDB 是采用的定时同步,属于是全量同步

在redis.conf 文件中的配置

save 900 1 # 每900秒(15分钟) 之内至少有1次keychanged [key 的变化] 操作 则记录 在dump.rdb 文件中

save 300 10 # 每300秒(5分钟) 内至少有10次 keychanged 操作 则记录在dump.rdb文件中

save 60 10000 # 每60秒(1分钟) 至少有10000次 keychanged操作 则 记录在dump.rdb文件中

AOF 是根据操作日志来进行同步的,属于增量同步

aof 的三种同步策略

在 redis.conf 文件修改配置 如下:

appendonly yes

appendfilename “appendonly.aof”

# appendfsync always # 数据发生修改 则同步到aof文件中去,保证数据不丢失,但是效率比较低

appendfsync everysec # 每秒钟 从缓冲区一次性写入进入aof文件, 同步效率高,但是可能丢失一秒的数据

# appendfsync no #

appendonly.aof 文件中 记录了 每次set 命令调用执行时的信息 key 和 value信息

EHCACHE 一级缓存

淘汰策略,持久化机制

全量同步和增量同步

  1. 每天定时避开高峰期或者采用周期 实现将数据拷贝到另一个地方

  2. 增量同步采用行为操作对数据实现同步

    频率高,对服务器同步的压力大,数据不丢失

应用场景:

redis的应用场景:

  1. Token 令牌的生成

  2. 短信验证码的code 时效性

  3. 实现缓存查询数据

减轻数据库的访问压力, 可以作为一种nosql的数据库 存储数据

  1. 实现计数器

  2. 分布式锁

    lua 脚本 保证 删除的原子性

    redis 实现分布式锁

     	String uuid = UUID.randomUUID().toString();
    
    	// 添加uuid 防止 误删除
     	Boolean lock = redisTemplate.opsForValue().setIfAbsent("lock",uuid,3,TimeUnit.SECONDS);
    
    
    	// 获取到 uuid 如果一致 则删除
    	if(uuid.equals((String))redisTemplate.opsForValue().get("lock")) {
            // 释放锁
    		redisTemplate.delete("lock");
            // 续命
            
    	}
    
  3. 延迟操作

  4. 分布式消息中间件

  5. 缓存击穿

    在同一时间某些热点数据的redis key 过期,此时又有大量的请求访问过来,请求打到数据库,造成数据库压力增大,

    解决方案

    设置redis key 不过期,或者不定时过期,总之不能在同一时间过期,减小数据库的访问压力

  6. 缓存穿透

    使用 redis 和 数据库都不存在的key 来大量的请求 查询 redis缓存,redis中不存在的key 的请求, 则会打到数据库上去

    造成数据库压力增大

    解决方案:

    这种多是 来自黑客的攻击,查找并禁用 黑客的ip地址或者请求

    在接口处做 校验 如果 id<0 则直接返回,不让请求打到redis和数据库

    将这些请求的key 设置在redis中 key 对应的value 设置为null

  7. 缓存雪崩

​ 有缓存击穿或者缓存穿透 造成的数据库宕机 无响应,影响正常的业务操作

问题记录:

在spring项目中使用 RedisTemplate redisTemplate时 的注入问题

在制定了泛型时 使用@Autowired 注入无效

@Resource 则可用

数据库的数据与redis 数据不一致时,

MySQL 和 Redis 的数据同步问题如何解决?

方式一:直接清理Redis 缓存,重新查询数据库即可

方式二: 直接采用MQ订阅 mysql binlog 日志文件 增量同步到Redis中

最终一致性方案 存在短暂数据延迟

方式三:使用alibaba的canal

强一致性 在redis 不成立,只是通过弱一致性和 最终一致性来解决的

使用MQ 订阅数据库binlog 文件,增量实时同步到 redis中去

redis这块怎么说呢,感觉里面的有些东西如果深入研究的话内容还是比较多的,有些问题也需要去构建环境实践的,时间有限,所以先抄作业记录在此处,后续再接着完善

RM3100应用笔记驱动程序SPI接口 PNI磁传感器套件RM3100磁传感器套件由2个Sen-XY-f(pn13104)地磁传感器,1个Sen-Z-f(pn13101)地磁传感器和MagI2C(pn13156)控制芯片组成,能够实现三维空间的磁场大小测量。 阅读详情

相关推荐

当GO.db安装失败时,生物信息学新手应该知道的5个底层逻辑

本文为生物信息学新手提供了解决GO.db安装失败的5个关键底层逻辑,包括网络连接与镜像源设置、版本兼容性检查、依赖关系管理、SQLite存储机制理解以及调试技巧。特别针对Bioconductor的GO.db包安装问题,详细介绍了如何通过切换国内镜像、管理版本冲突和解决依赖问题来成功安装,帮助用户高效克服常见安装障碍。

weixin_29062823的博客 408

Redis常用的命令

redis中几种数据类型常用的操作命令。

qq_37400096的博客 2046

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6246

Redis:删除单个或多个指定Key

【代码】Redis:删除单个或多个指定Key。

一些平时在开发过程中遇到的常见问题,分享给大家 1803

绕开华为通道,获取解锁码解锁BootLoader

刷机有风险,操作需谨慎,如果因为各种因素导致手机变砖无法开机,本教程概不负责,望悉知 前言 这篇文章的大多内容是根据我自己找的一篇文章《绕开华为通道,获取解锁码解锁BootLoader》来编写的,里面的大部分内容是文章的原内容。下面的都是我参考文章中做了一些小部分的修改,增加了我华为P8手机的一些操作,下面开始讲述我的解锁过程。 因为华为官方在2018年的七八月份吧,关闭了解锁码的申请通道,这...

Martin.Mu `s Special Column 5万+

中国银行信息科技岗位笔试

收到笔试只剩四天了,收集的资料,后续会更新

weixin_46050242的博客 4596

Redis中的key键操作

Redis中的key键操作

m0_51069685的博客 4360

180.在 Vue3 中使用 OpenLayers 实现多个多边形的绘制、编辑、删除与清空

【摘要】本文介绍如何在Vue3+TypeScript环境下使用OpenLayers实现多边形地图交互功能。通过Composition API封装核心逻辑,实现了多边形绘制、编辑、删除及清空等操作。关键技术包括:使用VectorLayer管理图形数据,Draw/Modify/Select交互控制,以及通过ref()管理交互状态。文中提供了完整代码示例,并解决了交互对象叠加问题,为开发GIS应用提供了基础模块。该方案支持扩展为数据库存储、后端交互等高级功能。

小彭的博客 770

Redis详解(1)--原理和机制

一、性能 1 性能测试 测试环境: RHEL 6.3 / HP Gen8 Server/ 2 * Intel Xeon 2.00GHz(6 core) / 64G DDR3 memory / 300G RAID-1 SATA / 1 master(writ AOF), 1 slave(write AOF & RDB) 数据准备: 预加载两千万条数据,占用10G内存。 测试工具:自...

黄规速博客:学如逆水行舟,不进则退 3万+

022、Conv-BN-SiLU 基础卷积块:构造函数参数计算,前向传播的 PyTorch 逐行实现

本文详细解析了Conv-BN-SiLU卷积块的实现细节与注意事项。作者从调试经历出发,指出bias参数冗余会导致数值不稳定,强调卷积层应设置bias=False。文章对比了SiLU与ReLU的特性差异,逐行分析了构造函数参数计算(包括自动填充、分组卷积等)和前向传播过程,特别讲解了BN层与SiLU激活的数值特性。最后分享了三个实践中的常见问题:BN的momentum设置、SiLU输出范围的影响,以及分组卷积的通道对齐要求,并提供了卷积与BN融合的推理优化技巧。全文聚焦实际工程实现中的关键细节,具有较强实操指

ai技术增长的博客 218

【雷达】一维和二维自适应波束形成(DBF))DBF附matlab代码

1 简介 数字波束形成技术是天线波束形成原理与数字信号处理技术相结合的产物,其广泛应用于阵列信号处理领域.由于电磁工作环境的恶化和大量射频干扰的存在,在极低的信干噪比(SINR)条件下进行目标检测和信息提取十分困难.对于阵列系统,往往采用自适应数字波束形成(ADBF)技术,来抑制强干扰和方向性干扰对有用信号的影响.介绍了数字波束形成器的基本原理及其DSP的实现结构.​ 2 完整代码 clc;clear all;close all;%%%%%%%%%%%%%%%%%一维DBF%%%%%%%%%%%%%

qq_59747472的博客 7267

Redis面经

什么是Redis? Redis本质上是一个Key-Value类型的内存数据库,很像memcached,整个数据库统统加载在内存当中进行操作,定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作,Redis的性能非常出色,每秒可以处理超过 10万次读写操作,是已知性能最快的Key-Value DB。 Redis的出色之处不仅仅是性能,Redis最大的魅力是支持保存多种数据结构,此...

Geffin的博客 924

Python爬虫反爬:突破Cloudflare 5秒盾(免费方案,小红书/知乎可用)

这套方案的核心优势是“真实模拟+免费无门槛”无需付费代理、无需复杂JS解密,仅用playwright模拟真实浏览器,即可突破Cloudflare 5秒盾;适配小红书、知乎、豆瓣等主流平台,修改配置即可复用;兼顾易用性和稳定性,新手也能快速上手,企业级场景可通过IP轮换、异步爬取进一步优化。“模拟人类行为到底”——Cloudflare的反爬本质是区分“机器”和“人类”,只要爬虫的浏览器指纹、行为特征与人类一致,就能稳定绕过限制。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2881

Redis的哨兵(sentinl)机制的工作原理

什么是哨兵机制? redis的哨兵(sentinel)系统用于管理多个redis服务器,该系统执行以下三个任务: 监控(monitoring):哨兵(sentinel)会不断地检查你的master和slave是否运作正常。 提醒(notification):当被监控的某个redis出现问题时,哨兵(sentinel)可以通过API向管理员或者其他应用程序发送通知。 自动故障转移(automati...

weixin_42268028的博客 356

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Redis的哨兵 (sentinal) 机制的工作原理

以下内容转载自https://www.toutiao.com/i6748596176645259790/ 什么是哨兵机制? Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。 自动故.

Shanks 459

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【redis】AOF 基本工作原理、工作流程、文件同步、重写机制详解

RDB最大的问题,就是不能实时的持久化保存数据,在两次生成快照之间,实时的数据可能会随着重启而丢失。

Yeeear的博客 1729

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Redis 哨兵机制的工作原理——Java全栈知识(22)

接下来我们详细讲哨兵机制的作用以及实现原理以下是 Redis 哨兵的结构图。

dghehe的博客 1376

Sentinel : Redis集群哨兵机制工作原理

Sentinel是Redis官方提供的一种Redis集群高可用的解决方案。多个Sentinel分别订阅指定频道并分别监控Redis集群中的每个节点,检测他们是否发生故障,若主节点发生故障,Sentinels会进行选举出一个Redis 从节点作为新的主节点,并让其他的从节点指向这个新的主节点。并且会同步这个新地址给client。

qq_39149841的博客 332

【Redis】Redis 持久化机制详解:RDB、AOF 和混合持久化的工作原理及优劣分析

父进程此时继续写这个旧的 aof 文件的意义就是为了避免出现,重写的过程中重写一半服务器挂了,这种情况下子进程内存写的数据就都没了,新的 aof 文件内容还不完整,父进程写的旧的 aof 文件就能保证重启之后数据的完整性了。内存中的数据的状态,已经相当于是把 AOF 文件结果整理后的模样了。dump.rdb 是 RDB 机制生成的镜像文件,Redis 服务器默认就是开启了 RDB 的,这是一个二进制文件,内存中的数据是以压缩的形式保存到这个二进制文件的,这是需要消耗一定的 CPU 资源,但能节省存储空间。

Hsusan的博客 1564

分析redis的RDB和AOF两种持久化机制的工作原理

课程大纲 1、RDB和AOF两种持久化机制的介绍 2、RDB持久化机制的优点 3、RDB持久化机制的缺点 4、AOF持久化机制的优点 5、AOF持久化机制的缺点 6、RDB和AOF到底该如何选择 我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的 企业级redis集群架构:海量数据、高并发、高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可

Jews 1910

php使用redis哨兵机制,redis哨兵模式工作原理

简介sentinel是redis高可用的解决方案,sentinel系统(N个sentinel实例,N >= 1)可以监视一个或者多个redis master服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。1.sentinel初始化可以使用命令redis-sentine...

weixin_42140710的博客 532

redis的RDB和AOF两种持久化机制的工作原理

1.RDB持久化机制介绍 简单来说就是将redis内存中的数据生成快照存储到硬盘中去。 2.RDB持久化机制执行流程 1)执行bgsave的时候,redis的主进程会检查是否存在子进程在执行rdb持久化任务,如果有的话直接返回。 2) 如果没有的话redis主进程会fork一个子进程出来去执行rdb持久化任务操作,fork操作的时候会阻塞主进程,fork操作完成后会发消息给主进程,从而不再...

u013164612的专栏 297

redis哨兵模式原理_Redis的哨兵 (sentinal) 机制的工作原理

什么是哨兵机制?Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务: 监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。 提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。 自动故障迁移(...

weixin_39710295的博客 108

这样讲Redis哨兵机制Sentinel的工作原理,或许你真的能听懂~

这样讲Redis哨兵机制Sentinel的工作原理,或许你真的能听懂~

896

2、Redis的RDB和AOF两种持久化机制的工作原理

课程大纲 1、RDB和AOF两种持久化机制的介绍 2、RDB持久化机制的优点 3、RDB持久化机制的缺点 4、AOF持久化机制的优点 5、AOF持久化机制的缺点 6、RDB和AOF到底该如何选择 我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的 企业级redis集群架构:海量数据、高并发、高可用 持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面去 比如你redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用 重启redis,尽快让它

Darryl Cao的博客 354

Redis_02_之RDB和AOF两种持久化机制的工作原理

文章目录Redis的RDB和AOF两种持久化机制的工作原理1. redis持久化的意义2. redis持久化方案2.1 RDB2.1.1 `RDB`持久化机制的优点2.1.2 `RDB`持久化机制的缺点2.2 AOF2.2.1 `AOF`持久化机制的优点2.2.2 `AOF`持久化机制的缺点3. `RDB`和`AOF`该如何选择 Redis的RDB和AOF两种持久化机制的工作原理 1. redis...

superbeyone 506
上一篇: Spring Aop流程源码分析
下一篇: java中的BIO、NIO、AIO
xiaolong_java
博客等级 码龄12年 1粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值