Redis介绍

2023-10-26

一、简介

Redis是互联网技术领域使用最为广泛的存储中间件,它是“Remote Dictionary Service”(远程字典服务)的首字母缩写

由意大利人Salvatore Sanfilippo(网名:Antirez)开发。

默认端口:6379

二、Redis能做什么

1.缓存

2.分布式锁

三、安装

体验Redis需要使用Linux或者Mac环境,如果使用Windows操作环境,可以考虑使用虚拟机

Redis有三种安装方式

1.使用Docker

2.通过Github

3.直接安装apt-get install(Ubuntu)、yum insall(RedHat)或者brew install(Mac).

还可以通过网页版的Web Redis直接体验

四、五种数据类型

Redis所有的数据结构都是以唯一的key字符串作为名称,然后通过这个唯一的key值来获取相应的value数据。不同的数据类型差异就在于value的结构不一样。

1.字符串(string)

string是Redis最简单的数据结构,它的内部表示就是一个字符数组。

字符串结构使用非常广泛一个常见的用途就是缓存用户信息,我们将用户信息使用JSON序列化成字符串,然后将字符串塞进Redis来缓存。

Redis的字符串是动态字符串,是可以修改的字符串,内部结构的实现类似于C#中的ArrayList,内部为当前字符串分配的实际空间一般高于实际字符串的长度。当字符串长度小于1MB时,扩容都是加倍现有的空间。如果字符串长度超过1MB,扩容时一次只会多扩1MB空间。需要注意的是字符串最大长度为512MB

2.列表(list)

Redis的列表相当于C#语言里的LinkedList,注意它是链表不是数组。这意味这list的插入和删除操作非常快,但是索引定位很慢。列表中的每个元素都是使用双向指针顺序,串起来可以同时支持前向后向遍历。

当列表弹出最后一个元素之后,该数据结构被自动删除,内存被回收。

Redis的列表结构常用来做异步队列使用。将需要延后处理的任务结构体系列化成字符串,塞进Redis的列表,另一个线程从这个列表中轮询数据进行处理。

Redis底层存储的不是一个简单的linkedlist,而是称之为“快速链表”(quicklist)的一个结构。首先在列表元素较少的情‘况下,会使用一块连续的内存存储,这个结构是ziplist,即压缩列表。它将所有的元素彼此紧挨着一起存储,分配的是一块连续的内存。当数据量比较多时才会改成quicklist。

3.字典(hash)

Redis的字典相当于C#中的HashMap,它是无序字典,内部存储了很多键值对。是数组+链表的二维结构。

字典的值只能是字符串。Redis为了追求性能,不能堵塞服务,所以采用了渐进式rehash策略。

渐进式rehash会在rehash的同时,保留新旧两个hash结构,查询时会同时查询两个hash结构,然后再后续的定时任务以及hash操作指令中,循序渐进地将旧hash的内容一点点地迁移到新的hash结构中,当搬迁完成了,就会使用新的hash结构取而代之。

hash结构的存储消耗要高于单个字符串。

4.集合(set)

Redis的集合相当于C#中的HashSet,它内部的键值对是无序的、唯一的,它内部实现相当于一个特殊的字典,字典中所有的value都是一个值NULL。

当集合中最后一个元素被移除后,数据结构被自动删除,内存被回收

set结构可以用来存储再某活动中中奖的用户ID,因为有去重功能,可以保证同一个用户不会中将两次。

5.有序集合(zset)

zset可能是Redis提供的最有特色的数据结构,它也是在面试中面试官最爱问的数据结构。一方面它是一个set,保证了内部value的唯一性,另一方面它可以给每一个value赋予一个score,代表这个value的排序权重。它的内部实现用的是一种叫做“跳跃列表”的数据结构。

 

