redis 初识与入门

2023-09-12 23:00:05

1. 什么是Redis

Redis 是一种基于内存的数据库,对数据的读写操作都是在内存中完成,因此读写速度非常快,常用于缓存消息队列分布式锁等场景。

Redis 提供了多种数据类型来支持不同的业务场景,比如 String(字符串)、Hash(哈希)、 List (列表)、Set(集合)、Zset(有序集合)、Bitmaps(位图)、HyperLogLog(基数统计)、GEO(地理信息)、Stream(流),并且对数据类型的操作都是原子性的,因为执行命令由单线程负责的,不存在并发竞争的问题。

除此之外,Redis 还支持事务持久化Lua 脚本、多种集群方案(主从复制模式、哨兵模式、切片集群模式)、发布/订阅模式,内存淘汰机制、过期删除机制等等。

2. Redis缓存与本地缓存的区别

缓存分为本地缓存分布式缓存。以 Java 为例:

1)使用自带的 map/guava 实现的是本地缓存,最主要的特点是轻量以及快速,生命周期随着 jvm 的销毁而结束,并且在多实例的情况下,每个实例都需要各自保存一份缓存,缓存不具有一致性。

2)使用 redis 或 memcached 之类的称为分布式缓存,在多实例的情况下,各实例共用一份缓存数据,缓存具有一致性。缺点是需要保持 redis 或 memcached服务的高可用,整个程序架构上较为复杂。

3. Redis 和 Memcached 有什么区别

很多人都说用 Redis 作为缓存,但是 Memcached 也是基于内存的数据库,为什么不选择它作为缓存呢?要解答这个问题,我们就要弄清楚 Redis 和 Memcached 的区别。

Redis 与 Memcached 共同点

  1. 都是基于内存的数据库,一般都用来当做缓存使用。
  2. 都有过期策略。
  3. 两者的性能都非常高。

Redis 与 Memcached 区别

  1. Redis 支持的数据类型更丰富(String、Hash、List、Set、ZSet),而 Memcached 只支持最简单的 key-value 数据类型;
  2. Redis 支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用,而 Memcached 没有持久化功能,数据全部存在内存之中,Memcached 重启或者挂掉后,数据就没了;
  3. Redis 原生支持集群模式,Memcached 没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据;
  4. Redis 支持发布订阅模型、Lua 脚本、事务等功能,而 Memcached 不支持;

4. 为什么用 Redis 作为 MySQL 的缓存?

主要是因为 Redis 具备「高性能」和「高并发」两种特性。

1)Redis 具备高性能

假如用户第一次访问 MySQL 中的某些数据。这个过程会比较慢,因为是从硬盘上读取的。将该用户访问的数据缓存在 Redis 中,这样下一次再访问这些数据的时候就可以直接从缓存中获取了,操作 Redis 缓存就是直接操作内存,所以速度相当快。
在这里插入图片描述
如果 MySQL 中的对应数据改变的之后,同步改变 Redis 缓存中相应的数据即可,不过这里会有 Redis 和 MySQL 双写一致性的问题,后面我们会提到。

2)Redis 具备高并发

单台设备的 Redis 的 QPS(Query Per Second,每秒钟处理完请求的次数) 是 MySQL 的 10 倍,Redis 单机的 QPS 能轻松破 10w,而 MySQL 单机的 QPS 很难破 1w。

所以,直接访问 Redis 能够承受的请求是远远大于直接访问 MySQL 的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。

更多推荐

《人件》读书笔记

作者与书籍简介:《人件》1987年第一次出版,这本书与《人月神话》共同被誉为软件管理图书的“双子星”。作者TomDeMarco与TimothyLister均为美国咨询师。《人件》是两位作者在越洋航班中的思想碰撞中产生的,“软件系统的主要问题不在技术,而在于社会性因素”这一想法一经产生,作者就展开了一系列的案例研究,一步

QT chart图表(温度曲线实战)

文章目录前言一、QChart介绍二、帮助文档三、QGraphicsView四、QChart的显示总结前言本篇文章开始将带大家学习QTchart图表,后面我们将完成一个小项目,动态温度曲线,并且将本项目移植到ARM开发板上使用DHT11实时检测温度湿度。一、QChart介绍QT的QChart是一个用于绘制各种类型图表的Q

