【Redis】Redis 的基础数据结构 以及 各种数据结构常用命令使用示例

news2025/8/13 3:47:55

本文主要介绍 Redis 基础,包括什么是 Redis 、Redis 数据结构有那些 以及 各种Redis 数据结构的常用操作命令

在这里插入图片描述

1. 初始 Redis

1.1 NoSQL 数据库 —— 非关系型数据库

  • SQL
    1) 结构化 -—— 例如 MySQL 中的表结构 (不建议修改,初始时就要设计好)
    2) 关联的 —— MySQL 中的外键
    3) SQL 查询 —— 查询语法是固定的
    4)具有事务需求 —— 底层具有事务的实现,满足 ACID
    5)磁盘存储

    使用场景:数据结构固定;业务对数据安全性、一致性要求较高

  • NoSQL
    1) 非结构化 —— 如 Redis 就是一种键值型数据库 ,除此之外还有文档型数据库(MongoDB)、列类型数据库(HBase)、图数据库( Neo4j — 常用于社交 app)等
    2) 无关联 —— 想建立关联,要通过嵌套存储实现
    3) 非 SQL —— 没有查询固定的语法格式
    在这里插入图片描述
    4) 不能满足事务需求 —— BASE
    5) 内存存储

    使用场景:数据结构不固定、对一致性、安全性要求不高、对性能要求高

1.2 认识 Redis

Redis 全程 Remote Dictionary Server ,远程词典服务器,其是一个基于内存的键值型 NoSQL 数据库。它具有如下特点:

特点

  1. 键值型
  2. 单线程 —— 每个命令原子性 (6.0 核心部分也是单线程,只是网络部分进行了多线程的处理)
  3. 低延迟、速度快 (基于内存 – 快的核心原因、IO多路复用、良好的编码 - C语言)
  4. 支持数据的持久化 —— 定期将数据持久化到磁盘
  5. 支持主从集群、分片集群
  6. 支持多语言客户端 (C、Java 等都能用)

1. 3 安装 Redis

Redis 详细安装过程请见我这篇文章 : https://blog.csdn.net/liuwanqing233333/category_12100788.html?spm=1001.2014.3001.5482

这里补充几个部分:

  1. 设置任何机器都能访问 , 在 redis.conf 中修改:
bind 0.0.0.0
  1. 设置 Redis 后台运行
daemonize yes 
  1. 设置 Redis 日志文件
logfile "redis.log"
  1. 设置 Redis 开机自启动

1) 新建一个系统服务文件

vi /etc/systemd/system/redis.service

在里面输入:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf # 这里要改成你自己的 redis 配置文件地址
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2)重载系统服务

systemctl daemon-reload

3)通过如下命令操作 Redis

# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

4)设置 Redis 开机自启

systemctl enable redis

补充: vi 编辑器搜索某个特定单词的方法为 : 命令模式输入 /单词拼写 + enter 键,这样可以快速帮我们定位到要修改的那几个位置

2. Redis 常见命令

Redis 是一个键值型数据库,key 一般为 String 类型,value 的类型可以有很多,具体如下标所示:

类型示例
Stringhello wanqing
Hash{name: “婉晴”}
List{A ->B -> C }
Set{A, B, C}
SortedSethello wanqing
上面的五种是基本数据类型下面的三种为特殊类型
GEO{A:{120, 30} }
BitMap010100101
HyperLog0101001010101

Redis 中文命令手册地址:https://www.redis.net.cn/order/

2.1 Redis 通用命令

  1. KEYS 返回符合模板的 Key
    在这里插入图片描述
    示例:查询所有的键 | 查询以 n 开头的键
    在这里插入图片描述

    注释: 这种模糊查询是效率非常低的,而且 Redis 是单线程的,容易造成阻塞 —— 主从模式,在从节点上可以用,主节点上不要用

  2. DEL 删除指定的 key
    在这里插入图片描述
    示例:删除指定 key, 返回删除的 个数
    在这里插入图片描述

  3. EXISTS 判断指定 key 是否存在
    在这里插入图片描述
    示例:判断 name 这个 key 是否存在
    在这里插入图片描述

  4. EXPIRE 给 key 设置有效期 、 TTL 查看剩余有效期

    在这里插入图片描述
    示例: 给 name 这个 key 设置有效期为 30 s ,通过 TTL 查询有效期
    在这里插入图片描述



