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

雷迪斯

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

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]删除
最新教程 更多>
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 c...
    编程 发布于2025-04-03
  • Android如何向PHP服务器发送POST数据?
    Android如何向PHP服务器发送POST数据?
    在android apache httpclient(已弃用) httpclient httpclient = new defaulthttpclient(); httppost httppost = new httppost(“ http://www.yoursite.com/script.p...
    编程 发布于2025-04-03
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-04-03
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-04-03
  • 版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    版本5.6.5之前,使用current_timestamp与时间戳列的current_timestamp与时间戳列有什么限制?
    在时间戳列上使用current_timestamp或MySQL版本中的current_timestamp或在5.6.5 此限制源于遗留实现的关注,这些限制需要对当前的_timestamp功能进行特定的实现。 创建表`foo`( `Productid` int(10)unsigned not n...
    编程 发布于2025-04-03
  • Java是否允许多种返回类型:仔细研究通用方法?
    Java是否允许多种返回类型:仔细研究通用方法?
    在Java中的多个返回类型:一种误解类型:在Java编程中揭示,在Java编程中,Peculiar方法签名可能会出现,可能会出现,使开发人员陷入困境,使开发人员陷入困境。 getResult(string s); ,其中foo是自定义类。该方法声明似乎拥有两种返回类型:列表和E。但这确实是如此吗...
    编程 发布于2025-04-03
  • 如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    如何将PANDAS DataFrame列转换为DateTime格式并按日期过滤?
    将pandas dataframe列转换为dateTime格式示例:使用column(mycol)包含以下格式的以下dataframe,以自定义格式:})指定的格式参数匹配给定的字符串格式。转换后,MyCol列现在将包含DateTime对象。 date date filtering > = p...
    编程 发布于2025-04-03
  • 如何使用Depimal.parse()中的指数表示法中的数字?
    如何使用Depimal.parse()中的指数表示法中的数字?
    在尝试使用Decimal.parse(“ 1.2345e-02”中的指数符号表示法表示的字符串时,您可能会遇到错误。这是因为默认解析方法无法识别指数符号。 成功解析这样的字符串,您需要明确指定它代表浮点数。您可以使用numbersTyles.Float样式进行此操作,如下所示:[&& && && ...
    编程 发布于2025-04-03
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-04-03
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-04-03
  • 如何在JavaScript对象中动态设置键?
    如何在JavaScript对象中动态设置键?
    在尝试为JavaScript对象创建动态键时,如何使用此Syntax jsObj['key' i] = 'example' 1;不工作。正确的方法采用方括号: jsobj ['key''i] ='example'1; 在JavaScript中,数组是一...
    编程 发布于2025-04-03
  • 在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在程序退出之前,我需要在C ++中明确删除堆的堆分配吗?
    在C中的显式删除 在C中的动态内存分配时,开发人员通常会想知道是否有必要在heap-procal extrable exit exit上进行手动调用“ delete”操作员,但开发人员通常会想知道是否需要手动调用“ delete”操作员。本文深入研究了这个主题。 在C主函数中,使用了动态分配变量(H...
    编程 发布于2025-04-03
  • 可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    可以在纯CS中将多个粘性元素彼此堆叠在一起吗?
    [2这里: https://webthemez.com/demo/sticky-multi-header-scroll/index.html </main> <section> { display:grid; grid-template-...
    编程 发布于2025-04-03
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-04-03
  • 如何正确使用与PDO参数的查询一样?
    如何正确使用与PDO参数的查询一样?
    在pdo 中使用类似QUERIES在PDO中的Queries时,您可能会遇到类似疑问中描述的问题:此查询也可能不会返回结果,即使$ var1和$ var2包含有效的搜索词。错误在于不正确包含%符号。通过将变量包含在$ params数组中的%符号中,您确保将%字符正确替换到查询中。没有此修改,PDO...
    编程 发布于2025-04-03

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

Copyright© 2022 湘ICP备2022001581号-3