当前位置: 首页 > news >正文

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感~
如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏 支持一下博主吧~

阅读指南

  • 开篇说明
  • 一、基础环境说明
    • 1.1 硬件环境
    • 1.2 软件环境
  • 二、Redis的特点和适用场景
  • 三、Redis的数据类型和使用
    • 3.1`字符串(String)`
    • 3.2 `列表(List):`
    • 3.3 `集合(Set):`
    • 3.4 `有序集合(Sorted Set):`
    • 3.5 `哈希(Hash):`
    • 3.6 `位图(Bitmaps)`
    • 3.7 `超日志(HyperLogLog):`
    • 3.8 `地理空间(Geo):`
    • 3.9 `流(Streams):`
  • 四、最后

开篇说明

说到redis,一定不陌生,Redis是一个开源的、基于内存的、支持多种类型数据结构的键值存储数据库,都知道他能实现快速读写高并发访问实时性快等特点,这篇就主要说说他的特点使用场景、以及我们日常可能常用的命令;

在这里插入图片描述

一、基础环境说明

考虑环境因素,大家适当的对比自己的软硬件环境情况分析~请仔细阅读硬件、软件环境

1.1 硬件环境

演示环境:Windows 11 专业版

1.2 软件环境

数据存储:Redis 3.0.504

二、Redis的特点和适用场景

  • 缓存(Caching)

    Redis最常见的用途是作为缓存层,比如存储一些热点数据,来减少我们数据库的访问压力。这原因其事很简单,因为Redis是基于内存的,因此其读写速度非常快,可以显著提升应用的响应速度。同时,Redis支持多种数据过期策略,能够自动清理长时间未访问的数据,优化内存使用。

  • 会话管理(Session Management)
    在Web应用中,Redis可以用来存储用户会话信息。

  • 消息队列(Message Queue)
    Redis的列表(Lists)和发布/订阅(Pub/Sub)功能可以用来实现简单的消息队列系统。虽然Redis不是专门设计来作为消息队列的,但在一些轻量级的场景下,使用Redis作为消息队列可以简化系统架构,降低部署成本。

  • 计数器(Counters)
    Redis的原子操作特性使得它非常适合实现计数器功能。例如,可以使用INCR命令来实现页面的访问计数、用户的点赞数统计等。由于Redis的操作是原子性的,因此不需要担心并发更新导致的数据不一致问题。

  • 排行榜(Leaderboards)
    利用Redis的有序集合(Sorted Sets)可以方便地实现排行榜功能。有序集合中的每个成员都有一个分数与之关联,Redis会根据分数对成员进行排序。这使得Redis成为实现排行榜、热门榜单等功能的理想选择。

  • 社交网络功能(Social Networking Features)
    Redis可以用来实现社交网络中的一些常见功能,如用户关注关系、好友列表、点赞、评论等。通过合理设计数据结构,Redis可以高效地存储和查询这些社交数据,支持大规模用户的实时交互。

  • 分布式锁(Distributed Locks)
    在分布式系统中,Redis可以用来实现分布式锁。通过Redis的SETNX(Set if Not eXists)命令或Lua脚本,可以确保在分布式环境中只有一个客户端能够获取锁,从而避免数据竞争和一致性问题。

  • 地理空间信息(Geospatial Information)
    Redis的地理空间索引功能可以用来存储和查询地理位置信息。这使得Redis在需要处理地理位置数据的场景(如地图应用、物流追踪等)中非常有用。

  • 实时分析(Real-time Analytics)
    虽然Redis主要是一个内存数据库,但它也可以与一些外部系统(如Apache Kafka、Apache Spark等)结合使用,来实现实时数据分析。通过将数据先写入Redis,然后再由其他系统进行处理和分析,可以显著提升数据分析的实时性和准确性。

三、Redis的数据类型和使用

redis中的数据类型目前主要分为几种,分别是字符串,列表,集合(有序和无序),哈希,位图,超日志,地理空间,流;后4个类型内容相对较多,我们这里就不细说了,后续再另起篇幅来细讲;

尝试使用一下命令时,请先保证自己的redis已正确安装并且已经通过客户端登录了;

3.1字符串(String)

