【Redis】1、学习 Redis 的五大基本数据类型【String、Hash、List、Set、SortedSet】

news2024/9/21 22:38:39

目录

  • 一、NoSQL 和 SQL 区别
  • 二、认识 Redis
  • 三、Redis 的数据结构介绍
  • 四、Redis 通用命令
  • 五、String 类型
  • 六、key 的格式
  • 七、Hash(散列)类型
  • 八、List 类型
  • 九、Set 类型
  • 十、SortedSet 类型(可排序)

一、NoSQL 和 SQL 区别

在这里插入图片描述

在这里插入图片描述

二、认识 Redis

🍀 Redis 诞生于2009年,全称是 Remote Dictionary Server,远程字典服务器,是一个基于 内存的键值型 NoSQL 数据库

🍀 键值(key-value)型,value 支持多种不同数据结构,功能丰富
🍀 单线程,每个命令具备原子性
🍀 低延迟,速度快(基于内存、IO 多路复用、良好的编码)
🍀支持数据持久化
🍀 支持主从集群、分片集群
🍀支持多语言客户端

在这里插入图片描述

三、Redis 的数据结构介绍

🍀 Redis 是一种 key-value 类型的数据库
🍀 key 一般是 String 类型
🍀 value 的类型多种多样(如下图所示)

在这里插入图片描述

Redis 命令官网: https://redis.io/commands

四、Redis 通用命令

🍀 通用命令是不分数据类型的,各种数据类型都可以使用的命令
🌼 KEYS:查看符合模板的所有 key
🌼 DEL:删除一个指定的 key
🌼 EXISTS:判断 key 是否存在

🌼 EXPIRE:给一个 key 设置有效期(过期时间)有效期到期时该 key 会被自动删除
🌼 TTL:查看一个 key 的剩余有效时间

  • -1:永不过期
  • -2:已经过期

可通过 help [command] 命令查看某个命令的具体用法
在这里插入图片描述

五、String 类型

🍃 String 类型(字符串类型)是 Redis 中最简单的存储类型
🍃 value 是字符串
🍃 根据字符串的格式不同,可分为 3 类(String、int、float)
String:普通字符串
int:整数类型(可做自增、自减操作)
float:浮点类型(可做自增、自减操作)

🍃 不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同
🍃 字符串类型的最大空间不能超过 512M

在这里插入图片描述


常见命令有:
🌺 SET:添加或修改(如果键值对已存在的话)一个 String 类型的键值对
🌺 GET:根据 key 获取 String 类型的 value
🌺 MSET:批量添加多个 String 类型的键值对
🌺 MGET:根据多个 key 获取多个 String 类型的 value
🌺 INCR:让一个整型的 key 自增 1
🌺 INCRBY:让一个整型的 key 自增指定步长 incrby num 2 【让 num 值自增 2】
🌺 INCRBYFLOAT:让一个浮点类型的数字自增指定步长

🌺 SETNX:添加一个 String 类型的键值对,前提是这个 key 不存在,否则不执行【添加】
🌺 SETEX:添加一个 String 类型的键值对,并且指定有效期

在这里插入图片描述

六、key 的格式

🌱 Redis 的 key 允许用多个单词形成层级结构
🌱 多个单词之间用【:】分隔

在这里插入图片描述

🌱 该格式并非固定,可根据自己的需求删除或添加词条

例如项目名称叫【crm】,有 user 和 product 两种不同类型的数据。则可以如下所示定义 key:
① user 相关的 key:crm:user:1
② product 相关的 key:crm:product:1


🌱 如果 Value 是一个 Java 对象。例如一个 User 对象,则可以将对象序列化为 JSON 字符串后存储:

在这里插入图片描述

在这里插入图片描述

七、Hash(散列)类型

💚 Hash 类型(也叫散列)
💚 value 是一个无序字典 【类似 Java 中的 HashMap

💚 Hash 类型可以将对象中的每个字段独立存储,可针对单个字段做增删改查

在这里插入图片描述


