”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 雷迪斯

雷迪斯

发布于2024-11-06
浏览:580

Redis

Redis 是一个 NOSQL 数据库,数据以键值对的形式存储。
Redis 将数据存储在主内存上,这意味着它速度快,但易失性,不像 PostgreSQL 等数据库系统将数据存储在磁盘上。

概述

在具有服务器和数据库的应用程序中,访问数据库上的信息会导致延迟。

像redis这样的Key-Value数据库通常保存在这些数据库前面,访问操作需要2步:

  1. 如果信息在缓存中,缓存命中,应用程序从redis中检索信息并发送给客户端
  2. 如果没有,缓存未命中,应用程序从数据库中获取信息,将其发送到客户端并将其存储在缓存中。

通过这两个步骤,并且考虑到主内存的延迟低于磁盘,我们可以说 Redis 可用于存储和访问频繁的、最近的数据和昂贵的操作,从而使应用程序速度提高 10 到 50 倍。

因此,事实是,如果您要构建一个未来可扩展的应用程序,Redis(或类似于 Redis 的数据库)是必不可少的。


问题

  1. Redis 开源吗?:是的,Redis 是开源的,具有特殊类型的许可证,但也有其他替代方案,例如 Snapchat 的 KeyDB 和 Memcached 都是开源的。 KeyDB 是 Redis 的一个分支,但目前只能在 Linux 上运行。

  2. Redis支持Windows吗?:不,Redis不支持Windows,但是你可以安装WSL/Ubuntu并使用
    安装redis

sudo apt install redis
  1. 我正在使用 WSL,为什么 redis 服务器无法在我的系统上运行:在 WSL 上运行时,您可以使用以下命令运行 redis-server
redis-server --port 6000

其中 6000 是您要运行它的本地服务器上的端口。 (即 127.0.0.1:6000)。

大多数问题是由于 redis-server 使用的默认端口已被使用

  1. Redis有客户端库吗?:确实有。您可以在 Redis 网站上找到它们,也可以自己构建一个。

安装Redis

在Linux上,安装redis就像

sudo apt install redis
Mac 上的


brew install redis

运行Redis

您需要 上有 2 个终端实例

在第一个运行您的服务器的服务器上

redis-server -port 

然后在第二个上运行您的客户端

redis-cli

构建Web应用程序时,不需要运行客户端但需要运行服务器

Redis 概念

redis中有3个你应该了解的主要概念或4

  1. 键值对
  2. 列表
  3. 哈希值

所有其他数据结构主要是第一个的高级实现

通过列表,我的意思是数组而不是链表,这就是redis的称呼。


键值对

键值对是大多数编程语言中常见的数据结构。

  1. 在Python中称为字典或简称dict

  2. 在Javascript中称为Maps

  3. 在 C# 中称为 Dictionaries

Redis中键值对的操作主要有6种

运营 说明 示例 进一步说明
创建键值对 设置姓名约翰 设置键映射到值
得到 获取键的值 获取名称 这将返回约翰
删除 删除键值对 删除名称 这将从数据库中删除键值对名称
存在 检查redis数据库中是否存在某个key 存在名称 返回 1 或 0 对应 True 或 False
冲洗厅 清除整个缓存 冲洗厅 或多或少类似于 postgres 中的 DROP TABLE
按键 * 返回数据库中的所有键 按键 *

还有基于时间的操作。在基于时间的操作中,密钥仅在缓存中保存一段设定的时间,时间到期后,缓存会删除该密钥。

有 2 个主要的基于时间的操作

运营 说明 示例 进一步说明
到期 定义键后使其过期 使姓名 10 过期 10秒后删除键值名称。该键必须在调用 EXPIRE 之前使用 SET 定义。常见的替代方案是;
SETEX 定义后使键过期 SETEX 年龄 30 15 将键年龄设置为值30,并在15秒后删除键值对
TTL 生存时间 TTL年龄 返回删除年龄键之前剩余的时间