Redis 中最基本的类型,是二进制安全的,即意味着它们能包含任何数据,比如图片或者序列化的对象。字符串类型的值最大能存储 512MB。

// 设置键的值为字符串。如果键已存在,则覆盖原有值
SET key value
// 获取键的值。如果键不存在,则返回nil。
GET key
// 将键的整数值增加1。如果键不存在,则将其值初始化为0再执行增加操作。
INCR key
// 有递增,自然有递减
DECR key
// 获取一个或多个键的值。
MGET key1 [key2...]

在这里插入图片描述

3.2 列表(List):

Redis 的列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

【1】如何列表中添加元素:lpush和rpush,实现左边和右边插入的方式;
【2】如何列表中删除元素:lpop和rpop,实现左边和右边移除的方式;
【3】如何查询列表中的元素:0~-1代表取所有元素,这里有点类似python切片的取法;
在这里插入图片描述
【4】如何移除指定元素:lrem key count value:移除列表中等于value的元素。count>0时,从表头开始搜索;count<0时,从表尾开始搜索;count=0时,移除所有等于value的元素。
在这里插入图片描述

3.3 集合(Set):

Redis 的集合是一个无序的字符串集合,不允许有重复的元素。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。

所谓复杂度,也就是从复杂度的角度方面来看,理论上来讲,它不随你的数据量大小的增加而增加他增删查的执行时间,也就是你数据量再大,也不影响我的执行时间;不过吧,实际情况未必是这样,毕竟复杂度并不考虑具体的执行速度或硬件限制;而且有些情况这个复杂度也不是固定的,O(1)也可能比那成O(n);

【1】查询结合内的元素:smembers key
【2】集合添加元素:sadd key value
【3】检查member是否是集合key的成员。:sismember key member
【4】移除集合中一个或多个成员。:srem key member

在这里插入图片描述

3.4 有序集合(Sorted Set):

Redis 的有序集合和集合一样也是字符串集合不允许重复的成员。为了实现排序,给每个成员都关联一个 double 类型的分数。这使得有序集合既可以做为一个 set 来使用,又可以保存一个 value 对应的 score,从而实现排序等功能。

【1】向有序集合添加一个或多个成员,或者更新已存在成员的分数。
【2】返回有序集合中指定范围的成员,可包含分数。
【3】移除有序集合中的一个或多个成员。
【4】返回有序集合中成员的排名(按分数从低到高)。

在这里插入图片描述
zrank这里注意一下返回的情况,默认情况下返回0代表分数是最高的,如果第二返回的是1,依次类推就行,相反的zrevrank 则是和上面的相反;

在这里插入图片描述

3.5 哈希(Hash):

Redis 的哈希是键值对的集合。Redis 中的哈希类型可以存储不定数量的键值对,是一个字符串类型的 field 和 value 的映射表。

【1】hset key field value :为哈希表中的字段赋值。
【2】hget key field:获取哈希表中字段的值。
【3】hmset key field1 value1 [field2 value2...]:同时设置哈希表中的多个字段。
【4】hgetall key:获取哈希表中所有的字段和值。

在这里插入图片描述
在这里插入图片描述

【注】以下内容这里我们只做了解,具体使用根据实际场景再来说明;

3.6 位图(Bitmaps)

位图严格来说,不算是 Redis 的一种数据类型,但它是一个字符串的二进制表示形式,因此可以使用字符串类型来实现。位图支持位级别的操作,可以非常高效地处理大量的数据,例如用于用户签到、统计在线人数等场景。

【1】setbit key offset value

设置位(SETBIT)SETBIT命令用于将位图指定偏移量上的位设置为0或1。
key:位图的键名。
offset:位的偏移量(从0开始)。
value:要设置的值(0或1)。

【2】getbit key offset

获取位,GETBIT命令用于获取位图指定偏移量上的位的值。

【3】bitcount key [start end]

统计位,用于统计位图中值为1的位的数量

【4】bitop operation destkey key [key …]

位运算,用于对一个或多个位图执行位运算,并将结果保存到新的位图中

【5】bitops key bit [start] [end]

用于查找位图中第一个被设置为指定值的二进制位,并返回它的偏移量。

3.7 超日志(HyperLogLog):

