Redis——Redis简介

2023-12-05

Redis是目前最流行的键值对(key-value)数据库,以出色的性能著称,官方提供的数据是可以支持100000以上的+QPS。Redis具有高性能的主要原因如下:

  • Redis是基于内存的存储数据库,绝大部分的命令处理只是纯粹的内存操作,内存的读写速度非常快。
  • Redis是单进程线程的服务(实际上一个正在运行的Redis Server肯定不止一个线程,但只有一个线程来处理网络请求),避免了不必要的上下文切换,同时不存在加锁/释放锁等同步操作。
  • Redis使用多路I/O复用模型(select、poll、epoll),可以高效处理大量并发连接。
  • Redis中的数据结构是专门设计的,增、删、改、查等操作相对简单。

1、Redis简介

Redis(REmote DIctionary Server)是一个使用ANSI C编写的、开源的、支持网络的、基于内存的、可选持久化的键值对存储系统。在2013年5月之前,Redis的开发由VMware赞助;2013年5月至2015年6月,由Pivotal赞助;从2015年6月起,Redis的开发由Redis Labs赞助。根据数据库使用排行网站db-engines.com上的排名,Redis是目前最流行的键值对存储系统。

Redis由Salvatore Sanfilippo在2009年发布初始版本,开源后不断发展壮大,目前的最新版为Redis 7.0。

Redis在互联网数据存储方面应用广泛,主要具有以下优点:

  • Redis是内存型的数据库,也就是说Redis中的key-value对是存储在内存中的,因而效率比磁盘型的快。
  • Redis的工作模式为单线程(Redis6之前,从Redis6开始支持多线程),不需要线程间的同步操作。Redis采用单线程主要因为其瓶颈在内存和带宽上,而不是CPU。
  • Redis中key-value的value不仅可以是字符串,也可以是复杂的数据类型,如链表、集合、散列表等。
  • Redis支持数据持久化,可以采用RDB、AOF、RDB&AOF三种方案。计算机重启后可以在磁盘中进行数据恢复。
  • Redis支持主从结构,可以利用从实例进行数据备份。

2、Redis 5.0的新特性

相较于Redis 4.0, Redis 5.0增加了很多新的特性,限于篇幅,本节主要介绍几个较重要的特性,具体内容可以参考官方文档:

  • 新增Streams数据类型,这是Redis 5.0最重要的改进之一。可以把Streams当作消息队列
  • 新的模块API、定时器、集群及字典。
  • RDB中持久化存储LFU和LRU的信息。
  • 将集群管理功能完全用C语言集成到redis-cli中,Redis 3.x和Redis 4.x的集群管理是通过Ruby脚本实现的。
  • 有序集合新增命令ZPOPMIN/ZPOPMAX。
  • 改进HyperLogLog的实现。
  • 新增Client Unblock和Client ID。
  • 新增LOLWUT命令。
  • Redis主从复制中的从不再称为Slave,改称Replicas。
  • Redis 5.0引入动态哈希,以平衡CPU的使用率和相应性能,可以通过配置文件进行配置。Redis 5.0默认使用动态哈希。
  • Redis核心代码进行了部分重构和优化。

3、Redis常用数据类

Redis的数据存储结构是key-value对,定义key时要注意以下几点:

  • key不要太长,尽量不要超过1024Byte,太长的话不仅消耗内存,而且会降低查找的效率。
  • key也不要太短,太短的话,key的可读性会降低。
  • 一个项目中,key单词与单词之间以:分开,例如SET user-name:loginnamewangwu。

这里主要简单介绍Redis的5种数据类型,即String、Hash、List、Set及Sorted Set。

3.1、String类型

String类型是Redis最基本的数据类型,一个key对应一个value。String类型是二进制安全的,即Redis的String类型可以包含任何数据,例如扩展名为.jpg的图片或者序列化的对象。

3.2、Hash类型

Redis的Hash类型是一个String类型的域(field)和value的映射表,Hash类型特别适用于存储对象,例如Username、Password和Age等。

Redis中的每个Hash类型数据都可以存储 2^32-1 个field-value对。

3.3、List类型