2.2 String 类型

2.2.1 基础概念

String 类型是 Redis 中最简单的值,按照其格式不同,又分为:

  • string
  • int
  • float

这三种类型底层都用字符数组进行存储,但是数字类型的在存储时底层编码不同,其会转成二进制去存储,更节省空间。字符串类型最大空间不能超过 512 m 。

2.2.2 操作命令
  1. SET

  2. GET

  3. MSET 批量新增

  4. MGET 批量获取
    在这里插入图片描述

  5. INCR 自增
    在这里插入图片描述

  6. INCRBY 定义自增值
    在这里插入图片描述

  7. INCRBYFLOAT 为浮点数做加法
    在这里插入图片描述
    在这里插入图片描述

  8. SERNX 新增 —— 含有就不增,不会替换
    在这里插入图片描述

  9. SETEX 添加 key 并设置有效期
    在这里插入图片描述

扩展: 如果 Value 是一个对象,我们可以将 对象 序列化为 json 字符串进行存储,示例如下:

'{"id":1, "name":"小米11优惠券", "price": 100}'



2.3 Hash 类型

2.3.1 基础概念

当我们要存储对象时,将对象序列化为 json 字符串存储很不方便,同时也很难对某个字段单一修改。因此,我们要有 Hash 类型,用 Hash 中的多个键值对的集合表示对象,如下图所示:

在这里插入图片描述

2.3.2 操作命令
  1. HSET: 设置值
    在这里插入图片描述

  2. HGET: 获取值
    在这里插入图片描述

  3. MSET:批量设置值
    在这里插入图片描述

  4. MGET: 批量获取值
    在这里插入图片描述

  5. HGETALL:得到所有的键值对
    在这里插入图片描述

  6. HKEYS: 获取指定 key 的所有 field
    在这里插入图片描述

  7. HVALUE: 获取指定key的所有 field 的所有 value
    在这里插入图片描述

  8. HINCRBY: 让一个 hash 类型的指定 key 的 指定 field 的 value 自增并指定步长
    在这里插入图片描述

  9. HSETNX: 新增字段,若该值已经存在不替换
    在这里插入图片描述




2.4 List 类型

2.4.1 基础概念

和 Java 中的 LinkedList 类似, List 类型可以看作双向链表结构,支持正向逆向检索。具有下列特点:

  • 插入快
  • 查询速度一般
  • 有序
  • 元素可以重复

其使用场景为: 保存对顺序有要求的数据,如 点赞、评论 等按照时间顺序展示的数据

2.4.2 操作命令
  1. LPUSH : 从左侧插入
  2. LPOP : 从左侧取出
  3. RPUSH : 从右侧插入
    在这里插入图片描述
    在这里插入图片描述
    4. RPOP : 从右侧取出在这里插入图片描述5. LRANGE KEY STAR END : 取出一定范围的数据
    6. BLPOP BRPOP : 在取元素时,若没有指定元素,等待指定时间,不是直接返回 nil —— 阻塞式获取
    在这里插入图片描述

利用 List 结构模拟栈、队列、阻塞队列

1) List 模拟栈 —— 先进先出 —— 入口出口在一起
2) List 模拟队列 —— 先进后出 —— 入口出口不在一起
3)阻塞队列 —— 队列:入口出口不同 + BLPOP / BRPOP




2.5 Set 类型

2.5.1 基础概念

Redis 中 Set 结构与 Java 中 HashSet 类似,其具有 HashSet 的特点:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集 等—— 与 HashSet 不同的
2.5.2 操作命令
  1. SADD : 添加一个或多个元素
    在这里插入图片描述

  2. SREM : 移除指定元素
    在这里插入图片描述

  3. SCARD : 返回 set 中元素个数
    在这里插入图片描述

  4. SISMEMBER KEY MEMBER : 判断某个成员是否存在
    在这里插入图片描述

  5. MEMBERS : 返回所有成员
    在这里插入图片描述

  6. SINTER key1 key2: 返回两个集合的交集
    在这里插入图片描述在这里插入图片描述

  7. SDIFF key1 key2 : 返回两个集合的差集
    在这里插入图片描述

  8. SUNION key1 key2 : 返回两个集合的并集
    在这里插入图片描述