-----------------------未完--------------------------------

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis介绍 的相关文章

  • 将 StackExchange.Redis 客户端与 Redis 集群结合使用

    如何告诉 StackExchange Redis v1 0 481 它即将连接到 Redis 集群 v3 2 6 如果重要的话 而不仅仅是独立 复制实例 例如 当我使用 redis cli 时 我必须传递 c 标志以使其具有集群感知能力 S
  • Twisted:为什么将延迟回调传递给延迟线程会使线程突然阻塞?

    我尝试使用 txredis redis 的非阻塞扭曲 api 作为持久消息队列 但没有成功 我正在尝试使用我正在开发的 scrapy 项目进行设置 我发现虽然客户端没有阻塞 但它变得比本来应该的要慢得多 因为反应堆循环中本应是一个事件的事件
  • 如何查看我的 Redis 数据库 current_size?

    我知道 redis cli 以及 info 和 config 命令 但是 他们没有任何说明当前数据库大小的信息 我怎样才能弄清楚这一点 使用INFO命令 完整详细信息在这里 http redis io commands info http
  • Nodejs为Redis请求设置超时

    我编写了一个简单的服务 使用 redis 将数据存储在内存中或从磁盘中获取数据 然后存储在内存中 并希望为慢速请求设置超时 我希望找到一种方法发出带有超时的获取请求 以防止该请求挂起 任何帮助表示赞赏 因此 您可以在这里做一些事情 但是 首
  • scrapy-redis程序不会自动关闭

    scrapy redis框架 redis存储的xxx requests已经爬取完毕 但是程序还在运行 如何自动停止程序 而不是一直在运行 运行代码 2017 08 07 09 17 06 scrapy extensions logstats
  • 以原子方式从 Redis 数据结构中弹出多个值?

    是否有一个 Redis 数据结构 允许弹出 获取 删除 其中包含的多个元素的原子操作 有众所周知的 SPOP 或 RPOP 但它们总是返回单个值 因此 当我需要 set list 中的前 N 个值时 我需要调用该命令 N 次 这是昂贵的 假
  • 在 aws 微实例上安装 redis

    我需要在亚马逊云中安装redis 我需要它作为我的 npm 模块 kue 部署 的一部分 考虑到我对 Linux 和管理的了解并不好 任何人都可以链接我的逐步教程或解释如何做到这一点 如果您启用 Amazon Linux 上存在的 Extr
  • 为什么我不能让单个 Redis 客户端在同一连接中充当 PUB 和 Sub ?

    我的思维模型是 聊天 我订阅了某个频道 并且可以向该频道发布消息 由于 pub sub 是异步的 因此发布的消息可能随时出现 包括当您期望命令响应时 尽管 Redis 是单线程的 通常会阻止此类事情 但网络延迟可能会导致一些有趣的影响 根据
  • 带 Java 客户端的键值数据库

    我基本上想在磁盘上存储一个哈希表 以便以后可以查询它 我的程序是用Java 编写的 哈希表从字符串映射到列表 那里有很多键值存储 但经过大量研究 阅读后 尚不清楚哪一个最适合我的目的 以下是一些对我来说很重要的事情 简单的键值存储 允许您使
  • 在节点中使用redis获取hash key的所有字段和值

    红色是使用哈希 我需要存储具有多个字段和值的哈希键 我尝试如下 client hmset Table1 Id 9324324 ReqNo 23432 redis print client hmset Table1 Id 9324325 Re
  • Node.js 上通过套接字连接 Redis

    由于共享托管 目标主机上的我的 redis 服务器不在端口上运行 而是在非常特定的套接字上运行 可以通过套接字文件连接到该套接字 只有我的用户可以访问 但是 我还没有找到如何通过套接字指定连接node redis and connect r
  • 保护节点 Redis

    我正在尝试保护 Node Redis IPC 服务器以使用私钥 公钥 我已经关注了本教程 http bencane com 2014 02 18 sending redis traffic through an ssl tunnel wit
  • Redis 块推送直到列表有空位

    我正在寻找类似的东西BLPUSH该命令将阻塞 直到列表的长度低于指定值max size 目的是防止生产者运行速度快于消费者时列表无限增长 功能与 python 非常相似Queue put https docs python org 3 li
  • Stackexchange.redis 缺乏“WAIT”支持

    我在客户端应用程序正在使用的负载均衡器后面有 3 个 Web API 服务器 我正在使用这个库来访问具有一个主服务器和几个从服务器的 Redis 集群 目前不支持 WAIT 操作 我需要此功能来存储新创建的用户会话并等待它复制到所有从属服务
  • 仅当尚未设置时才进行原子设置

    仅当尚未在 Redis 中设置时 是否有办法执行原子设置 具体来说 我正在创建一个像 myapp user user email 这样的用户 并且希望 Redis 在 user email 已被占用时返回错误 而不是默默地替换旧值 比如声明
  • 如何统计 Redis 流中未读或已确认的消息?

    使用 Redis 5 0 3 假设我们创建一个名为streamy和一个消费群体consumers XGROUP CREATE streamy consumers MKSTREAM 然后向其中添加一些消息 XADD streamy messa
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • 如何批量删除Redis中数十万个带有特殊字符的key

    我们有一个包含数十万个 Redis 键的列表 其中包含各种特殊字符 我们希望批量删除它们 对于这个问题上的类似问题 有一些很好的答案 如何使用 Redis 自动删除与模式匹配的键 https stackoverflow com questi
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht

随机推荐

  • 使用ChatGPT生成代码

    无需翻墙 1 下载安装cursor 首先进入官网 https www cursor so 点击 Download for windows 下载并安装好cursor 2 使用方法 打开后界面如下 打开 py或者 json文件 然后点击按键盘
  • echarts初始化宽度小于容器宽度

    查找资料是因为echarts的容器还没有创建出来的时候echarts就已经加载出来了 因为获取不到容器的宽高就会默认宽高100 是100px 所以会缩小在一起 因为我的代码中 echarts的容器的最外层的div给的样式是display n
  • 分布式事务学习总结

    1 基础概念 1 1 什么是事务 事务可以看做是一次大的活动 它由不同的小活动组成 这些活动要么全部成功 要么全部失败 1 2 本地事务 在计算机系统中 更多的是通过关系型数据库来控制事务 这是利用数据库本身的事务特性来实现的 因此叫数据库
  • echarts报错:Error in mounted hook: “TypeError: Cannot read properties of undefined (reading ‘init‘)“

    echarts安装创建图表时报这种错误 Error in mounted hook TypeError Cannot read properties of undefined reading init 1 具体报错内容 2 解决办法 原先大
  • Java基本数据类型

    Java中有以下几种基本数据类型 这些类型都是值类型 类型 值范围 大小 范围 boolean true或false 1位 char Unicode字符 16位 u0000 uFFFF byte 有符号整数 8位 128 127 short
  • [Linux打怪升级之路]-环境变量

    前言 作者 小蜗牛向前冲 名言 我可以接受失败 但我不能接受放弃 如果觉的博主的文章还不错的话 还请点赞 收藏 关注 支持博主 如果发现有问题的地方欢迎 大家在评论区指正 目录 一 认识环境变量 二 获取环境变量的三种方法 1 通过gete
  • 贝叶斯分类器(贝叶斯决策论,极大似然估计,朴素贝叶斯分类器,半朴素贝叶斯分类器,贝叶斯网)学习笔记

    贝叶斯分类器 贝叶斯决策论 极大似然估计 朴素贝叶斯分类器 半朴素贝叶斯分类器 贝叶斯网 学习笔记 一 条件概率 全概率公式 贝叶斯公式 二 贝叶斯决策论 贝叶斯决策论是概率框架下实施决策的基本方法 对分类任务来说 在所有相关概率都已知的理
  • wsl2 网络代理设置

    在 WSL2 环境中 clone 一个很大的 git 项目 不走代理速度很慢 所以研究了一下怎么让 WSL2 走 Windows 的代理客户端 WSL1 和 WSL2 网络的区别 在 WSL1 时代 由于 Linux 子系统和 Window
  • Android开发 retrofit入门讲解 (RxJava模式)

    Android开发 retrofit入门讲解 RxJava模式 前言 retrofit除了正常使用以外 还支持RxJava的模式来使用 此篇博客讲解如何使用RxJava模式下的retrofit 依赖 implementation com s
  • 极光笔记

    作者 极光推送后台技术专家 曾振波 为什么要上云 关于企业上云 业内已经有了非常多的讨论和论述 这里主要是从极光自身的实际情况阐述几个理由 1 传统自建机房在扩充底层软硬件资源时 需要进行选型 采购 参数测试验证 实施部署等流程 整个过程需
  • jupyter 魔法命令

    Jupyter NoteBook 是功能强大的Python交互IDE 深受数据分析师和算法工程师的热爱 Jupyter NoteBook 在综合使用文字 代码 图片等多种元素展示设计者的想法方面有着美妙的用户体验 而其自带的一些常用Magi
  • 【项目实战】springboot+uniapp基于微信小程序铁路订票小程序-源码+数据库+文档报告

    注意 该项目只展示部分功能 如需了解 评论区咨询即可 本文目录 1 开发环境 2 系统设计 2 1 设计背景 2 2 设计内容 3 系统页面展示 3 1 前台页面 3 2 后台页面 3 3 功能展示视频 4 更多推荐 5 部分功能代码 1
  • Makefile的编译方式

    Makefile 使用GCC的命令进行程序编译时 当程序是单个文件时编译是比较方便的 但当工程中的文件数目增多 甚至非常庞大 并且目录结构关系复杂时 便需要通过makefile来进行程序的编译 示例 目录MakeFile Demo下有三个文
  • CSS

    一 是什么 css 即层叠样式表 Cascading Style Sheets 的简称 是一种标记语言 由浏览器解释执行用来使页面变得更美观 css3是css的最新标准 是向后兼容的 CSS1 2的特性在CSS3 里都是可以使用的 而CSS
  • 嵌入式零树小波EZW编码及其算法改…

    在基于小波变换的图象压缩方案中 嵌入式零树小波 EZW Embedded Zerotree Wavelets 1 编码很好地利用小波系数的特性使得输出的码流具有嵌入特性 近年来 在对EZW改进的基础上 提出了许多新的性能更好的算法 如多级树
  • nohup command 2>&1 &的解释

    nohup的作用是让命令永久执行 哪怕当前终端已经退出登录 而 的作用是后台执行 因此 nohup command 的意思是 永久执行command 并且是在后台执行 至于2 gt 1的作用 在bash shell中 0代表标准输入 一般是
  • Java 退出循环的几种方式

    第一种 使用break退出正在循环的循环 while true break 第二种 对循环命名 使用break退出指定循环 loop while true while true break loop 第三种 使用System exit 0
  • 抖音seo矩阵系统源码开发技术

    抖音seo矩阵系统源码开发技术要求十分严格 首先 需要熟练掌握Python Java等编程语言 具有扎实的算法基础 在此基础上 还需要具备深度学习 神经网络等相关技能 能够实现精准推荐和内容分析等功能 其次 抖音seo矩阵系统开发还需要专业
  • shell脚本冒泡排序法——排列数组的从大到小和从小到大(有详细解释)

    文章目录 一 冒泡排序基础 1 2冒泡排序 1 2基本思想 1 3算法思路 1 4冒泡排序案例图解 二 实际操作 2 1升序 2 2升序 一 冒泡排序基础 1 2冒泡排序 类似于气泡上升的动作 会将数据在数组中从大到小或者从小到大不断地向前
  • Redis介绍

    一 简介 Redis是互联网技术领域使用最为广泛的存储中间件 它是 Remote Dictionary Service 远程字典服务 的首字母缩写 由意大利人Salvatore Sanfilippo 网名 Antirez 开发 默认端口 6