Redis 的 HyperLogLog 是一种概率性的数据结构,用于估计一个集合中不重复元素的数量。与集合相比,HyperLogLog 在保持一定的准确度的基础上,内存消耗极低。

3.8 地理空间(Geo):

Redis 3.2 版本中引入了地理空间数据类型,允许存储地理位置信息,并可以基于这些信息执行地理空间相关的查询,比如计算两个位置之间的距离,或者查找给定半径内的所有位置等。

3.9 流(Streams):

Redis 5.0 引入了 Streams 数据类型,它是一个新的强大的支持多播的原生数据类型,可以看作是一个仅追加的日志数据结构,用于消息队列等场景。

四、最后

【1】在Redis中,位图(Bitmap)、HyperLogLog、Geo和流(Stream)都被视为Redis支持的数据结构或数据类型,但它们各自具有不同的特性和应用场景。

【2】本篇我们只需要知道redis前5五种常见的数据类型的用法即可

【3】不同版本的redis,这些数据类型并不都是有的,例如Geo是Redis 3.2版本中新增的一种数据类型,流是Redis 5.0版本中新增加的数据结构,这个需要注意一下

相关文章:

【Redis】简单了解Redis中常用的命令与数据结构

希望文章能给到你启发和灵感&#xff5e; 如果觉得文章对你有帮助的话&#xff0c;点赞 关注 收藏 支持一下博主吧&#xff5e; 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、Redis的特点和适用场景三、Redis的数据类型和使用3.1字符串&#xff08;String&…...

IDEA启动Web项目总是提示端口占用

文章目录 IDEA启动Web项目总是提示端口占用一、前言1.场景2.环境 二、正文1.场景一:真端口占用2. 场景二:假端口占用 IDEA启动Web项目总是提示端口占用 一、前言 1.场景 IDEA启动Web项目总是提示端口占用&#xff1a; 确实是端口被占用&#xff0c;比如&#xff1a;没有正常…...

JRT打印鉴定记录单

良好的基础会使上层实现越做越简单&#xff0c;jrt在开始写业务之前就把运用场景需要的基础实验和设计完毕了。基于jrt的基础可以很轻松的实现强大的打印效果。jrt的打印和lodop比较像&#xff0c;是高度为满足建议系统打印定制的打印实现&#xff0c;设计器可能没lodop通用&am…...

数据处理-Matplotlib 绘图展示

文章目录 1. Matplotlib 简介2. 安装3. Matplotlib Pyplot4. 绘制图表1. 折线图2. 散点图3. 柱状图4. 饼图5. 直方图 5. 中文显示 1. Matplotlib 简介 Matplotlib 是 Python 的绘图库&#xff0c;它能让使用者很轻松地将数据图形化&#xff0c;并且提供多样化的输出格式。 Ma…...

Nginx -Web服务器/反向代理/负载均衡

文章目录 一、web服务1.1 nginx安装1.2 配置文件1.3 Nginx处理Web机制 二、反向代理三、负载均衡3.1 分类3.2 负载相关配置文件3.3 keepalive 提高吞吐量3.4 配置浏览器缓存 附、JMeter性能测试工具 以赛促学内容,大概率感觉会使用nginx做web服务,特对nginx做总结归纳. Nginx是…...

机器人三定律及伦理分析

全世界的机器人定律并没有一个统一的标准或体系&#xff0c;但是在科学文献中&#xff0c;最广为人知的是由科幻小说家阿西莫夫提出的“机器人三定律”。本文将以这些定律为基础&#xff0c;分析现有的机器人伦理和实际应用中的问题&#xff0c;给出若干实例&#xff0c;并对相…...

自动驾驶算法———车道检测(一)

“ 在本章中&#xff0c;我将指导您构建一个简单但有效的车道检测管道&#xff0c;并将其应用于Carla 模拟器中捕获的图像。管道将图像作为输入&#xff0c;并产生车道边界的数学模型作为输出。图像由行车记录仪&#xff08;固定在车辆挡风玻璃后面的摄像头&#xff09;捕获。…...

小程序自学教程

