Redis 初识与入门

news/2024/11/30 1:45:43/

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 的,所以我们可以考虑把数据库中的部分数据转移到缓存中去,这样用户的一部分请求会直接到缓存这里而不用经过数据库。


http://www.ppmy.cn/news/1107401.html

相关文章

docker安装xxl-job连接数据库时显示无法连接问题

背景: 在项目中需要定时任务调度,需要在docker容器中安装xxl-job 遇到的问题 部署成功后,可以访问xxl-job登录界面,点登录没反应,但过一段时间就弹出数据库拒绝连接,说MyBatis连接用户失败 原因&#xf…

udev自动创建设备节点的机制

流程框图如下 自动创建 1 内核检测到设备插入后,会发送一个uevent事件到内核中,并提供有关硬件设备的信息。 2 udevd守护程序收到uevent事件后,创建一个设备类,(向上提交目录信息),会在内核中…

「提效脚本 redis」 使用Lua批量删除key

在redis里面可以使用keys aa* 进行匹配所有的key,却没办法直接删除所有匹配的key。 所以可以使用lua脚本进行增强。 以删除 suggest* 开头的key为例。 eval "local keys redis.call(keys, suggest*) for _, key in ipairs(keys) do redis.call(del, key) …

台式电脑组装爬坑之路

台式电脑十大部件 CPU 主板 内存 硬盘 机箱 电源 显卡 CPU散热器 显示器 鼠标 键盘 基本知识

Java 基本类型和包装类

Java 是基于对象的,所以我们都需要以对象的想法来进行思维。 但 Java 又提供了 8 个基本类型,这 8 个基本类型基本上都和数字有关,是直接可以使用的类型。 基本类型大小包装器类型boolean/Booleanchar16bitCharacterbyte8bitByteshort16bitS…

计算机组成原理--数据表示

目录 1、机器数及特点 1.1 机器内的数据表示 1.1.1.原码 1.1.2. 反码 1.1.3. 补码 1.2 常见机器数的特点 2、定点数与浮点数据表示 2.1 定点数据表示 2.2 浮点数据表示 2.3 补充:小数的二进制表示 3、数据校验的基本原理 3.1 必要性: 3.2 基…

远程双屏电脑的时候有的窗口默认打开在第二块屏幕上,导致无法看到和操作【伸手党福利】

解决方法: 点击看不到的窗口,使之处于激活状态 win 左箭头 或者 win右箭头 Alt空格 按M 按 左箭头 或者 右箭头 就能看到窗口移出来了。

VPN都容易受到泄露流量的TunnelCrack攻击

导读研究人员近日发现,影响市面上大多数VPN产品的几个漏洞可以被攻击者用来读取用户流量、窃取用户信息,甚至攻击用户设备。 我们实施的攻击从计算上来说开销并不大,这意味着任何拥有适当网络访问权限的人都可以执行攻击,而且攻击…