在Redis中,List类型是按照元素的插入顺序排序的字符串列表。在插入时,如果key并不存在,Redis将为该key创建一个新的列表。List类型中可以包含的最大元素数量是4 294 967 295。

3.4、Set类型

Redis的Set类型是String类型的无序集合。集合中的元素是唯一的,不能出现重复的元素。

3.5、Sorted Set类型

Sorted Set类型是Set类型的一个加强版本,它在Set类型的基础上增加了一个顺序属性。这一属性在添加、修改元素的时候可以指定,每次指定后有序集合会自动按新的值调整顺序。

有序集合中的元素是唯一的,但分数(Score)却可以重复。

3.6、Redis HyperLogLog

Redis 2.8.9中添加了HyperLogLog。Redis的HyperLogLog是用来做基数统计的,主要使用场景是海量数据的计算。HyperLogLog的优点是,在输入元素的数量非常多时,计算基数所需的空间总是很小。HyperLogLog只会根据输入元素来计算基数,而不会存储元素本身。基数就是不重复元素的个数。例如数据集{1,3,5,7,5,7,8},那么这个数据集的基数集为{1,3,5,7,8},基数为5。HyperLogLog可以看作一种算法,它提供了不精确的基数计数方案。

HyperLogLog一开始就是为了大数据量的统计而发明的,很适合那种数据量很大,又允许有一点误差的计算,例如页面用户访问量。HyperLogLog提供了不精确的去重技术方案,标准误差是0.81%,这对于页面用户访问量的统计是可以接受的。因为访问量可能非常大,但是访问量统计对准确率要求没那么高,没必要做到绝对准确,HyperLogLog正好符合这种要求,不会占用太多存储空间,同时性能也不错。总之,Redis的HyperLogLog特别适用对海量数据进行统计,对内存占用有要求,并且能够接受一定的错误率的场景。

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