Hash 的常见命令有:
🌱HSET key field value:添加或修改 Hash 类型 key 的 field 的值
🌱HGET key field:获取一个 Hash 类型 key 的 field 的值
🌱HMSET:批量添加多个 Hash 类型 keyfield 的值
🌱HMGET:批量获取多个 Hash 类型keyfield的值
🌱HGETALL:获取一个 Hash 类型的key 中的所有的 field 和 value
🌱HKEYS:获取一个 Hash 类型的key 中的所有的 field
🌱HVALS:获取一个 Hash 类型的key 中的所有的 value
🌱HINCRBY: 让一个 Hash 类型key 的字段值(field)自增并指定步长
🌱HSETNX:添加一个 Hash 类型的keyfield值,前提是这个 field 不存在,否则不执行

在这里插入图片描述

八、List 类型

🌼 Redis 中的 List 类型与 Java 中的 LinkedList 类似
🌼 可看做是一个双向链表结构(既可以支持正向检索和反向检索)

🌼 特点:

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

🌼 常用来存储有序数据(如:朋友圈点赞列表,评论列表)

在这里插入图片描述


🍃 LPUSH key element ...:向列表左侧插入一个或多个元素
🍃 LPOP key count:移除并返回列表左侧的第一个元素,没有则返回 nil(count:取的个数)
🍃 RPUSH key element ... :向列表右侧插入一个或多个元素
🍃 RPOP key count:移除并返回列表右侧的第一个元素(count:取的个数)
🍃 LRANGE key star end:返回一段角标范围内的所有元素
🍃 BLPOPBRPOP:与 LPOPRPOP 类似(区别:当没有元素时,会等待指定时间,而不是直接返回 nil

在这里插入图片描述


❓ 如何利用 List 结构模拟一个?
入口和出口在同一边【后进先出】

❓ 如何利用 List 结构模拟一个队列?
入口和出口在不同边【先进先出】

❓如何利用 List 结构模拟一个阻塞队列?
① 入口和出口在不同边
② 出队时采用 BLPOPBRPOP

九、Set 类型

🍀 Redis 的 Set 结构与 Java 中的 HashSet 类似,可看做是一个 value 为 null 的 HashMap
🍀 因为也是一个 Hash 表,所以具备与 HashSet 类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持交集、并集、差集等功能

🌱 SADD key member ...:向 set 中添加一个或多个元素
🌱 SREM key member ...: 移除 set 中的指定元素
🌱 SCARD key: 返回 set 中元素的个数
🌱 SISMEMBER key member:判断一个元素是否存在于 set 中
🌱 SMEMBERS key:获取 set 中的所有元素

🌱 SINTER key1 key2 ...:求 key1 与 key2 的交集(key1 和 key2 都有的元素)
🌱 SDIFF key1 key2 ...:求 key1 与 key2 的差集
🌱 SUNION key1 key2 ...:求 key1 和 key2 的并集


将下列数据用 Redis 的 Set 集合来存储:
🍃 张三的好友有:李四、王五、赵六
🍃 李四的好友有:王五、麻子、二狗

在这里插入图片描述

利用 Set 的命令实现下列功能:
🍃 计算张三的好友有几个
🍃 计算张三和李四有哪些共同好友
🍃 查询哪些人是张三的好友却不是李四的好友
🍃 查询张三和李四的好友总共有哪些人
🍃 判断李四是否是张三的好友
🍃 判断张三是否是李四的好友
🍃 将李四从张三的好友列表中移除

十、SortedSet 类型(可排序)

☃️ Redis 的 SortedSet 是一个可排序的 set 集合
☃️ 与 Java 中的 TreeSet 有些类似
☃️ 但底层数据结构却差别很大
☃️ SortedSet 中的每一个元素都带有一个 score 属性,可以基于 score 属性对元素排序
☃️ 底层实现是跳表(SkipList)加 Hash表

☃️ SortedSet 具备下列特性:

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

☃️ 因为 SortedSet 的可排序特性,经常被用来实现排行榜功能


🌼 ZADD key score member:添加一个或多个元素(若已存在,则更新其 score 值)
🌼 ZREM key member:删除指定元素
🌼 ZSCORE key member : 获取指定元素的 score 值
🌼 ZRANK key member:获取指定元素的排名
🌼 ZCARD key:获取 key 中的元素个数
🌼 ZCOUNT key min max:统计 score 值在给定范围内的所有元素的个数
🌼 ZINCRBY key increment member:让指定元素自增,步长为指定的 increment
🌼 ZRANGE key min max:按照 score 排序后,获取指定排名范围内的元素
🌼 ZRANGEBYSCORE key min max:按照score 排序后,获取指定 score 范围内的元素
🌼ZDIFF、ZINTER、ZUNION:求差集、交集、并集

🌼 注意:所有排名默认是升序,如果要降序则在命令的【Z】后面添加 REV


将班级的下列学生得分存入 Redis 的 SortedSet 中:
Jack 85, Lucy 89, Rose 82, Tom 95, Jerry 78, Amy 92, Miles 76
并实现下列功能:
❓ 删除 Tom 同学
❓ 获取 Amy 同学的分数
❓ 获取 Rose 同学的排名
❓ 查询 80 分以下有几个学生
❓ 给 Amy 同学加2分
❓ 查出成绩前 3 名的同学
❓ 查出成绩 80 分以下的所有同学

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

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

相关文章

macOS Sonoma编译OpenCV源码输出IOS平台库

1.macOS下载并编译OpenCV源码: 克隆源码: 主仓: git clone https://github.com/opencv/opencv.git 扩展仓: git clone https://github.com/opencv/opencv_contrib.git 编译xcode源码需要CMake与XCode命令行工具 确认已安装CMake 确认已安装XCode 安装xcode command l…

UNZIP

目录 搭建环境 做题开始 通过ln直接创建 通过mkdir 后进行ln 搭建环境 这次是在自己的靶机环境里面搭建 cd /var/www/html index.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</ti…

罗技k380键盘教程

在智能手机和平板电脑上享受台式电脑般舒适便捷的输入体验。罗技蓝牙™ 多设备键盘 K380 是一款小巧独特的键盘&#xff0c;让您在家中任何地方都能使用个人设备进行沟通和创作。 借助便捷的易于切换™ 按钮&#xff0c;可以通过蓝牙™ 无线技术同时连接最多三台设备&#xff…

【LeetCode】动态规划 刷题训练(一)

文章目录 面试题 08.01. 三步问题题目解析状态转移方程完整代码 746. 使用最小花费爬楼梯题目解析状态转移方程完整代码 91. 解码方法题目解析状态转移方程情况1&#xff1a;让i位置的数&#xff0c;单独去解码情况2&#xff1a;让i位置的数 和i-1位置的数 结合 一起去解码 完整…

安全合规进入场景细分时代

2022年6月1日&#xff0c;《中华人民共和国网络安全法》&#xff08;以下简称《网络安全法》&#xff09;正式实施迎来5周年。 作为国家实施网络空间管辖的第一部法律&#xff0c;《网络安全法》标志着我国网络安全工作有了基础性的法律框架&#xff0c;意味着建设网络强国的制…

chatgpt赋能python:Python清空:如何在Python中使用清空来删除变量和数据结构中的所有元素

Python清空&#xff1a;如何在Python中使用清空来删除变量和数据结构中的所有元素 在Python编程中&#xff0c;我们常常需要删除变量和数据结构中的元素。Python提供了多种方法来实现这一点&#xff0c;其中最常用的方法之一就是使用清空功能。在本文中&#xff0c;我们将介绍…

【期末总复习】机器学习(公式推导与代码实现)鲁伟

【第一章】机器学习预备知识 1、了解机器学习的发展简史 2、复述出训练集、验证集和测试集的作用 训练集&#xff08;Training set&#xff09; 作用是用来拟合模型&#xff0c;通过设置分类器的参数&#xff0c;训练分类模型。后续结合验证集作用时&#xff0c;会选出同一参…

chatgpt赋能python:Python教程:求反向位置的字母

Python教程&#xff1a;求反向位置的字母 在这篇文章中&#xff0c;我们将介绍如何使用Python编程语言来找到给定字符串中的反向位置的字母。这是一个有趣的编程问题&#xff0c;特别是对于那些喜欢解决有趣问题的人来说&#xff0c;同时本文也将从SEO的角度来讲解如何优化文本…

LNMP搭建

一、编译安装nginx1.1 关闭防火墙&#xff0c;将安装nginx所需软件包传到/opt目录下并解压1.2 安装依赖包1.3 创建运行用户与组1.4 编译安装Nginx1.5 检查配置文件是否配置正确&#xff0c;并启动nginx服务 二、安装 MySQL 服务2.1 安装Mysql环境依赖包2.2 创建运行用户2.3 编译…

前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件

前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件 &#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13148 效果图如下&#xff1a; # cc-defineCateList #### 使用方法 使用方法 <!-- data:商品列表数组…

C专家编程 —— 链接的思考

文章目录 编译器的作用动态链接和静态链接动态链接动态链接的优点 函数库链接的几个小秘密 编译器的作用 通常编译器被氛围六七个小的程序&#xff1a; C预处理器&#xff0c;得到main.i文件前端做语法语义分析&#xff0c;然后后端生成汇编的指令代码main.s文件优化器可以放…

Java-API简析_java.lang.SecurityManager类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131346082 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

【Python 基础篇】Python学生管理系统

文章目录 引言一、系统设计与功能分析二、系统设计与实现三、系统应用示例四、总结 引言 学生管理系统是一个常见的应用程序&#xff0c;它可以帮助学校、教育机构或教师管理学生的信息。本文将介绍如何使用面向对象编程思想&#xff0c;利用Python开发一个学生管理系统。系统…

源码编译 DolphinScheduler 1.3.9 海豚调度,修改Hadoop、Hive组件版本兼容

大前提&#xff1a; maven3 jdk8 环境 maven 私服换成国内镜像&#xff0c;推荐阿里云 maven 镜像 maven-3.6.3\conf\settings.xml <mirrors><mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name&g…

Android 13(T) - binder阅读(1)- binder driver

1 总览 想要使用binder完成进程间通信&#xff08;IPC&#xff09;或者完成远程过程调用&#xff08;RPC&#xff09;&#xff0c;那么我们需要有如下三个要素&#xff1a; 源&#xff1a;即调用者&#xff08;Client&#xff09;目的&#xff1a;即服务提供者&#xff08;Se…

win10 64位系统下载、安装nodejs(图文教程)

windows电脑下载、安装nodejs是很容易的&#xff0c;参考下面的图文教程&#xff0c;很快就能搞定下载安装. 1&#xff0c;下载nodejs 下载地址&#xff1a;https://nodejs.org/en/download/ 2&#xff0c;安装nodejs 点击安装包&#xff0c;一路下一步 3&#xff0c;验证…

设计模式—责任链模式

一、待解决问题&#xff1a; 减少代码中 if else 语句&#xff0c;降低代码圈复杂度或深度&#xff0c;增强可读性。 1、需求背景&#xff1a; 采购订单创建&#xff0c;需要验证采购员、物料、供应商、供应商的银行账号等信息。如采购员权限到期、或供应商失效等问题&#xff…

python机器学习——机器学习相关概念 特征工程

目录 机器学习特征工程1.特征抽取2.特征处理2.1 归一化&#xff1a;传统精确小数据2.2 标准化&#xff1a;大多数情况 3.数据降维3.1特征选择3.2主成分分析PCA 案例&#xff1a;超市订单分析 机器学习 监督学习&#xff1a;输入数据有特征有标签&#xff0c;即有标准答案 分类&…

chatgpt赋能python:Python求累加求和指南

Python求累加求和指南 Python是一种简单而强大的编程语言&#xff0c;从事编程工作的人大多都对它有一定的了解。它具有开发复杂应用程序的强大功能&#xff0c;同时也可以被用作数据处理和分析等用途。其中一个最常见的任务就是累加求和&#xff0c;今天我们将介绍如何在Pyth…

Redis 集合相关命令

Redis 支持多种数据结构&#xff0c;比如 字符串、列表、集合、有序集合 和 哈希 等数据结构。本次我整理了关于 集合 相关的命令&#xff0c;也就是关于 Sets 相关的命令&#xff0c;如下图。 上图中用红色圈中的部分&#xff0c;就是关于 集合 相关的命令。如果想要在 Redis …