当前位置: 首页 > 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版本中新增加的数据结构,这个需要注意一下

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 16进制转字符串,字符串转16进制
  • 【ChatGPT 消费者偏好】第二弹:ChatGPT在日常生活中的使用—推文分享—2024-07-10
  • 阿里云调整全球布局关停澳洲云服务器,澳洲服务器市场如何选择稳定可靠的云服务?
  • 从零开始搭建vite开发环境
  • 提示词工程(Prompt Engineering)是什么?
  • magma软件许可优化解决方案
  • el-tree 获取当前勾选节点的选中状态以及选中值对象 触发check-change多次事件问题原因
  • 【idea】idea配置gitee插件_简单使用
  • python网络爬虫之Urllib
  • 批量提取网页表格内容至excel文件
  • Cypress UI自动化之安装环境
  • Win10安装MongoDB(详细版)
  • 论文降痕降重全攻略:从技巧到工具,助你轻松应对学术挑战
  • BatchNorm LayerNorm
  • WEB-INF 泄露-RoarCTF-2019-EasyJava(BUUCTF)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • httpie使用详解
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • Java的Interrupt与线程中断
  • mac修复ab及siege安装
  • mongo索引构建
  • PHP 的 SAPI 是个什么东西
  • PHP面试之三:MySQL数据库
  • Promise初体验
  • PV统计优化设计
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • tensorflow学习笔记3——MNIST应用篇
  • vue的全局变量和全局拦截请求器
  • 阿里研究院入选中国企业智库系统影响力榜
  • 对JS继承的一点思考
  • 工作中总结前端开发流程--vue项目
  • 观察者模式实现非直接耦合
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 浏览器缓存机制分析
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 说说动画卡顿的解决方案
  • nb
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • Spring第一个helloWorld
  • 如何在招聘中考核.NET架构师
  • ​学习一下,什么是预包装食品?​
  • #1015 : KMP算法
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (04)odoo视图操作
  • (06)Hive——正则表达式
  • (152)时序收敛--->(02)时序收敛二
  • (30)数组元素和与数字和的绝对差
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!