Redis——Redis简介 的相关文章

  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • Redis Cluster 与 Pub/Sub 中的 ZeroMQ,用于水平扩展的分布式系统

    如果我要设计一个巨大的分布式系统 其吞吐量应随系统中的订阅者数量和通道数量线性扩展 哪个会更好 1 Redis集群 仅适用于Redis 3 0 alpha 如果是集群模式 您可以在一个节点上发布并在另一个完全不同的节点上订阅 消息将传播并到
  • 为什么 Redis TimeSeries 不捕获聚合中的最后一个元素?

    我试图了解 Redis 的时间序列规则创建的工作原理 但我很困惑为什么 Redis 会忽略聚合中的最后一项 并想知道这是否是预期的行为 我在中创建了示例代码redis cli为了显示 127 0 0 1 6379 gt FLUSHALL O
  • redis - 使用哈希

    我正在使用 redis 为我的 Web 应用程序实现社交流和通知系统 我是 redis 的新手 我对哈希值及其效率有一些疑问 我读过这篇很棒的文章Instagram 帖子 http instagram engineering tumblr
  • 为什么Redis中没有有序的hashmap?

    Redis 数据类型 http redis io topics data types包括排序集 http redis io topics data types intro sorted sets以及其他用于键值存储的必要数据结构 但我想知道
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • 在 Spring 4 中干掉通用的 RedisTemplate

    我读到你可以拥有 Autowired从 Spring 4 开始泛型 这太棒了 我有一个摘要RedisService我想参加的课程 Autowired一个通用的 RestTemplate 如下所示 public abstract class
  • 如何使用redis发布/订阅

    目前我正在使用node js和redis来构建应用程序 我使用redis的原因是因为发布 订阅功能 该应用程序只是在用户进入用户或离开房间时通知经理 function publishMsg channel mssage redisClien
  • 如何配置Lettuce Redis集群异步连接池

    我正在配置我的生菜重新分配池 当我按照官方文档配置时 连接池无法正常初始化 无法获取连接 官方文档指出 RedisClusterClient clusterClient RedisClusterClient create RedisURI
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • ServiceStack.Redis:无法连接:sPort:

    我经常得到 ServiceStack Redis 无法连接 sPort 0 或 ServiceStack Redis 无法连接 sPort 50071 或其他端口号 当我们的网站比较繁忙时 就会出现这种情况 Redis 本身看起来很好 CP
  • 如何在Redis中正确存储图片?

    决定将图像存储在Redis中 如何正确执行 现在我这样做 redis gt set image path here is the base64 image code 我不确定这是否正常 将图片存储在Redis中是完全可以的 Redis 键和
  • 批量将Dictionary中的数据设置到Redis中

    我正在使用 StackExchange Redis DB 插入键值对字典Batch如下 private static StackExchange Redis IDatabase database public void SetAll
  • 在redis中存储多个嵌套对象

    我想在redis中存储多个复杂的json数据 但不知道如何 这是我的 json 结构 users user01 username ally email email protected cdn cgi l email protection u
  • 无法使用 ASP.NET 会话状态提供程序连接到 Redis 服务器

    一段时间以来 我一直在尝试用 Redis 替换 ASP NET Session 多个小时与适用于 Redis 的 Microsoft ASP NET 会话状态提供程序 http blogs msdn com b webdev archive
  • nginx/uwsgi 服务器的持久内存中 Python 对象

    我怀疑这是否可能 但这是问题和提出的解决方案 提出的解决方案的可行性是这个问题的对象 我有一些需要可用于所有请求的 全局数据 我将这些数据保存到 Riak 并使用 Redis 作为缓存层以提高访问速度 目前 数据被分为约 30 个逻辑块 每
  • Redis - 错误:值不是有效的浮点数

    我在 Redis 中有一个排序集 我试图通过在Python代码中使用zincrby来更新特定元素的计数器值 例如 conn zincrby usersSet float 1 user1 但它显示错误为 错误 值不是有效的浮点数 我在 cli
  • 如何在Redis中使用HSCAN命令?

    我想在我的作业中使用 Redis 的 HSCAN 命令 但我不知道它是如何工作的 Redis 的官方页面 http redis io commands hscan http redis io commands hscan 这个命令给了我空白
  • 使用 Gorilla 会话自定义后端有什么优势?

    我想使用 Redis 进行会话管理 但我不明白使用 Redis 作为 Gorilla 会话包的自定义后端比直接使用它有什么优势 Gorilla 会话包的链接 http www gorillatoolkit org pkg sessions
  • 如何在Redis中存储聚合目录树搜索结果

    我有一个很大的产品目录树 目前包含约 36000 个类别和约 100 万个产品 即叶子 它的结构如下 最大深度为 5 Cat1 Cat11 Cat111 Cat1111 Product1 Cat1112 Product1 Cat1113 P

