Redis基础和高级使用

文章目录

    • Redis概述
      • Redis简介
      • Redis特点
      • Redis适合于做
      • Redis不适合于做
      • Redis安装
    • Redis命令
      • Redis命令
      • Redis的键
    • Redis数据类型
      • Redis支持的数据类型
      • 字符串及相关命令
      • 字符串应用场景:
      • 列表及相关命令
      • 列表应用场景:
      • 集合及相关命令
      • 集合应用场景:
      • 有序集合及相关命令
      • 有序集合应用场景:
      • 哈希及相关命令
      • 哈希应用场景:
    • Redis事务
      • 传统事务与Redis事务区别
      • 事务阶段
      • Redis事务相关命令
      • Redis事务错误:
    • Redis持久化
      • RDB
      • AOF
      • Redis持久化配置(redis.*.conf文件):
    • Redis架构模式
      • 单机版
      • 主从复制
      • 哨兵
      • 集群
    • Java使用Redis
    • 缓存
      • 缓存雪崩
      • 缓存击穿:
      • 缓存穿透:

Redis概述

Redis简介

  • Redis(REmote DIctionary Server)是一个开源(BSD许可)的,内存中的数据结构存储系统。
  • Redis是一个灵活的高性能key-value数据结构存储,可以用来作为数据库、缓存和消息队列。
  • 目前Redis是互联网技术中使用最为广泛的中间件之一。
  • Redis使用C语言开发。
  • https://redis.com.cn/

Redis特点

  • 高性能:数据集存储在内存中,每秒写(SET)11 万次,读(GET)8.1 万次。
  • 可持久化。
  • 支持多种数据结构。比如:字符串、散列、集合等等。
  • 原子操作。处理不同数据类型的 Redis 操作是原子操作。

Redis适合于做

  • 缓存、Session共享。
  • 排行榜。利用SortedSet可以很轻松实现。
  • 计算器/限速器。比如统计用户点赞数、用户访问数等;比如抢购时,防止用户疯狂点击带来的压力。
  • 好友关系。利用集合的并集、交集、差集等命令即可实现。
  • 简单消息队列。

Redis不适合于做

  • 数据量太大时的业务。
  • 数据访问频率非常低的业务。

Redis安装

  • Windows安装:
    官方不推荐windows安装,微软团队维护了开源的windows版本,地址:https://github.com/MicrosoftArchive/redis/releases。
  • Linux安装:
    目前最新版本为6,地址:https://redis.com.cn/download.html。

Redis命令

Redis命令

  • dis针对键和不同数据类型的值提供了很多命令来进行操作。
  • Redis命令手册,地址:https://redis.com.cn/commands.html。

Redis的键

  • Redis key是二进制安全的,这意味着可以使用任意的二进制序列作为key。
  • 关于key的规则:
    • Key不要过长,否则存储和查找key,代价都很大。
    • Key不要太短,否则键意义不够明确。
    • 建议使用冒号、破折号连接单词。如user:1000:followers
    • key最大允许的长度是512MB。
      在这里插入图片描述
      在这里插入图片描述

Redis数据类型

Redis支持的数据类型

  • 字符串(string)。
  • 哈希(hash)。
  • 列表(list)。
  • 集合(set)。
  • 有序集合(sorted set)。
  • 位图(Bitmaps)、基数统计(HyperLogLogs)、地理空间(Geographic)等等。

字符串及相关命令

  • 字符串(string)是Redis中最基本、最简单的数据类型,最大存储512MB。
  • 字符串有3种编码格式:int、embstr、raw。除int外均采用SDS(Simple Dynamic String)结构进行存储。
    • int用于保存整数。
    • embstr保存长度小于等于39的字符串(redis3、4版本)。
    • raw保存长度大于39的字符串。
      在这里插入图片描述
      在这里插入图片描述

字符串应用场景:

  • 缓存。
  • 计数器(播放量、点赞量)。
  • 统计(出勤统计)。
  • 布隆过滤器。

列表及相关命令

  • 列表(list)是按插入顺序排序的字符串列表。可以在列表的头部(左边)或尾部(右边)添加元素。他可以包含231-1个元素。
  • Redis 3.2版之后,列表采用的quicklist结构,它代替了之前版本的ziplist和linkedlist。
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

列表应用场景:

  • 消息队列。
  • 排行榜。
  • 朋友圈点赞列表、评论列表等。