博客已经太长了,我会讨论listssetshashmaps以及关于redis可能的面试问题 在另一个博客中。

如果您有任何疑问,请在下面评论,我会尽力回答⭐。快乐编码

版本声明 本文转载于:https://dev.to/ezekiel_77/redis-3njh?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    为什么使用固定定位时,为什么具有100%网格板柱的网格超越身体?
    网格超过身体,用100%grid-template-columns 为什么在grid-template-colms中具有100%的显示器,当位置设置为设置的位置时,grid-template-colly修复了?问题: 考虑以下CSS和html: class =“ snippet-code”> g...
    编程 发布于2025-05-11
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期扩展,超过了视口的高度,阻止用户访问页面页脚。$("#map").css({ marginT...
    编程 发布于2025-05-11
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-05-11
  • 使用jQuery如何有效修改":after"伪元素的CSS属性?
    使用jQuery如何有效修改":after"伪元素的CSS属性?
    在jquery中了解伪元素的限制:访问“ selector 尝试修改“:”选择器的CSS属性时,您可能会遇到困难。 This is because pseudo-elements are not part of the DOM (Document Object Model) and are th...
    编程 发布于2025-05-11
  • 如何使用替换指令在GO MOD中解析模块路径差异?
    如何使用替换指令在GO MOD中解析模块路径差异?
    在使用GO MOD时,在GO MOD 中克服模块路径差异时,可能会遇到冲突,其中3个Party Package将另一个PAXPANCE带有导入式套件之间的另一个软件包,并在导入式套件之间导入另一个软件包。如回声消息所证明的那样: go.etcd.io/bbolt [&&&&&&&&&&&&&&&&...
    编程 发布于2025-05-11
  • 将图片浮动到底部右侧并环绕文字的技巧
    将图片浮动到底部右侧并环绕文字的技巧
    在Web设计中围绕在Web设计中,有时可以将图像浮动到页面右下角,从而使文本围绕它缠绕。这可以在有效地展示图像的同时创建一个吸引人的视觉效果。 css位置在右下角,使用css float and clear properties: img { 浮点:对; ...
    编程 发布于2025-05-11
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-05-11
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-05-11
  • 在Java中如何为PNG文件添加坐标轴和标签?
    在Java中如何为PNG文件添加坐标轴和标签?
    如何用java 在现有png映像中添加轴和标签的axes和labels如何注释png文件可能具有挑战性。与其尝试可能导致错误和不一致的修改,不如建议在图表创建过程中集成注释。使用JFReechArt import java.awt.color; 导入java.awt.eventqueue; 导入...
    编程 发布于2025-05-11
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-05-11
  • 如何从2D数组中提取元素?使用另一数组的索引
    如何从2D数组中提取元素?使用另一数组的索引
    Using NumPy Array as Indices for the 2nd Dimension of Another ArrayTo extract specific elements from a 2D array based on indices provided by a second ...
    编程 发布于2025-05-11
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-05-11
  • Java开发者如何保护数据库凭证免受反编译?
    Java开发者如何保护数据库凭证免受反编译?
    在java 在单独的配置文件保护数据库凭证的最有效方法中存储凭据是将它们存储在单独的配置文件中。该文件可以在运行时加载,从而使登录数据从编译的二进制文件中远离。使用prevereness class import java.util.prefs.preferences; 公共类示例{ 首选项...
    编程 发布于2025-05-11
  • input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It?

output: 解决“Warning: mysqli_query() 参数应为 mysqli 而非 resource”错误的解析与修复方法
    input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It? output: 解决“Warning: mysqli_query() 参数应为 mysqli 而非 resource”错误的解析与修复方法
    mysqli_query()期望参数1是mysqli,resource给定的,尝试使用mysql Query进行执行MySQLI_QUERY_QUERY formation,be be yessqli:sqli:sqli:sqli:sqli:sqli:sqli: mysqli,给定的资源“可能发...
    编程 发布于2025-05-11
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-05-11

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3