随机推荐

  • 开关电容转换器的合成器研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码实现
  • Python自动化测试之登录脚本的实现

    环境准备 前提已经安装好python pycharm 配置了对应的环境变量 1 安装selenium模块 文件 gt 设置 gt 项目 script gt python解释器 gt selenium 2 安装浏览器驱动器 以谷歌浏览器为例
  • EATON DPM-MC2通信模块

    EATON DPM MC2通信模块的产品特点包括 数据采集 能够采集电力系统或工业设备的数据 包括电流 电压 频率 功率因数等参数 以便实时监测和控制系统状态 远程监测 允许远程监测电力设备或自动化系统的性能和状态 对于远程操作 故障排除和
  • 用友与厦国会联合培训,探索智能会计时代业财融合成功模式

    在企业经营过程中 业务与财务之间的边界越来越模糊 企业的各项业务活动所形成的财务结果都会成为管理者经营决策的依据 但是很多企业财务部门与业务部门之间的断层明显 业财融合成为企业运营管理的重要发展方向 也是建设世界一流财务管理体系的重要一环
  • 对标世界一流!用友已与74家中央企业达成集团级合作!

    近年来 面对蓬勃兴起的新一轮科技革命和产业变革 国资国企贯彻落实党中央 国务院决策部署 坚持以建设世界一流企业为引领 持续深化国有企业改革 切实加大科技创新工作力度 扎实推进高质量发展 取得了阶段性的重要成效 加快推进数智化转型 发挥数据价
  • 用友BIP项目云,助力设计类项目管理高效推进

    11 1 设计类项目管理解决方案 设计是国家基础设施建设 房建建造 装备制造 武器研发 特种设备生产研发等产业链的一环 可分为工程设计 装备 设备设计 工业设计 目前国内设计行业经过几十年的发展 建设 目前已经到了整合发展和转型发展的窗口期
  • 龙芯loongarch64服务器编译安装tokenizers

    1 简介 Hugging Face 的 Tokenizers 库提供了一种快速和高效的方式来处理 即分词 自然语言文本 用于后续的机器学习模型训练和推理 这个库提供了各种各样的预训练分词器 如 BPE Byte Pair Encoding
  • BENTLY 125800-01 通讯输出接口组件

    BENTLY 125800 01 通讯输出接口组件 BENTLY 125800 01 通讯输出接口组件产品详情 Bently 125800 01 通讯模块的产品特点主要包括 机械振动监测 这种继电器模块通常用于监测旋转机械设备的振动水平 以
  • 打破卫浴行业冰山!九牧重构高端服务品牌“点线面”新秩序

    文 螳螂观察 作者 余一 说到服务 你首先会想到哪个品牌 海底捞大概率会是其中之一 一个餐饮品牌 不靠价格 口味出圈 而是凭借服务走向全球市场 古往今来或许也是头一家了 而无微不至的的服务 也成为了海底捞最突出的竞争优势 相较于产品 价格等
  • 【数据结构/C++】树和二叉树_二叉链表

    include
  • 【传输线开路和短路故障】带有集总元件的非对称传输线扩频时域反射测量(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章讲解
  • 【C++】运算符重载

    加号运算符重载 include
  • BASLER A404K 德国工业相机

    BASLER A404K是一款德国BASLER公司生产的工业相机 通常用于各种工业视觉和图像处理应用 以下是关于BASLER A404K工业相机的详细信息 型号和规格 A404K是该工业相机的型号 通常有特定的规格和配置 如分辨率 帧速率
  • 单目相机测距(3米范围内)二维码实现方案(python代码 仅仅依赖opencv)

    总体思路 先通过opencv 识别二维码的的四个像素角位置 然后把二维码的物理位置设置为 cv Point3f HALF LENGTH HALF LENGTH 0 tl cv Point3f HALF LENGTH HALF LENGTH
  • 在异构系统中学习应用的流迭代分布式编码计算研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • FOXBORO FCP270 P0917YZ控制器模块

    FOXBORO FCP270 P0917YZ控制器模块 FOXBORO FCP270 P0917YZ控制器模块产品详情 FOXBORO FCP270 P0917YZ控制器模块的特点包括 通讯功能 用于在工业自动化系统中实现设备之间的数据通讯
  • selenium IDE自动化测试脚本的实现

    selenium IDE是干什么的 Selenium IDE 是一个简单的录制回放工具 它可以录制你在浏览器上的操作 回放脚本时 它可以重现录制的动作 就好像你又操作了一遍一样 selenium IDE是个浏览器插件 你需要在浏览器上安装该
  • D (1173) : A DS二叉树_合并二叉树

    文章目录 一 题目描述 二 输入与输出 1 输入 2 输出 三 参考代码 一 题目描述 给定两个二叉树 输出这两个二叉树合并后形成的二叉树 依次输出前序遍历 中序遍历 后序遍历 二 输入与输出 1 输入 第一行输入t 表示有t个测试样例 第
  • Ubuntu系统配置深度学习环境之nvidia显卡驱动和cuda安装

    前言 NVIDIA 显卡驱动是为了确保 NVIDIA 显卡能够正确运行而开发的软件 显卡驱动负责与操作系统通信 管理显卡的各种功能 并提供性能优化和兼容性保证 安装适用于特定显卡型号和操作系统版本的最新驱动程序是确保显卡能够正常工作的重要步
  • Redis——Redis简介

    Redis是目前最流行的键值对 key value 数据库 以出色的性能著称 官方提供的数据是可以支持100000以上的 QPS Redis具有高性能的主要原因如下 Redis是基于内存的存储数据库 绝大部分的命令处理只是纯粹的内存操作 内