集合及相关命令

  • 集合(set)是string类型的无序集合。集合成员是唯一的。他可以包含231-1个元素。
  • 集合类型内部编码有2种:
    • intset(整数集合),当集合中元素都是整数且个数小于set-maxintset-entries配置(默认512个)时使用。
    • hashtable(哈希表)。
      • Ht[1]是为了扩容。
      • 扩展:ht[1]的大小为第一个大于等于ht[0].used*2。
      • 收缩:ht[1]的大小为第一个大于等于ht[0].used/2 。
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述

集合应用场景:

  • 好友、关注、粉丝。
  • 随机展示产品。
  • 抽奖等等。

有序集合及相关命令

  • 有序集合(sorted set或zset)相比于集合类型,多了一个排序属性score(分值)。
  • 有序集合由以下2种结构组成:
    • ziplist(压缩表),当集合中元素个数小于128个;所集合中所有元素成员的长度必须小于64字节。
    • skiplist(跳跃表)。
  • Redis的跳跃表由skiplist和zskiplistNode结构定义。
    • skiplist包含以下属性:
      • header:指向跳跃表头结点。
      • tail:指向跳跃表尾结点。
      • level:记录跳跃表内的最高层数(不包括头结点)。
      • length:记录跳跃表的长度,节点数量(不包括头节点)。
    • zskiplistNode包含以下属性:
      • level:L1、L2等标记各个层,每个层有前进指针和跨度2个属性。
      • backward(后退指针):指向当前结点的前一个节点。
      • score:分值,跳跃表中节点按分值由小到大排列。
      • object:成员对象,有序集合中保存的数据,唯一。在这里插入图片描述在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述

在这里插入图片描述

有序集合应用场景:

  • 排行榜系统,比如某视频系统的播放量排名、电商系统中商品销量的排名等等。

哈希及相关命令

  • 哈希(hash)是一个string类型的field和value的映射表,hash特别适合用于存储对象。
  • 哈希内部编码有2种:
    • ziplist(压缩表),当哈希元素个数小于512个;所有值都小于64字节。
    • hashtable(哈希表)。
      在这里插入图片描述
      在这里插入图片描述

哈希应用场景:

  • 存储对象,如用户信息、商品信息等。
  • 购物车,如:HSET uid:1 pid:1 1。
  • 计数器,如商品的好评数量,某网页的访问次数等。

Redis事务

传统事务与Redis事务区别

  • 传统事务:
    • 事务的四个特性:ACID。
    • 原子性(Atomicity),原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。数据库中:如果事务中一个sql语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态(Ps:上面只是举个例子,要注意的是MySQL的事务并不支持原子性,在MySQL中,如果事务中的一条sql无法执行,它会将这一条sql报错,并继续执行接下来的sql,且已执行的sql也不回滚,除非我们主动使用逻辑判断要求报错时执行回滚,否则MySQL的事务本身是不会回滚的)
    • 持久性(Durability),持久性是指事务一旦提交,它对数据库的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。简单理解:就是数据的持久化
    • 隔离性(Isolation)与原子性、持久性侧重于研究事务本身不同,隔离性研究的是不同事务之间的相互影响。隔离性是指,事务内部的操作与其他事务是隔离的,并发执行的各个事务之间不能互相干扰。通常使用锁机制来保证事务的隔离性
  • Redis事务:
    • Redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。
    • Redis 的事务是非原子性的。

事务阶段

  • 开始事务
  • 命令入队
  • 执行事务

Redis事务相关命令

  • MULTI:组装事务,将指令放入队列。
  • EXEC:执行事务,执行队列中的指令。
  • DISCARD:取消事务,放弃执行执行块中的指令。
  • WATCH:用来监视一些 key,一旦这些 key 在事务执行之前被改变,则取消事务的执行。
  • UNWATCH:取消WATCH对所有key的监视。

Redis事务错误:

  • 调用EXEC之前的错误,在客户端调用EXEC时,Redis会拒绝执行这一事务。
  • 调用EXEC之后的错误,Redis继续向下执行事务中的其他命令。

Redis持久化

  • Redis提供了2种持久化方式:
    • RDB(Redis DataBase)。
    • AOF(Append Only File)。
    • 如果没有持久化需求,也可以关闭,这样Redis就成为了纯内存数据库。

