【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版本中新增加的数据结构,这个需要注意一下

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

谷粒商城实战笔记-24-分布式组件-SpringCloud Alibaba-Nacos配置中心-命名空间与配置分组

文章目录 一&#xff0c;命名空间1&#xff0c;简介1.1&#xff0c;命名空间的主要功能和特点1.2&#xff0c;使用场景1.3&#xff0c;如何指定命名空间 2&#xff0c;命名空间实战2.1&#xff0c;环境隔离2.2&#xff0c;服务隔离 二&#xff0c;配置集三&#xff0c;配置集ID…

HTML+CSS+JS 实现3D风吹草动效果(B站视频)

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>3D effect&…

线下线上游戏电竞陪伴APP小程序H5同城线下约玩APP开发,语聊约玩平台搭建游戏陪玩APP源码

开发一款线下陪玩约玩APP的实际意义和在生活中的应用场景 1、满足社交需求:现代社会人们的社交圈往往受到时间、地点和其他限制的影响。线下陪玩约玩APP可以提供一个平台&#xff0c;让用户通过约玩的方式结识新朋友、扩大社交圈 2、解决孤独感:有些人由于工作忙碌、居住环境单…

MySQL体系架构解析

1.MySQL体系架构 1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle …

YOLOv10改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)

一、本文介绍 本文给大家带来的改进机制是利用YOLO-MS提出的一种针对于实时目标检测的MSBlock模块(其其实不能算是Conv但是其应该是一整个模块)&#xff0c;我们将其用于C2f中组合出一种新的结构&#xff0c;来替换我们网络中的模块可以达到一种轻量化的作用&#xff0c;我将其…

ENSP软件中DHCP的相关配置以及终端通过域名访问服务器

新建拓扑 配置路由器网关IP 设备配置命令&#xff1a;<Huawei> Huawei部分为设备名 <>代表当下所在的模式&#xff0c;不同模式下具有不同的配置权限<Huawei> 第一级模式&#xff0c;最低级模式 查看所有参数<Huawei>system-view 键入系统视图…

通过 tomcat 让手机访问到电脑写的 html 网页

之前实现的 html 小项目只能在自己的电脑上展示&#xff0c;如果要在其他电脑或者在手机上就看不到网页了 想要在手机上访问自己写的网页&#xff0c;我们可以借助 tomcat 首先我们可以从官网下载 tomcat 官网链接&#xff1a;apache官网 我们拉到最底部&#xff0c;找到 a…

C. Earning on Bets

题目 个人补充&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 #define ll long longconst int maxn 1e6 5, in…

Apache Hadoop之历史服务器日志聚集配置

上篇介绍了Apache Hadoop的分布式集群环境搭建&#xff0c;并测试了MapReduce分布式计算案例。但集群历史做了哪些任务&#xff0c;任务执行日志等信息还需要配置历史服务器和日志聚集才能更好的查看。 配置历史服务器 在Yarn中运行的任务产生的日志数据不能查看&#xff0c;…

Qt:15.布局管理器(QVBoxLayout-垂直布局、QHBoxLayout-水平布局、QGridLayout-网格布局、拉伸系数,控制控件显示的大小)

目录 一、QVBoxLayout-垂直布局&#xff1a; 1.1QVBoxLayout介绍&#xff1a; 1.2 属性介绍&#xff1a; 1.3细节理解&#xff1a; 二、QHBoxLayout-水平布局&#xff1a; 三、QGridLayout-网格布局&#xff1a; 3.1QGridLayout介绍&#xff1a; 3.2常用方法&#xff1a…

YOLOv10改进 | Conv篇 | 利用CVPR2024-DynamicConv提出的GhostModule改进C2f(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制&#xff0c;这个论文中介绍了一个名为ParameterNet的新型设计原则&#xff0c;它旨在在大规模视觉预训练模型中增加参数数量&#xff0c;同时尽量不增加浮点运算&#x…

MAVAE

1 自动下载项目所需要的jar包&#xff0c;统一管理jar包之间的依赖关系 2完成项目构建 maven的安装与配置 ​ 安装jdk环境&#xff1a;maven的运行需要依赖jdk。 下载maven。官网下载&#xff1a;Maven – Download Apache Maven 将下载的maven压缩包直接解压到本地磁盘即可。…

【网络安全】SSRF 之 Azure Digital Twins Explorer

未经许可&#xff0c;不得转载。 文章目录 正文 正文 Azure Digital Twins 是一个微软下的平台服务&#xff0c;允许开发者创建和运行数字孪生模型&#xff0c;这些模型能够反映物理世界中的实体及其关系&#xff0c;通过这些模型可以进行监控、分析和预测等操作。 1、进入主…

MACOS查看硬盘读写量

一、安装Homebrew 按照提示进行安装 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"二、安装smartmontools brew install smartmontools三、查看硬盘读写量等信息 sudo smartctl -a /dev/disk0

手机容器化 安装docker

旧手机-基于Termux容器化 1、安装app 在手机上安装Termux或ZeroTermux&#xff08;Termux扩展&#xff09; 1.1 切换源 注&#xff1a;可以将termux进行换源&#xff0c;最好采用国内源&#xff0c;例如&#xff1a;清华源等 更新包列表和升级包&#xff08;可选&#xff0…

VUE超详细入门

目录 1.什么是 Vue.js 2.Vue.js 优点 Vue中的第一个hello world Vue指令 v-model v-bind v-on v-if v-show v-for Vue 实例生命周期 从传统架构转向单文件架构(通过组件拼接) 安装element-ui使用 1.什么是 Vue.js Vue (读音 /vju ː /&#xff0c;类似于 view) 是…

【AI前沿】深度学习:神经网络基础

文章目录 &#x1f4d1;引言一、神经元和感知器1.1 神经元的基本概念1.2 感知器模型 二、多层感知器&#xff08;MLP&#xff09;2.1 MLP的基本结构2.2 激活函数的重要性2.3 激活函数2.4 激活函数的选择 三、小结 &#x1f4d1;引言 深度学习是现代人工智能的核心技术之一&…

【unity笔记】九、Unity添加串口通信

unity仿真使用虚拟串口调试。下面为简单流程。 常用串口调试软件在这里下载。 1.虚拟串口 添加虚拟串口&#xff0c;这里使用com1 com2 2. 串口调试 在这里为虚拟串口发送消息。 3. unity配置 3.1 设置 在文件->生成设置->玩家设置->玩家->其他设置 中找到…

【JavaSE】程序逻辑控制

目录 1. 顺序结构 2. 分支结构 2.1 if语句 2.1.1 语法格式1 2.1.2 语法格式2 2.1.3 语法格式3 2.1.4 练习 2.1.5 注意事项 2.2 switch 语句 3. 循环结构 3.1 while循环 3.1.1 语法格式 3.1.2 代码示例 3.1.3 注意事项 3.2 break 3.3 continue 3.4 for循环 …

Java虚拟机与跨平台特性

Java虚拟机与跨平台特性 1、Java虚拟机&#xff08;JVM&#xff09;2、跨平台特性3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、Java虚拟机&#xff08;JVM&#xff09; Java虚拟机是一个能够执行Java字节码的软件环境。它模…