2.6 SortedSet 类型

2.6.1 基础概念

Redis 中的 SortedSet 是一个可排序的 set 集合,与 Java 中的 TreeSet 有点类似,但是底层数据结构差别很大。SortedSet 中的每个元素都带有一个 score 属性,可以基于 score 属性对元素排序,它的底层实现是一个跳表 ( SkipList )加 hash 表。其具有以下特性:

  • 可排序
  • 元素不可以重复
  • 查询速度快

常用场景: 常用来实现 排行榜 功能

2.6.2 操作命令
  1. ZADD : 添加元素到指定 key 的 SortedSet
    在这里插入图片描述
    在这里插入图片描述

  2. ZREM : 删除元素
    在这里插入图片描述

  3. ZSCORE : 统计指定元素的分数值
    在这里插入图片描述

  4. ZRANK : 得到某个元素按 score 排序的排名 ( 默认从 0 开始 )
    在这里插入图片描述
    在这里插入图片描述

  5. ZCARD: 得到指定集合中元素个数
    在这里插入图片描述

  6. ZCOUNT KEY MIN MAX : 得到指定范围的元素个数
    在这里插入图片描述

  7. ZINCRBY : 对某个元素按指定值自增
    在这里插入图片描述

  8. ZRANGE KEY MIN MAX : 得到某个范围内的元素值
    在这里插入图片描述

  9. ZRANGEBYSCORE KET MIN MAX : 获取按照 score 排序后,指定 score 范围的元素
    在这里插入图片描述

  10. ZDIFF ZINTER ZUNION : 交集 并集 差集操作

    其默认排序为升序,在对所有命令 Z 后加 REV 就变为降序查询,示例如下:

    在这里插入图片描述

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

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

相关文章

锐捷MPLS跨域方案A、B实验配置

目录 MPLS域内配置 MPLS域1配置 MPLS域2配置 域间方式A配置 域间方式B配置 MPLS隧道——跨域解决方案A、B讲解_静下心来敲木鱼的博客-CSDN博客_跨域a方案https://blog.csdn.net/m0_49864110/article/details/127601807?spm1001.2014.3001.5501 MPLS域内配置 MPLS域内配置…

同态加密库Seal库的安装(win11+VS2022)

先说一下,seal库是微软开发的同态加密库,目前支持三种算法bfv,bgv和ckks。提供的语言版本是C艹和C#。 工具准备 这是github上提供的要求。 要准备的东西有 vs2022(社区版就行了,网上一堆教程)&#xff0c…

使用 Python 和 Matplotlib下载美股数据

介绍: 提示:例如 这是关于使用机器学习创建交易策略的系列文章中的第一篇。关于机器学习在交易中的实际应用,我主要参考的是 Marco Lopez de Prado 的金融机器学习进展。 尽管在人工智能方面有多年经验,但我从未将其应用于交易…

Spring Boot中@Import三种使用方式

Import是一个非常有用的注解,它的长处在于你可以通过配置来控制是否注入该Bean,也可以通过条件来控制注入哪些Bean到Spring容器中。 比如我们熟悉的:EnableAsync 、EnableCaching、EnableScheduling等等统一采用的都是借助Import注解来实现的…

TMD,JVM类加载原来是这样的!!!!

接上篇:https://boxuegu.blog.csdn.net/article/details/128000217 通过字节码,我们了解了class文件的结构 通过运行数据区,我们了解了jvm内部的内存划分及结构 接下来,让我们看看,字节码怎么进入jvm的内存空间&…

电脑硬盘分区软件哪个好用,无损分区软件哪个好

为了合理地利用磁盘空间,会进行磁盘分区的操作。由于磁盘分区涉及到计算机相关的操作知识,很多的用户都不会。所以,只能借助于专业的磁盘分区工具,那么,电脑硬盘分区软件哪个好用?在本文中,易我…

走进常熟东南相互电子,看AI如何深入产业让工厂更智能

苏州常熟一家4万多平方米的生产车间内,一块块指甲盖大小的PCB电路板,在装有人工智能算法模型的的摄像头下,快速精准地完成外观检测,让头发丝大小的瑕疵无处可藏。 成立于2006年的东南相互电子,是一家集半导体与元器件…

ActiveMQ 反序列化漏洞(CVE-2015-5254)特征分析

