Redis——Redis简介

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特别适用对海量数据进行统计,对内存占用有要求,并且能够接受一定的错误率的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/196106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BabySpartan:对non-uniform computation的Lasso-based SNARK

1. 引言 前序博客有: Lasso、Jolt 以及 Lookup Singularity——Part 1Lasso、Jolt 以及 Lookup Singularity——Part 2深入了解LassoJoltmultilinear多项式承诺方案benchmark对比 见Srinath Setty和Justin Thaler 2023年论文《BabySpartan: Lasso-based SNARK fo…

协同过滤算法:个性化推荐的艺术与科学

目录 引言: 一、协同过滤算法的基本原理 二、协同过滤算法的应用领域 三、协同过滤算法的优缺点 四、协同过滤算法的未来发展方向 五、结论 引言: 在当今数字化时代,信息过载成为了一个普遍的问题。为了帮助人们更好地发现符合个性化需…

HTTP 和 HTTPS的区别

一、HTTP 1.明文传输,不安全 2.默认端口号:80 3.TCP三次握手即可 二、HTTPS 1.加密传输,更安全(在HTTP层与TCP层之间加上了SSL/TTL安全协议) SSL和TTL是在不同时期的两种叫法,含义相同。 2.默认端口号:443 3.TCP三…

【广州华锐互动】风电场检修VR情景模拟提供接近真实的实操体验

风电场检修VR情景模拟系统由广州华锐互动开发,这是一种新兴的培训方式,它通过虚拟现实技术将风力发电场全范围进行1:1仿真建模还原,模拟监视风力发电场各种运行工况下的运行参数和指标,同时可进行升压站系统的巡视,倒闸…

Windows系列:Zabbix agent一键部署-windows版本(windows 安装zabbix客户端安装、bat文件修改文件内容)

Zabbix agent一键部署-windows版本(windows 安装zabbix客户端安装、bat文件修改文件内容) 一. Zabbix agent一键部署-windows版本二. windows 安装zabbix客户端安装1.下载安装zabbix agent2.配置zabbix agent2.1 修改配置文件2.2 将zabbix agent安装为wi…

windows系统配置别名

习惯了linux下的别名管理机制,而windows下却没有类似的功能。我看有些博客介绍说windows下配置别名还得修改注册表,太麻烦了(个人认为,windows的这一套,终究会被抛弃)。我自己摸索出一条比较便利的方式。 …

同旺科技 USB TO SPI / I2C --- 调试W5500_TCP Client接收数据

所需设备: 内附链接 1、USB转SPI_I2C适配器(专业版); 首先,连接W5500模块与同旺科技USB TO SPI / I2C适配器,如下图: 发送数据6个字节的数据:0x11,0x22,0x33,0x44,0x55,0x66 在专业版调试软件中编辑指令&#xff0c…

坦克大战-部分

通过键盘操控坦克移动,转弯,射击 消灭所有敌人可以过关 23个类,3个gif图片 wsad控制移动 j射击 砖墙限制移动,可以打穿;铁墙,限制移动,不能打穿;水&#x…

【PyTorch】多层感知机

文章目录 1. 模型和代码实现1.1. 模型1.1.1. 背景1.1.2. 多层感知机1.1.3. 激活函数 1.2. 代码实现1.2.1. 完整代码1.2.2. 输出结果 2. Q&A 1. 模型和代码实现 1.1. 模型 1.1.1. 背景 许多问题要使用线性模型,但无法简单地通过预处理来实现。此时我们可以通过…

智能联动第三方告警中心,完美实现故障响应全闭环

前言 我们曾讨论完善的告警策略是整个数据监控系统的重要组成部分(参见《机智的告警策略,完善监控系统的重要一环》),介绍了如何配置告警通知以及场景示例,帮助用户及时更多潜在的故障和问题,有效地保障系…

Windows server系列:将windows server2019打造成个人操作系统

一、组策略 WIN键R键,输入gpedit.msc,进入组策略设置。      1、计算机配置,Windows设置,安全设置,帐户策略,密码策略:“密码必须符合复杂性要求”,设置为"已禁用"。…

力扣labuladong一刷day26天常数时间访问删除操作数组

力扣labuladong一刷day26天常数时间访问删除操作数组 文章目录 力扣labuladong一刷day26天常数时间访问删除操作数组一、380. O(1) 时间插入、删除和获取随机元素二、710. 黑名单中的随机数 一、380. O(1) 时间插入、删除和获取随机元素 题目链接:https://leetcode…

Linux 统计命令Netstat详解

一、查看本机IP连接 netstat -anp netstat常见参数 -a (all)显示所有选项,默认不显示LISTEN相关 -t (tcp)仅显示tcp相关选项 -u (udp)仅显示udp相关选项 -n 拒绝显示别名,能显示数字的全部转化成数字。 -l 仅列出有在 Listen (监听) 的服務状态 -p 显示…

Redis 之 ZSET 实战应用场景,持续更新!

前言 大白话介绍 Redis 五大基本数据类型之一的 ZSET 开发中常见的应用场景 ZSET 介绍 ZSET 与 SET 相同点:都是是 String类型元素的集合,且不允许重复的成员ZSET 与 SET 不同点:ZSET 每个元素都会关联一个 Double 类型的分数,Re…

Latex去掉参考文献后面的参考文献所在页(去掉参考文献的反向超链接)

如下: 在使用latex插入参考文献的时候,最后面总是会出现这种代号。这是表明的是这条参考文献所在的页码,并且点击之后可以跳转到该页。正式来讲,这个叫超链接的BACKREF。若要去掉,只需要在引用hyperref的时候去掉page…

技术or管理?浅谈软件测试人员的未来职业发展,值得借鉴

我们在工作了一段时间之后,势必会感觉到自己已经积累了一些工作经验了,会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的,由于其入门门槛不高,不用学习太多技术性知识即可入行,所…

Net8 EFCore Mysql 连接

一、安装插件 Pomelo.EntityFrameworkCore.MySq (这里要选8.0.0以上版本低版本不支持.net8) 二、配置数据库连接串 appsettings.json 中配置数据库连接串 "ConnectionStrings": {"Connection": "server172.18.2.183;port3306;databasestudents;uid…

webpack打包体积优化,减少白屏时间

webpack打包体积优化 加载慢原因分析及解决 一个是打包体积的优化,另一个是代码层面的优化 1》首先通过Network面板发现vendor.js体积过大,网路良好情况下加载时间太长),vendor体积太大,加载花了3s?后来…

使用opencv将8位图像raw数据转成bmp文件的方法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 这里说的图像raw数据是只包含图像数据的缓存。主要使用了cv::imencode接口将 cv::Mat转化为图像缓存。 #include <opencv2/opencv.hpp>/* 生成一幅…

【若依框架实现上传文件组件】

若依框架中只有个人中心有上传图片组件&#xff0c;但是这个组件不适用于el-dialog中的el-form表单页面 于是通过elementui重新写了一个上传组件&#xff0c;如图是实现效果 vue代码 <el-dialog :title"title" v-model"find" width"600px"…