Redis(超详细)

news2024/11/17 22:35:05

Redis


Redis概念:

Redis是开源的,遵循BSD的,基于内存数据存储,被用于作为数据库、缓存机制、消息中间件;


Redis的特点:

1.高性能key/valu内存xing数据库;

2.支持丰富的数据类型

3.支持持久化;

4.单线程,单进程。


Redis为什么快?

他直接运行在内存上,他查询速率要比硬盘快上很多倍,他是单线程。 

NoSQL(Not only SQL)

概念

意即不仅仅是SQL,泛指非关系型数据库;


NoSQL的四大分类:


1.键值key-value存储数据库;
2.列存储数据库;
3.文档型数据库;
4.图形数据库。


redis-cli:是redis提供的命令行客户端;

redis-server:是redis的服务端启动脚本;

redis-sentinel:是redis的哨兵启动脚本。


五种基本数据类型:


1.String 存字符串 验证码


String:通常用于存储验证码 set get 多个值 mset mget

设置有效时间:expire key time / setex key time value

查看存活时间 ttl key

追加 sppend key value 数值加减 -1 decr +1 incr + by key

2.List 排序 商品列表

list:有序的可重复的集合;通常用于商品列表的展示,

lpush lrange key 起始索引 结束索引

删除重复元素:lrem key 删除个数 value

获取列表个数 llen key

3.Ste 共同好友,可能认识的人

set:无序的不可重复的集合;通常用于好友推荐,共同好友。

sadd 获取所有元素 smembers key 获取集合元素个数 scard key

求差集 sdiff 求交集 sinter

4.Zset 有序不可重复  排行榜

zset:可排序,不可重复的set集合;通常用于排行榜。

zadd 返回个数 zcard 升序 zrange 降序 zrevrange

5.Hash 

hash:key{key value}

hset hget hgetall

判断key是否存在:hexists 获得所有的key hkeys 获得所有的值 hvals

Redis的持久化

1.RDB(快照)

01.BGSAVE

第一种是客户端通过BGSAVE命令来创建一个快照,当接收到客户端的BGSAVE命令时,redis会调用fork来创建一个子进程,然后子进程负责将快照写入磁盘中,而父进程则继续处理命令请求。

02.SAVE

第二种是客户端通过SAVE命令来创建快照,接收到SAVE命令的redis服务器在快照创建完毕之前将不再响应任何其他的命令。这个命令不常用,因为使用SAVE命令在创建快照完毕之前,redis处于阻塞状态,无法对外服务。

2.AOF(只追加日志文件)

AOF可以将所有客户端的所有写命令记录在日志文件中。

特点:

这种方式可以将所有客户端执行的写命令记录到日志文件中,AOF持久化会将被执行的写命令写到AOF的文件末尾,以此来记录数据发生的变化,因此只要redis从头到尾执行一次AOF文件所包含的所有写命令,就可以恢复AOF文件的记录的数据集.

日志追加频率

1.everysec每秒执行一次同步显示的将多个命令同步到磁盘(推荐);

2.always每个redis写命令都要同步写入磁盘,严重降低redis速度(谨慎使用);

3.no 由操作系统决定何时同步(不推荐)。

AOF重写

AOF重写是我们创建一个新的AOF文件,把对里边儿的所有的数据进行一个命令重写的方式,写到这个新的AOF文件里面,并需把旧的AOF文件替换掉。

Redis主从复制

Redis是一种常见的数据备份方式,可以解决冗余备份,实现读写分离等功能;Redis的原理其实就是一个redis实例的数据复制到多个redis实例上,一个redis为主节点,多个redis实例为从节点,主节点负责所有数据的写操作,然后将写操作同步给从节点,从节点只接收读请求,不处理任何的写请求,从而保证了数据的一致性。

Redis哨兵机制

哨兵机制是redis高可用性的重要保障,哨兵机制是由哨兵节点组成,这些哨兵节点会定期检查Redis实例的健康状态,并在主节点出现故障时,哨兵机制就会自动在从节点中选举新的主节点,同时,哨兵节点还可以操作故障转移操作,将原本的从节点提升为新的主节点,并重新建立主从关系。如果旧主节点恢复了,就会成为新主节点的从节点。

缓存雪崩:

redis中多个key同时失效,过期的数据在redis中就会消失,这个时候如果多个请求来访问,redis就无法响应,就会去访问数据库,数据库就瞬间感觉到压力大而卡死或者宕机;

雪崩解决方案:

1.给key设置随机的失效时间;

 2.集群方案放置宕机不可用。

击穿:

redis中某一个key失效,这个时候有很多请求来访问这个失效的key,在redis中得不到响应,就去访问数据库,导致数据库瘫痪;

击穿解决方案:

1.互斥锁

 2.逻辑过期

穿透:

用户发送请求的数据在redis中和数据库中都不存在,这样缓存永远都不会失效,请求最终都到了数据库上。

解决方案:

1.当在数据库查询的结果也不存在的时候,可以返回null值给redis,并给null设置失效时间;

2.布隆过滤器。

延迟双删

为了保证在修改或者删除的时候,redis中的数据和数据库中的数据保持一致;当用户进行修改或者删除的操作时,先将redis中的缓存删除,然后去数据库去做对应操作,这个时候有用户进来读取这条信息,那么这条数据就会重新加载redis缓存中,所以当数据库操作完成后,需要再一次删除redis中的缓存,从而保证redsi中的数据和数据库中的数据保持一致。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Information security in DLMS/COSEM(Green-Book)—认证机制

Information security in DLMS/COSEM 9.2.1 概述9.2.2 DLMS/COSEM安全概念9.2.2.1 概述 9.2.2.1 概述9.2.2.2 身份识别和认证9.2.2.2.1 身份识别9.2.2.2.2 认证机制9.2.2.2.2.1 概述 无安全认证(Lowest Level Security):低级别安全认证&#…

python中数据的作用域

一、命名空间 在 Python 中,命名空间是一个系统,它用于确保名字的唯一性,并防止命名冲突。命名空间是一个存储变量名称(或者更广泛地说,标识符)与对象之间映射的抽象概念。每个变量名你在程序中创建&#x…

Redis-数据类型-zset

文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db4数据库4、将一个或多个member元素及其score值加入到有序集key当中5、升序返回有序集key6、升序返回有序集key,让分数一起和值返回的结果集7、降序返回有序集key,让分数一起和值返回到结…

Android上编译和使用curl

1 概述 Android系统编译的时候默认是没有带curl工具的,但是在aosp源码中,却是有curl的源码包含。所以只需要编译curl,然后将其push到Android设备中,就可以使用curl命令了。 2 编译curl 这里编译curl是在整机代码环境下进行编译…

机器人控制系列教程之雅可比矩阵和奇异性

简介 在机器人学和控制理论中,雅可比矩阵扮演着至关重要的角色。它是一个描述机器人末端执行器速度与关节速度之间关系的数学工具。通过雅可比矩阵,我们可以更好地理解和控制机器人的运动,特别是在执行精确操作时。雅可比矩阵的计算通常基于…

python turtle 画帕恰狗

先上个图给大家看看 代码 ##作者V w1933423 import turtle turtle.bgcolor("#ece8dc") turtle.setup(600,900) p turtle.Pen() p.pensize(14) p.speed(5) p.color("black")p.penup() p.goto(-54,-44) p.pendown() p.goto(-37,-39) p.goto(-27,-24) p.go…

swp添加池子addLiquidity失败