介绍 Apache ActiveMQ是美国阿帕奇(Apache)软件基金会所研发的一套开源的消息中间件,它支持Java消息服务、集群、Spring Framework等。 Apache ActiveMQ 5.13.0之前5.x版本中存在安全漏洞,该漏洞源于程序没有限制可在代理中序列…

Flutter高仿微信-第37篇-单聊-红包

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 详情请参考 Flutter高仿微信-第29篇-单聊 , 这里只是提取红包功能的…

第二章:Pythonocc官方demo 案例47(获取物体的最优的包容体)

源代码: #!/usr/bin/env python ## ##This file is part of pythonOCC. ## ##pythonOCC is free software: you can redistribute it and/or modify ##it under the terms of the GNU Lesser General Public License as published by ##the Free Software Foundati…

Hadoop笔记-02 安装

文章目录1 VBOX安装CentOS71.1 安装VBOX软件1.2 下载CentOS7镜像文件1.3 初始化VBOX虚拟盘1.4 CentOS7网络配置1.5 CentOS7 yum源配置1.6 CentOS7 一般配置1.6.1关闭防火墙1.6.2 修改hostname1.6.3 配置DNS绑定1.6.4 关闭selinux2 JDK等基础安装配置2.1 安装JDK前检查2.2 安装t…

《Happy Birthday》游戏开发记录(送给朋友的小礼物)

游戏开发的学习记录⑦ 项目:Happy Birthday (一个小小小游戏,基于unity给朋友做的一个生日小礼物🎁,之前都是礼物加信💌,今年想用自己的技能,把信的内容以另一种方式送给她。但在做…

STM32实战总结:HAL之modbus

什么是modbus? Modbus是一种串行通信协议,是Modicon公司(现在的施耐德电气 Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De…

OsgEarth3基础3D图形实现

OsgEarth3基础3D图形实现主要难点Geometry能力姿态支持任意立方体 PolygonCube矩形立方体 Box圆锥体 Cone圆柱体 Cylinder四棱锥 Pyramid球体 Sphere源码示例ElementGeometry圆锥Cone这里尝试在通过OsgEarth提供的各种图形绘制方法,实现基础的3D图形。每个图形除了基…

推荐一个非常实用的程序员导航网站,码农必备!

这是一个非常好用的程序员导航网站,拥有该网站,就拥有一站式导航,再也不用为找网址而发愁了! 先直接上网址:https://hao.panziye.com/ 现在来说说为什么推荐该程序员导航网站! 1、支持自定义导航网址 该…

pytorch的安装教程

1. 官网 pytorch.org 哎呀呀呀,这是嘛呀哪里有download的按钮啊 别急 ,往下拉就ok了哈哈 得看你自己电脑的配置了,自己选就行 、、注意哦 我们得复制一条指令 、 有anaconda的吧 在自己想要的环境里面 黏贴就行 有了 pytorch 可以干嘛呢…

Electron:BrowserView使用方法

我们知道,使用BrowserWindow来创建一个新的窗口,那么如果想在窗口中战胜斯更多的web内容,比如嵌入其他网站的内容,那就使用BrowserView了。 BrowserView的位置是相对于父窗口,比如: 代码如下:…

python项目使用pyinstaller打包

一、安装pyinstaller 打包要使用pyinstaller,使用pip来安装一下这个第三方库,打开命令行输入pip install pyinstaller 二、打包含有多个文件的python项目 1、首先打开电脑的cmd命令行,并切换到项目的根目录 项目路径输入cmd回车,可直接打开含有项目路径的cmd窗口 2、…

【推荐系统】行列式点过程(DPP)算法推导

一、背景 推荐系统主要解决用户和物品之间的相关性,以及推荐列表的多样性。相关性主要通过用户兴趣和物品之间的匹配程度来衡量,希望把用户感兴趣的物品推荐给用户,可以通过CTR预估模型来构建。多样性的衡量没有那么直观,一种方法…

std::unique_ptr(基础和仿写)

目录 一、C参考手册说明 1、解释注释 2、 参考代码 二、对std::unique_ptr分析 1、创建一个unique_ptr 2、无法进行复制构造和赋值操作 3、可以进行移动赋值 4.可以返回unique——ptr 5、管理动态数组 6、在容器中保存指针 三、对std::unique_ptr设计 1、对于的那个…