学习redis根本不愁,简单明了

news2024/11/24 3:17:03

一、redis是什么?

        在认识redis之前,我们先说一下什么是NoSQL?

      1. NoSQL

                NoSQL,顾名思义就是不仅仅是SQL,泛指非关系数据库。

      2. NoSQL的四大分类 

            (1)键值(key-value)存储数据库。我们今天所学的redis就是属于这个类型。

            (2)列存储数据库

            (3)文档型数据库。MongoDB

            (4)图形数据库      

      3. redis的概念

              redis是开源的,遵循BSD,基于内存数据存储,常被作为数据库、缓存、消息中间件。

             总结:redis是一个内存型数据库。

      4. redis的特点

              reids是一个高性能的key-value内存型数据库,它支持丰富的数据类型,支持持久化,他是单线程、单进程。

二、reids的安装和设置

1.安装Redis依赖 

yum install -y gcc tcl

2. 上传安装包并解压

上传到/usr/local目录下,直接拖入即可。

解压缩:

tar -xzf redis-6.2.6.tar.gz

 进入redis目录:

cd redis-6.2.6

 运行编译命令:

make && make install

 启动:安装完成后,在任意目录输入redis-server命令即可启动Redis:

redis-server

出现上图说明启动成功。 

这种启动属于前台启动,会阻塞整个会话窗口,窗口关闭或者按下CTRL + C则Redis停止。不推荐使用。

2.指定配置启动

    1. 如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下(/usr/local/redis-6.2.6),名字叫redis.conf:

 我们先将这个配置文件备份一份,当配置文件错误时可以使用

cp redis.conf redis.conf.bak

 然后我们修改redis.conf文件中的一些配置:

通过 /对应的词,可以找到位置,进行修改

# 允许访问的地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes 
# 密码,设置后访问Redis必须输入密码
requirepass 123321

启动Redis:

# 进入redis安装目录 
cd /usr/local/bin
# 启动
./redis-server /usr/local/redis-6.2.6/redis.conf

 三、Redis的数据类型

他有五种基本数据类型和三种特殊数据类型。

我们主要学习五种基本数据类型,特殊数据类型知道即可。

redis在存储数据的时候是以键值对存在的。

key一般是String类型,不过value的类型多种多样,

1. String类型

常用于存储验证码

常用方法:

命令说明
set设置一个key/value
get根据key获得对应的value
setex设置一个key存活的有效期(秒)
decr进行数值类型的-1操作
incr进行数值类型的+1操作

2. List类型

常用于商品列表

常用方法:

命令说明
lpush将某个值加入到一个key列表头部
rpush将某个值加入到一个key列表末尾
lpop返回和移除列表左边的第一个元素
rpop返回和移除列表右边的第一个元素
lrange获取某一个下标区间内的元素,从0开始
llen获取列表元素个数
lrem删除重复元素
lindex获取某一个指定索引位置的元素

3. Set类型

常用于实现可能认识的人、共同好友

常用命令:

命令说明
sadd为集合添加元素
smembers显示集合中所有元素 无序
scard返回集合中元素的个数
srem从集合中删除一个元素
sismember判断一个集合中是否含有这个元素
sdiff求差集
sinter求交集
sunion求和集

4. ZSet类型

常用于实现排行榜

常用方法:

命令说明
zadd添加一个有序集合元素
zcard返回集合的元素个数
zrange 升序 zrevrange 降序返回一个范围内的元素
zrank返回排名
zrevrank倒序排名
zscore显示某一个元素的分数
zrem移除某一个元素
zincrby给某个特定元素加分

5. Hash类型

他是key{ key value },无序的

常用方法:

命令说明
hset设置一个key/value对
hget获得一个key对应的value
hdel删除某一个key/value对
hexists判断一个key是否存在
hkeys获得所有的key
hvals获得所有的value
hincrby为value进行加法运算
hincrbyfloat为value加入浮点值

6. 特殊数据类型

   GEO      BitMap    HyperLog

四、持久化机制

1. RDB(快照):快照生成有两种方式,

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

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

当服务器接收到关闭服务器的请求时,redis会执行一次save命令,阻塞所有客户端,不再执行客户端发送的任何命令,并且在save命令执行完毕之后关闭服务器。

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

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

日志追加频率: everysec:让redis每秒对AOF文件进行同步;这样可以保证即使系统崩溃,用户最多丢失一秒以内的数据。但这样也会有一个问题,那就是持久化文件会变得越来越大,其中也有很多重复的操作,为了减少AOF文件的体积,就有了AOF重写机制