从0开始搭建微信小程序前后台 0、准备 如何安装&#xff1f;去CSDN搜索“xxx安装教程”即可。 &#xff08;1&#xff09;工具 IntelliJ IDEA&#xff08;必选&#xff09;——Java开发集成环境&#xff0c;可以前后端同时使用 Web Storm——web开发集成环境&#xff0c;主要…...

How do I format markdown chatgpt response in tkinter frame python?

题意&#xff1a;怎样在Tkinter框架中使用Python来格式化Markdown格式的ChatGPT响应&#xff1f; 问题背景&#xff1a; Chatgpt sometimes responds in markdown language. Sometimes the respond contains ** ** which means the text in between should be bold and ### te…...

vs2019 QT无法打开源文件QModbusTcpClient

vs2019无法打开源文件QModbusTcpClient 如果配置的msvc2019,则查找到Include目录 然后包含&#xff1a; #include <QtSerialBus/qmodbustcpclient.h>...

初识c++(命名空间,缺省参数,函数重载)

一、命名空间 1、namespace的意义 在C/C中&#xff0c;变量、函数和后面要学到的类都是大量存在的&#xff0c;这些变量、函数和类的名称将都存在于全 局作用域中&#xff0c;可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化&#xff0c;以避免命名 冲突…...

印尼Facebook直播网络需要达到什么要求?

在全球化浪潮的推动下&#xff0c;海外直播正受到企业、个人和机构的广泛关注和青睐。无论是用于营销、推广还是互动&#xff0c;海外直播为各种组织提供了更多机会和可能性。本文将探讨在进行印尼Facebook直播前&#xff0c;需要满足哪些网络条件以确保直播的质量和用户体验。…...

力扣题解(最长回文子串)

5. 最长回文子串 给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串 。思路&#xff1a; 对于第i个字符&#xff0c;可能的回文子串构成方式有两种&#xff0c;一种是以i位置元素为中心元素&#xff0c;向着两边扩展&#xff0c;一种是以i位置和i1位置元素为中心&#xf…...

数据湖表格式 Hudi/Iceberg/DeltaLake/Paimon TPCDS 性能对比(Spark 引擎)

当前&#xff0c;业界流行的集中数据湖表格式 Hudi/Iceberg/DeltaLake&#xff0c;和最近出现并且在国内比较火的 Paimon。我们现在看到的很多是针对流处理场景的读写性能测试&#xff0c;那么本篇文章我们将回归到大数据最基础的场景&#xff0c;对海量数据的批处理查询。本文…...

脚本练习-每5分钟执行一次获取当前服务器的基本情况

设计一个shell程序&#xff0c;每5分钟执行一次获取当前服务器的基本情况&#xff08;内存使用率&#xff0c;CPU负载&#xff0c;I/O&#xff0c;磁盘使用率&#xff09;&#xff0c;保存到120.20.20.20数据库上数据库帐号aaa密码bbb库名test表名host 创建一个名为server_stat…...

技术探索之kotlin浅谈

Kotlin是一种静态类型编程语言&#xff0c;它运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;可以与Java代码互操作。Kotlin由JetBrains开发&#xff0c;是一种现代、简洁且安全的编程语言。它在2011年首次亮相&#xff0c;2017年被谷歌宣布为Android官方开发语言。…...

机器学习之常用优化器

机器学习之常用优化器 1、SGD 优化器1.2、 SGD 的优缺点 2、 Adam 优化器2.1、设置 Adam 优化器2.2、使用 Adam 优化器的训练流程2.3、Adam 优化器的优缺点 3. AdamW 优化器3.1、示例3.2、训练过程3.3、AdamW 优化器的优点 1、SGD 优化器 在 PyTorch 中&#xff0c;设置 SGD 优…...

机器学习基本概念,Numpy,matplotlib和张量Tensor知识进一步学习

机器学习一些基本概念&#xff1a; 监督学习 监督学习是机器学习中最常见的形式之一&#xff0c;它涉及到使用带标签的数据集来训练模型。这意味着每条训练数据都包含输入特征和对应的输出标签。目标是让模型学会从输入到输出的映射&#xff0c;这样当给出新的未见过的输入时…...

博客前端项目学习day01

这里写自定义目录标题 登录创建项目配置环境变量&#xff0c;方便使用登录页面验证码登陆表单 在VScode上写前端&#xff0c;采用vue3。 登录 创建项目 检查node版本 node -v 创建一个新的项目 npm init vitelatest blog-front-admin 中间会弹出询问是否要安装包&#xff0c…...