备战2024秋招面试题-负载均衡常见的算法

前言:\textcolor{Green}{前言:}前言:💞快秋招了,那么这个专栏就专门来记录一下,同时呢整理一下常见面试题💞部分题目来自自己的面试题,部分题目来自网络整理给我冲学习目标:面试题:算法题:完成?学习目标:负载均衡常见的算法算法题:组合总和面试题:负载均衡常见的算法负载均衡指的是将用户请求分摊到不同的服

设计模式:迭代器模式

目录组件代码示例源码中使用优劣点总结迭代器模式(IteratorPattern)是一种行为型设计模式,它提供了一种访问聚合对象中各个元素的方法,而无需暴露聚合对象的内部表示。迭代器模式将遍历和操作聚合对象的责任分离,使得遍历算法可以独立于聚合对象变化而变化。在迭代器模式中,聚合对象包含一个迭代器接口,定义了访问和遍历元

python从入门到精通(一)

自己也有三四年的码龄了,目前,重拾起自己的博客,记录自己的学习笔记,为大家提供优质内容,也来巩固自己的学习内容。很开心也成功成为了一名研究生,张张的研究方向是图像处理和计算机视觉这一块,有这方面的小伙伴可以一起探讨学习。接下来先把python学扎实,gogogo!!!以下内容来自于黑马程序员的视频,作者只是做了一下视频

Github上1.1KFork的C++笔记

编程语言(C/C++)原文链接,如果觉得本文对你有所帮助,欢迎去原地址点个Star⭐。侵删https://github.com/linw7/Skill-Tre目录Chapter1Chapter2Chapter3Chapter4编程基础面向对象基础标准模板库编译及调试内容Chapter1:编程基础C/C++的内容又多又杂

结构型设计模式

结构型设计模式结构型设计模式主要总结了一些类或对象组合在一起的经典结构,这些经典的结构可以解决特定应用场景的问题。结构模式包括:代理模式、桥接模式、装饰器模式、适配器模式、门面模式、组合模式、亨元模式。1.代理模式实现方式:代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是为了控制访问,而非加强功能

HTML实现移动端布局与页面自适应

我们所说的布局方式,这里我们通常指的是width和height在不同页面情况下面的改变。常见页面的布局方式有静态布局(px布局,就是固定其高宽,不论页面怎样放大缩小,其占领的依旧是,使用px固定了的高宽)流式布局(LiquidLayout)主要的划分区域的尺寸使用百分数(100%)(搭配min-*、max-*属性使用)

【Intel 黑客松大赛】基于YOLO的杂草-农作物检测分类系统

目录一、赛题简介:计算机视觉挑战——检测并清除杂草二、基于YOLO的杂草-农作物检测分类2.1、YOLO简介2.2、基于YOLO的杂草-农作物检测分类解决方案三、基于YOLO的杂草-农作物检测分类系统设计3.1、基于flask框架的demo应用程序后端3.2、基于Vue框架的demo应用程序前端四、InteloneAP

认识 AIGC ,浅淡 AIGC 的那些事—— AIGC:用 AI 创造万物

文章目录🎨关于封面🔥关于活动📋前言🎯什么是AIGC?🧩AIGC:用AI创造万物🧩AIGC的意义与发展🎯AIGC的发展历程🧩人工智能生成内容的发展历程与概念🧩早期萌芽阶段(1950s-990s)🧩沉淀积累阶段(1990s-2010s)🧩快速发展阶段(1990s-2010s)🎯AIGC峰会分享🧩A

极客时间:深入浅出计算机组成原理【文章笔记 & 思考总结】

本篇博客是学习过程中的笔记、思考和总结。原文链接:https://time.geekbang.org/column/intro/100026001?tab=catalog开篇词|为什么你需要学习计算机组成原理?01|冯·诺依曼体系结构:计算机组成的金字塔计算机的基本硬件组成冯·诺依曼体系结构总结延伸推荐阅读课后思考开篇

热文推荐