RDB

  • RDB持久化方式是在不同的时间点,将Redis存储的数据生成快照并存储到磁盘等介质上。
    • Redis会将数据写入临时文件,待持久化结束才替换上次持久化的文件,确保快照文件完整。
    • Redis会单独创建子进程来持久化,确保Redis高性能。
  • 如果进行大规模数据恢复,且对数据完整性不敏感,那么RDB方式更高效。
    在这里插入图片描述

AOF

  • AOF持久化方式是将执行过的写指令记录下来,在数据恢复时按照从前到后的顺序再将指令都执行一遍。
  • AOF文件重写机制:当文件太大时将重写AOF文件,重写后的AOF文件中是恢复全部数据的最小命令合集(比如一个key修改俩次的命令,只保留最后一次的修改命令)。
  • 在这里插入图片描述

Redis持久化配置(redis.*.conf文件):

  • RDB(Redis DataBase)
    在这里插入图片描述
  • AOF (Append Only File)
    在这里插入图片描述

Redis架构模式

单机版

简单;但是内存有限,处理能力有限,无法高可用。
在这里插入图片描述

主从复制

maste同步数据到slave,读写分离;但是没有解决maste的写的压力,也无法高可用。
在这里插入图片描述

哨兵

Redis Sentinel会监控Redis主从服务器。他有三个特性:

  • 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification):当被监控的Redis服务器出现问题时,Sentinel可以通过API向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时,Sentinel会开始一次自动故障迁移操作。

保证高可用,自动故障迁移,监控;但切换要时间,可能丢数据,没解决master写压力。
在这里插入图片描述

集群

  • 集群(Redis Cluster)采用无中心结构,每个节点保存数据、集群状态,并和其它所有节点连接。
  • 动态扩展性。
  • 高可用性。
  • 自动故障迁移(Automatic failover)。
  • 在这里插入图片描述

Java使用Redis

  • Java使用Redis的方案有很多,例如:Jedis、Lettuce、Redisson等等。
  • 而SpringBoot默认集成Redis就是Spring Data Redis,底层使用的则Lettuce。
  • SpringBoot集成Redis步骤:
    • 添加Maven依赖。
    • 进行Redis配置。
    • 编写Redis配置类。
    • 借助RedisTemplate或StringRedisTemplate完成操作。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

缓存

缓存雪崩

- 他指缓存中大量热点数据过期后系统涌入大量查询请求,这些请求可能直接作用于数据库,造成查询堵塞甚至宕机。
- 解决办法:
	- 将缓存失效时间分散开,比如每个key的过期时间是随机。
	- 让Redis数据永不过期(在业务允许的情况下,比如一些不常改变的数据)。

缓存击穿:

  • 他类似于缓存雪崩,但他是针对一个Key,当该值失效时,持续的大并发的请求就穿过缓存,直接作用于数据库。

缓存穿透:

  • 他是指缓存和数据库中都没有的数据,而用户不断发起请求访问。
  • 解决办法:
    • 将对应Key的值设置为null,再设置一个较短的有效时间。
    • 布隆过滤器。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

环信IM Android端实现华为推送详细步骤

首先我们要参照华为的官网去完成 ,以下两个配置都是华为文档为我们提供的 1.https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/android-config-agc-0000001050170137#section19884105518498 2.https://developer.huawei.com/consumer/cn/doc/HMSCore…

[OpenAI]继ChatGPT后发布的Sora模型解析与体验通道

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

HTTPS(超文本传输安全协议)被恶意请求该如何处理。

HTTPS(超文本传输安全协议)端口攻击通常是指SSL握手中的一些攻击方式,比如SSL握手协商过程中的暴力破解、中间人攻击和SSL剥离攻击等。 攻击原理 攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息&#xf…

【压缩感知基础】Nyquist采样定理

Nyquist定理,也被称作Nyquist采样定理,是由哈里奈奎斯特在1928年提出的,它是信号处理领域的一个重要基础定理。它描述了连续信号被离散化为数字信号时,采样的要求以避免失真。 数学表示 Nyquist定理的核心内容可以描述如下&…

java+vue_springboot企业设备安全信息系统14jbc

企业防爆安全信息系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了vue框架。该系统从三个对象:由管理员、人员和企业来对系统进行设计构建。主要功能包括:个人信息修改,对人员管理&am…

目录IO 2月19日学习笔记

1. lseek off_t lseek(int fd, off_t offset, int whence); 功能: 重新设定文件描述符的偏移量 参数: fd:文件描述符 offset:偏移量 whence: SEEK_SET 文件开头 SEE…