java Collections.synchronizedCollection方法介绍

Collections.synchronizedCollection 是 Java 中的一个实用方法,用于创建一个线程安全的集合。它通过包装现有的集合对象来实现线程安全,以确保在多线程环境中对集合的访问是安全的。 主要功能 线程安全:通过同步包装现有的集合,使得在多线程环境中对集合的所有访问(包括…...

力扣每日一题:3011. 判断一个数组是否可以变为有序

力扣官网&#xff1a;前往作答&#xff01;&#xff01;&#xff01;&#xff01; 今日份每日一题&#xff1a; 题目要求&#xff1a; 给你一个下标从 0 开始且全是 正 整数的数组 nums 。 一次 操作 中&#xff0c;如果两个 相邻 元素在二进制下数位为 1 的数目 相同 &…...

ubuntu 上vscode +cmake的debug调试配置方法

在ubuntu配置pcl点云库以及opencv库的时候&#xff0c;需要在CMakeLists.txt中加入相应的代码。配置完成后&#xff0c;无法调试&#xff0c;与在windows上体验vs studio差别有点大。 找了好多调试debug配置方法&#xff0c;最终能用的有几种&#xff0c;但是有一种特别好用&a…...

使用Redis实现签到功能:Java示例解析

使用Redis实现签到功能&#xff1a;Java示例解析 在本博客中&#xff0c;我们将讨论一个使用Redis实现的签到功能的Java示例。该示例包括两个主要方法&#xff1a;sign()和signCount()&#xff0c;分别用于用户签到和计算用户当月的签到次数。 1. 签到方法&#xff1a;sign()…...

tableau标靶图,甘特图与瀑布图绘制 - 9

标靶图&#xff0c;甘特图与瀑布图 1. 标靶图绘制1.1 筛选器筛选日期1.2 条形图绘制1.3 编辑参考线1.4 设置参考线1.5 设置参考区间1.6 四分位设置1.7 其他标靶图结果显示 2.甘特图绘制2.1 选择列属性2.2 选择列属性2.3 创建新字段2.4 设置天数大小及颜色 3. 瀑布图绘制3.1 she…...

双向链表专题

在之前的单链表专题中&#xff0c;了解的单链表的结构是如何实现的&#xff0c;以及学习了如何实现单链表得各个功能。单链表虽然也能实现数据的增、删、查、改等功能&#xff0c;但是要找到尾节点或者是要找到指定位置之前的节点时&#xff0c;还是需要遍历链表&#xff0c;这…...

SpringCoud组件

一、使用SpringCloudAlibaba <dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2023.0.1.0</version><…...

向量的定义和解释

这是一个向量&#xff1a; 向量具有大小&#xff08;大小&#xff09;和方向&#xff1a; 线的长度显示其大小&#xff0c;箭头指向方向。 在这里玩一个&#xff1a; 我们可以通过将它们从头到尾连接来添加两个向量&#xff1a; 无论我们添加它们的顺序如何&#xff0c;我们都…...

IoTDB 集群高效管理:一键启停功能介绍

如何快速启动、停止 IoTDB 集群节点的功能详解&#xff01; 在部署 IoTDB 集群时&#xff0c;对于基础的单机模式&#xff0c;启动过程相对简单&#xff0c;仅需执行 start-standalone 脚本来启动 1 个 ConfigNode 节点和 1 个 DataNode 节点。然而&#xff0c;对于更高级的分布…...

一个spring boot项目的启动过程分析

1、web.xml 定义入口类 <context-param><param-name>contextConfigLocation</param-name><param-value>com.baosight.ApplicationBoot</param-value> </context-param> 2、主入口类: ApplicationBoot,SpringBoot项目的mian函数 SpringBo…...

智驭未来:人工智能与目标检测的深度交融

在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;如同一股不可阻挡的浪潮&#xff0c;正以前所未有的速度重塑着我们的世界。在众多AI应用领域中&#xff0c;目标检测以其独特的魅力和广泛的应用前景&#xff0c;成为了连接现实与智能世界的桥梁。本文旨在…...