2.1 AOF重写机制

他就是将整个内存中的数据库内容用命令的方式重写成一个新的aof文件,来替换原来的文件,之后的写命令就开始往新的aof文件中追加。

五、主从复制

为了解决数据的冗余备份,读写分离。他就是将主节点中所有数据都备份给子节点,之后主节点每执行一次写操作,然后将写的数据都发送给子节点,让子节点读取数据,以保证数据的一致性。

 六、哨兵机制

在主从模式的情况下,如果主节点发生意外宕机或者处理速率降低,哨兵节点就可以对这种情况进行监控,如果发送这种情况,他就会在从节点中推举出一个从节点去当新的主节点,而其他从节点就会成为新主节点的从节点。当旧主节点恢复时,他也会成为新主节点的从节点。

推举制度:首先是看配置的replica-priority,参数越小,优先级越高,然后选偏移量越大(同步数据越多),最后run id小的。

七、延迟双删

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

 八、redis缓存问题

1.缓存穿透

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

解决方法:

  • 当在数据库查询的结果也不存在的时候,可以返回null值给redis,并且设置TTL

  • 布隆过滤器是一种数据结构,底层是位数组,通过将集合中的元素多次hash得到的结果保存到布隆过滤器中。主要作用就是可以快速判断一个元素是否在集合里面,但是因为算法的原因,也有一定概率的错误。

2. 缓存击穿

也叫热点key问题,一个被高并发访问且业务复杂的key突然失效了,无数的请求瞬间给数据库带来的巨大冲击

解决方法:

        互斥锁 逻辑过期

3. 缓存雪崩

同一时间段内,大量的缓存key失效或者redis宕机,到时大量的请求到达数据库,带来巨大的压力。

解决方法:

  • 给key设置随机的TTL
  • 集群方案防止宕机不可用

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

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

相关文章

程序猿成长之路之数据挖掘篇——决策树分类算法(1)——信息熵和信息增益

决策树不仅在人工智能领域发挥着他的作用,而且在数据挖掘中也在分类领域中独占鳌头。了解决策树的思想是学习数据挖掘中的分类算法的关键,也是学习分类算法的基础。 什么是决策树 用术语来说,决策树(Decision Tree)是…

写代码必用字体

下载链接 字体下载链接 使用情况/截图 软件:DEV-CPP 系统:Win10专业版 自带判等、大于、小于等符号的专属字体

微信小程序开发---自定义底部tabBar

自定义tabBar注意事项: 在自定义 tabBar 模式下 ,为了保证低版本兼容以及区分哪些页面是 tab 页,app.json文件中 tabBar 的相关配置项需完整声明,但这些字段不会作用于自定义 tabBar 的渲染。所有 tabBar 的样式都由该自定义组件…

java:JWT的简单例子

【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.12.RELEASE</version> </dependency> <dependency><groupId>org.springf…

Hadoop 2.0 大家族(三)

目录 五、Hive&#xff08;一&#xff09;Hive简介&#xff08;二&#xff09;Hive入门 六、Oozie&#xff08;一&#xff09;Oozie简介&#xff08;二&#xff09;Oozie入门 五、Hive Hive是一个构建在Hadoop上的数据仓库框架&#xff0c;它起源于Facebook内部信息处理平台。H…

java基于ssm+jsp快递管理系统源码(适合新手)

在管理信息系统的生命周期中&#xff0c;仅过了需求分析、系统设计等阶段之后&#xff0c;便开始了系统实施阶段。在系统分析和设计阶段&#xff0c;系统开发工作主要是集中在逻辑、功能和技术设计上&#xff0c;系统实施阶段要继承此前面各个阶段的工作成果&#xff0c;将技术…

钡铼BL110在智慧气象站实现Modbus转MQTT无线接入主流云

随着物联网&#xff08;IoT&#xff09;技术的发展&#xff0c;各行各业都在积极探索将智能设备与云平台相结合&#xff0c;以提升系统的智能化和自动化水平。智慧气象站作为其中重要的一环&#xff0c;通过实时监测环境数据&#xff0c;为农业、交通、航空等行业提供精准的气象…

FPGA 690T 高速存储设计

高速存储设计会有各种需求的考虑&#xff0c;那么对应的方案也不完全相同&#xff0c;这篇文章出一期纯FPGA实现的高速存储方案。用纯fpga实现高速存储板卡有易国产化&#xff0c;功耗低和体积小等特点&#xff0c;缺点就是灵活性不是很强&#xff0c;实现标准ext4和nfs文件系统…