Expected class selector “.menuChildMall“ to be kebab-case报错原因

![在这里插入图片描述](https://img-blog.csdnimg.cn/dire ct/6b72bda760a2497a90558d48bd0a4de3.png) 使用stylelint格式化css文件时候报上述错误: 原因: css类名未使用-分隔符 将类名修改为: .menu-child-mall形式即可

C++11---(2)

目录 一、新增容器 1.1、array 1.2、forward_list 1.3、unordered系列 二、右值引用和移动语义 2.1、什么是左值,什么是左值引用 2.2、什么是右值,什么是右值引用 2.3、左值引用和右值引用比较 2.4、右值引用使用场景和意义 2.5、右值引用引用…

【教程】详解相机模型与坐标转换

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 由于复制过来,如果有格式问题,推荐大家直接去我原网站上查看: 相机模型与坐标转换 - 生活大爆炸 目录 经纬度坐标系 转 地球直角坐标系大地直角坐标系 转 经纬度坐标系地理坐标…

MLP-Mixer: AN all MLP Architecture for Vision

发表于NeurIPS 2021, 由Google Research, Brain Team发表。 Mixer Architecture Introduction 当前的深度视觉结构包含融合特征(mix features)的层:(i)在一个给定的空间位置融合。(ii)在不同的空间位置,或者一次融合所有。在CNN中,(ii) 是由N x N(N &g…

服务端实时推送技术之SSE(Server-Send Events)

文章目录 前言一、解决方案:1、传统实时处理方案:2、HTML5 标准引入的实时处理方案:3、第三方推送: 二、SSE1.引入库1、客户端: 2.服务端:三、业务实践:能否做到精准投递? 总结 前言…

解决Ubuntu中vscode右键没有create catkin package

右键发现没有这个create catkin package 解决方案: 查了一会发现安装个拓展就可以了 效果:

vue页面基本增删改查

练手项目vue页面 新手前端轻喷: 效果如下 1、2两个部分组成: 对应代码中 element-ui中的 el-form 和 el-table 照着抄呗,硬着头皮来! 建议:认真读一遍你用的组件 这篇文章烂尾了,对不起大家

element-plus日期选择器2次封装

预期效果 官网默认样式&#xff1a; 修改后的样式&#xff1a; 代码实现 DatePicker.vue <template><div class"date-picker-container"><el-date-picker v-model"date" change"handleChange" type"date" value-for…

抓住母亲节销售机会:Shopee 平台选品策略大揭秘

母亲节&#xff0c;作为一个重要的购物节日&#xff0c;为卖家带来了巨大的销售机会。在Shopee这样的电商平台上&#xff0c;如何通过有效的选品策略吸引消费者、提高销量呢&#xff1f;下面将介绍一些关键策略&#xff0c;帮助卖家在母亲节期间实现销售突破。 先给大家推荐一…

植隆业务中台和金蝶云星空单据接口对接

植隆业务中台和金蝶云星空单据接口对接 源系统:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用框架等&#xff0c;有效支持企业的运…

Linux——信号(2)

在上一张博客我们介绍了Linux中信号的概念和信号是如何产生的&#xff0c;虽然信号 有多种产生方式&#xff0c;但是最终只能由操作系统给对应进程发送特定信号。现在 我将更加规范的介绍Linux中的信号。上一章的遗留问题 我们上一章中在观察信号的默认处理的时候发现终止信号…

新增长100人研讨会:快消零售专场探讨招商加盟数字化转型实战

2024年2月2日下午&#xff0c;一场由纷享销客与杨国福集团联合主办的招商加盟数字化转型研讨会在上海成功举办。本次研讨会汇聚了众多快消零售业界的领军人物&#xff0c;共同探讨行业未来的新增长点。 会议伊始&#xff0c;杨国福集团数字化中心负责人王林林发表了主题演讲&a…

基于Springboot+Vue的在线考试系统源码

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着现代教育和职业培…

【Vuforia+Unity】AR03-圆柱体物体识别

1.创建数据库模型 这个是让我们把生活中类似圆柱体和圆锥体的物体进行AR识别所选择的模型 Bottom Diameter:底部直径 Top Diameter:顶部直径 Side Length:圆柱侧面长度 请注意&#xff0c;您不必上传所有三个部分的图片&#xff0c;但您需要先为侧面曲面关联一个图像&#…