案发现场 首次添加交易对、一直失败、但是也没提示具体的原因。到这一步就没了、由下图可知、也没看到log、由此可见第一步就失败了。 解决方案 工厂KywFactory 添加如下 bytes32 public constant INIT_CODE_PAIR_HASH keccak256(abi.encodePacked(type(KywPair).creatio…

0620所学——环境变量、CMake等

https://www.cnblogs.com/bravesunforever/p/10939078.html CMake: https://zhuanlan.zhihu.com/p/659412062 0621: 学会了在Github里创建组织,把本地仓库“同步”,就可以上传到Github,然后学会了把自己的Repos转移到组织里。G…

前端中的深拷贝

第1部分:引言 深拷贝:前端开发的隐形守护者 在前端开发的世界里,数据的传递和状态的管理是构建用户界面的基础。然而,数据的复制常常被忽视,直到它引发bug,我们才意识到它的重要性。深拷贝,这…

NC--介绍-未加密加密后-流量抓包对比

免责声明:本节仅做技术交流与学习... 目录 介绍: 用法: 未加密--流量抓包 加密: 攻击端 靶机 抓包分析: 介绍: nc 是一个Linux环境下常用的工具命令,可以用来帮助开发者查询和解决网路问题,通常被认为是 NetCat 工具的缩写,在网络工具…

arduino按钮

Arduino - Button Arduino - 按钮 参考: ezButton-按钮库从按钮开关看上拉pull-up电阻、下拉电阻按键的防抖动处理 The button is also called pushbutton, tactile button or momentary switch. It is a basic component and widely used in many Arduino projec…

06 - matlab m_map地学绘图工具基础函数 - 绘制海岸线

06 - matlab m_map地学绘图工具基础函数 - 绘制海岸线 0. 引言1. 关于m_coast2. 关于m_gshhs3. 关于m_gshhs_c、m_gshhs_I、m_gshhs_i、m_gshhs_h、m_gshhs_f4. 关于m_shaperead5. 结语 0. 引言 本篇介绍下m_map中添加绘制海岸线的一系列函数及其用法,主要函数包括m…

分享一个解决 EF 性能低的思路,通过 Python 访问心跳侦测 API 保持 EF 在线

前言 .NET FrameWork EF(Entity Framework)是一个很优秀的 ORM 框架,对于提高工作效率很有帮助,但由于底层原因,在程序启动时,EF 需要初始化和加载模型及其对应的数据库元数据等等,涉及到数据库…

分布式数据库垂直分片如何计算?

在复习分布式数据库这一部分时,发现垂直分片较难理解,上网上查找资料,也发现找不到,固在考试结束后将自己的理解记录下来。 垂直分片的计算总体上分为三个步骤;1、属性亲和度矩阵AA的计算;2、聚类亲和度CA矩阵的计算&a…

“了解MySQL中的enum枚举数据类型“

目录 # 开篇 1. 创建包含枚举类型的表 2. 插入枚举类型的数据 3. 查询包含枚举类型的表 4. 更新枚举类型的数据 5. 使用枚举类型的好处 注意事项 示例总结 附加 # 开篇 在数据库中,枚举(ENUM)是一种数据类型,用于存储一组…

vue3 运用高德地图 自定义弹框 为信息窗体 添加 new AMaps.value.InfoWindow 添加事件

效果图 划过散点的时候出现每个三点位置的数据提示 点击具体散点获取展示信息弹框,并为其添加点击事件 注意点: 1 即使是用的vue,也不能使用click为窗体添加点击事件,需要使用onclick, (原因&#xff1a…

Android 13 创建静态快捷方式shortcuts

参考 创建快捷方式 原生系统上&#xff0c;长按应用图标显示快捷方式&#xff0c;点击快捷方式就打开应用的某个页面。 给自己的应用也加一下。 1.清单文件添加 在应用的主页面添加如下&#xff0c;shortcuts 就是要配置的文件。 <meta-dataandroid:name"android.…

01 Swift 基础语法(变量,常量,注释,整数,浮点数,元组)

Swift 介绍 Swift 是一门用于开发 iOS、macOS、watchOS 和 tvOS 应用的新编程语言。它以安全、快速和互动的特点而著称。Swift 提供了代码预览&#xff08;playgrounds&#xff09;功能&#xff0c;使程序员可以在不编译和运行应用程序的情况下&#xff0c;实时运行 Swift 代码…

多模态-大模型:MLLM综述(适用初学)

文章目录 前言一、多模态模型基础知识二、多模态指令调优&#xff08;M-IT&#xff09;1.MLLM基础2.模态对齐3.数据获取4.模态桥接 三、多模态上下文学习&#xff08;M-ICL&#xff09;三、多模态思维链 (M-CoT)四、LLM辅助视觉推理1.训练范式2. LLM功能 五、一些思考总结 前言…

索引的分类和回表查询——Java全栈知识(29)

索引的分类和回表查询 Mysql 的索引按照类型可以分为以下几类&#xff0c;但是我们使用的 InnoDB 只支持主键索引&#xff0c;唯一索引&#xff0c;普通索引&#xff0c;并不支持全文索引。 1、聚集索引和二级索引 InnoDB 可以将索引分为两类分别是聚集索引和二级索引&…