AI大模型日报#0622:Claude 3.5 Sonnet超越GPT-4o、盘古大模型跳级发布、松鼠AI多模态教育大模型

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff01;《AI大模型日报》今日要点&#xf…

不同版本的 Rocky Linux 快速更换阿里镜像源

环境&#xff1a;兼容 Rocky Linux 任意版本。 搞服务器系统从 CentOS 折腾到 Rocky Linux&#xff0c;然后又折腾到 Alma Linux&#xff1b;最近因为 RKE2 没有做 Alma Linux 的兼容性&#xff0c;又折腾到了 Rocky Linux &#xff0c;真的是一把鼻涕一把泪呀。但是实在是不理…

关于jupyter notebook的使用经验

jupyter notebook 第一点&#xff0c;调整每次打开jupyter notebook的时候的位置第二点&#xff0c;如何设置jupyter notebook可以使用本地anaconda创建的虚拟环境呢&#xff1f;第三点&#xff0c;使用jupyter notebook的技巧 以下三点都是独立的&#xff0c;可以根据自己的需…

Web项目部署后浏览器刷新返回Nginx的404错误对应解决方案

data: 2024/6/22 16:05:34 周六 limou3434 叠甲&#xff1a;以下文章主要是依靠我的实际编码学习中总结出来的经验之谈&#xff0c;求逻辑自洽&#xff0c;不能百分百保证正确&#xff0c;有错误、未定义、不合适的内容请尽情指出&#xff01; 文章目录 1.源头2.排错3.原因4.解…

政务大厅引导系统:AR、VR技术革新引领政务服务体验升级

一、传统政务大厅面临的普遍痛点 随着城市的发展和政务服务需求的增长&#xff0c;传统的政务大厅面临着诸多挑战和痛点&#xff1a; 信息不对称&#xff1a;政务大厅内各部门信息分散&#xff0c;群众难以快速获取全面准确的服务信息&#xff0c;导致办事效率低下。 办事流…

如何恢复电脑硬盘删除数据?提供一套实用恢复方案

在数字化时代&#xff0c;电脑硬盘中存储的数据对于个人和企业来说都至关重要。然而&#xff0c;有时我们可能会不小心删除了一些重要文件&#xff0c;或者因为某种原因导致数据丢失。这时候&#xff0c;恢复硬盘上被删除的数据就显得尤为重要。本文将为您提供一套实用的电脑硬…

JAVA大型医院绩效考核系统源码:​医院绩效考核实施的难点痛点

JAVA大型医院绩效考核系统源码&#xff1a;​医院绩效考核实施的难点痛点 绩效考核数字化综合管理系统是一个基于数字化技术的管理平台&#xff0c;用于帮助企业、机构等组织进行绩效考评的各个环节的管理和处理。它将绩效考评的各个环节集成到一个系统中&#xff0c;包括目标…

Vue79-路由组件独有的2个新的生命周期钩子

一、需求 news.vue路由组件被缓存了&#xff08;因为想要保留里面的输入框的数据&#xff01;&#xff09;&#xff0c;导致&#xff0c;路由页面切走&#xff0c;组件也不会被销毁&#xff0c;所以&#xff0c;beforeDestroy()函数就不会被执行&#xff0c;所以&#xff0c;定…

java—Mybatis缓存

缓存的作用 缓存(cache&#xff09;的作用是为了减轻数据库的压力&#xff0c;提高查询性能。 为什么使用缓存 mysql数据库保存的数据均在硬盘中&#xff0c;CPU是不会直接和硬盘进行交互的&#xff0c;因为硬盘的数据传输率很低&#xff0c;而CPU的数据传输率很高, CPU和内存直…

Android获取控件宽高的几种方式

第一种方式&#xff1a;在需要时获取&#xff0c;如控件点击时再获取 button.setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { getTextWidthAndHeight(); } }); 第二种方式&#xff1a;重写onWindowFocusChanged()方法 Overr…

创建npm私包

参考文章&#xff1a; 使用双重身份验证访问 npm | npm 中文网 私有npm包的实例详解-js教程-PHP中文网 1.注册npm账号 npm官网&#xff1a; npm | Home 2.安装node 百度挺多的&#xff0c;安装完后&#xff0c;检查是否安装成功就行 3.写一个简单的模块 创建个文件夹&am…

51学习记录(一)——51介绍及震动感应灯

文章目录 前言一、STC89C522.内部结构及引脚 二、继电器原理及震动传感器原理三、项目搭建及实现 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、STC89C52 1.简介 所属系列&#xff1a;51单…