Redis从入门到精通(二)Redis的数据类型和常见命令介绍

news2024/11/25 2:33:48

文章目录

  • 前言
  • 第2章 Redis数据类型和常见命令
    • 2.1 key结构
    • 2.2 Redis通用命令
    • 2.3 String类型及其常用命令
    • 2.4 Hash类型及其常用命令
    • 2.5 List类型
    • 2.5 Set类型
    • 2.6 SortedSet类型
    • 2.7 小结

前言

在上一节【Redis从入门到精通(一)Redis安装与启动、Redis客户端的使用】中,学习了Redis的基本特点与优势,并比较了关系型数据库与非关系型数据库的区别;然后在Linux系统上安装了最新版本的Redis,并使用多种方式成功启动;最后学习了Redis的三种客户端,即命令行客户端、图形化桌面客户端,以及编程客户端。

这一节学习Redis的五种基本数据类型及其常见命令。

第2章 Redis数据类型和常见命令

Redis是典型的key-value对数据库,key一般是字符串,value则可以是多种不同的数据类型。 例如:

在 Redis官网(https://redis.io/commands) 已经将操作不同数据类型的命令做了分组,每一个分组里面对每一个命令都进行了解释并举例子,不得不说真是贴心:

不同类型的命令称为一个group(组),可以在命令行客户端通过help命令来查看各种不同的命令:

接下来,就来学习一下常见的五种基本数据类型的相关命令。

2.1 key结构

Redis没有类似MySQL中的Table的概念,那该如何区分不同类型的key呢?

例如,有一个用户的id是1,有一个订单的id恰好也是1,如果此时都使用id作为key,那就会产生冲突。要解决该问题,可以通过给key添加前缀加以区分。

Redis的key允许有多个单词形成层级结构,多个单词之间使用:隔开。

假设有个项目名称叫jingdong,则用户信息和订单信息的key可以表示为:

  • 用户信息的key:jingdong:user:1
  • 订单信息的key:jingdong:order:1

这样一来,就可以把不同类型的数据区分开了,从而避免了key的冲突问题。例如:

并且,在图形化桌面客户端中,还会以相同前缀作为层级结构,让数据看起来层次分明:

2.2 Redis通用命令

Redis通用命令是大多数数据类型都可以使用的命令,常见的有:

  • KEYS pattern:查询符合模板的所有key
  • DEL key [key ...]:删除一个或多个key,如果key本身不存在,则会忽略
  • EXISTS key [key ...]:判断key是否存在
  • EXPIRE key seconds:给一个key设置有效期,到期后将会自动删除
  • TTL key:查询一个key的剩余有效期

通过help [command]命令可以查看一个命令的具体用法,例如:

2.3 String类型及其常用命令

String类型,也就是字符串类型,是Redis中最简单的存储类型,其最大空间不能超过512MB。

根据字符串的格式不同,又可以分为3类:

  • string:普通字符串
  • int:整数类型,可以做自增、自减操作
  • float:浮点类型,可以做自增、自减操作

但不管是哪种格式,底层都是以字节数组的形式存储,只是编码方式不同。

String类型的常见命令有:

  • SET key value:添加一个或者修改一个已经存在的String类型的键值对
  • GET key:根据key获取String类型的value
  • MSET key value [key value ...]:批量添加多个String类型的键值对
  • MGET key [key ...]:根据多个key获取多个String类型的value
  • INCR key:根据key让一个整型的value自增1
  • INCRBY key increment:根据key让一个整型的value自增increment指定的步长
  • INCRBYFLOAT key increment:根据key让一个浮点型的value自增increment指定的步长
  • SETEX key seconds value:添加一个String类型的键值对,并指定有效期
  • SETNX key value:添加一个String类型的键值对,前提是这个key不存在,否则不执行

如果一个Java对象想以String类型进行存储,可以将其序列化为JSON字符串后再存入Redis:

127.0.0.1:6379> set jingdong:user:2 "{\"name\":\"lisi\",\"age\":28}"
OK
127.0.0.1:6379> get jingdong:user:2
"{\"name\":\"lisi\",\"age\":28}"

2.4 Hash类型及其常用命令

Hash类型,也叫散列,其value值是一个无序字典,类似于Java中的HashMap对象。

当一个Java对象以序列化后的JSON字符串存入Redis时,如果要修改该对象中的某个字段,就必须将整个JSON字符串取出,反序列化后修改字段值,再将其序列化为JSON字符串,再一次存入Redis。这就非常地不方便了。

而Hash结构可以将对象中的每个字段独立存储,意味着可以针对单个字段做CRUD。

Hash类型的常见命令有:

  • HSET key field value [field value ...]:添加(key或field存在时为修改)一个或多个Hash类型的数据
  • HGET key field:根据key和field值获取对应的value值
  • HMSET key field value [field value ...]:批量添加多个Hash类型数据
  • HMGET key field [field ...]:获取某个key下多个field值对应的value值
  • HGETALL key:根据key获取全部field及其对应的value值
  • HKEYS key:根据key获取全部field值
  • HINCRBY key field increment:根据key和field让一个整型的value值自增increment指定的步长
  • HSETNX key field value:添加一个Hash类型数据,但field值必须不存在,否则不添加

如上面的例子:

127.0.0.1:6379> hset jingdong:user:1 name Jack age 21
(integer) 2
127.0.0.1:6379> hset jingdong:user:2 name Rose age 18
(integer) 2
127.0.0.1:6379> hmget jingdong:user:1 name age
1) "Jack"
2) "21"
127.0.0.1:6379> hmget jingdong:user:2 name age
1) "Rose"
2) "18"

2.5 List类型

Redis中的List类型与Java中的LinkedList类似,可以看作一个双向链表结构,既可以支持正向检索,也可以支持反向检索。

List类型的特点是:有序、元素可重复、插入和删除快、查询速度较慢。

List类型的常见命令有:

  • LPUSH key element [element ...]:向列表左侧插入一个或多个元素
  • LPOP key [count]:移除并返回列表左侧的的一个或count个元素
  • RPUSH key element [element ...]:向列表右侧插入一个或多个元素
  • RPOP key [count]:移除并返回列表右侧的的一个或count个元素
  • LRANGE key start stop:返回指定范围内(下标为start到stop)的所有元素

2.5 Set类型

Redis的Set类型与Java中的HashSet类似,可以看作是一个value值为null的HashMap。

Set类型的特点是:无序、元素不可重复、查询速度较快、支持交集、并集、差集等功能。

Set类型的常见命令有:

  • SADD key member [member ...]:向Set集合添加一个或多个元素
  • SREM key member [member ...]:移除Set集合中的指定元素
  • SCARD key:返回Set集合的元素个数
  • SISMEMBER key member:判断一个元素是否存在于Set集合中
  • SMEMBERS key:获取Set集合中的所有元素
  • SINTER key [key ...]:求多个Set集合之间的交集

2.6 SortedSet类型

Redis的SortedSet类型是一个可排序的Set集合,与Java中的TreeSet类型。

SortedSet类型的特点是:可排序、元素不可重复、查询速度快。

SortedSet类型的常见命令有:

  • ZADD key score member [score member ...]:向SortedSet集合添加一个或多个元素,如果member值已经存在,则更新其score值
  • ZREM key member [member ...]:删除SortedSet集合中的指定元素
  • ZSCORE key member:获取SortedSet集合中的指定元素的score值
  • ZRANK key member [WITHSCORE]:获取SortedSet集合中的指定元素的排名(升序排名)
  • ZREVRANK key member [WITHSCORE]:获取SortedSet集合中的指定元素的排名(降序排名)
  • ZCARD key:获取SortedSet集合的元素个数
  • ZCOUNT key min max:统计score值在指定范围内的元素个数
  • ZINCRBY key increment member:让SortedSet集合中的指定元素的score值自增,步长为increment
  • ZRANGE key start stop:按照score值排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score值排序后,获取指定score范围内的元素
  • ZDIFF、ZINTER、ZUNION:求差集、交集、并集

2.7 小结

第2章到此就学习完毕了,本章的主题是:Redis数据类型和常见命令。回顾一下本章的学习的内容:

(二)String、Hash、List、Set、SortedSet类型及其常用命令

更多内容请查阅分类专栏:Redis从入门到精通

第3章主要学习:Redis的Java客户端。包括:

  • Jedis客户端;
  • SpringDataRedis客户端。

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

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

相关文章

【智能算法】猎人猎物算法(HPO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年,Naruei等人受到自然界动物猎食过程启发,提出了猎人猎物算法(Hunter-Prey Optimization, HPO)。 2.算法原理 2.1算法思想 HPO模拟…

国产AI大模型推荐(一)

文心一言 主要功能: 各种类型的问答、各种文本创作、推理与数学计算、写代码、聊天交流、图片生成等。 链接:文心一言 讯飞星火 特点: 内容生成能力:我可以进行多风格多任务长文本生成,例如邮件、文案、公文、作文、对…

剑指Offer题目笔记23(归并排序)

面试题77: 问题: ​ 输入一个链表的头节点,将该链表排序。 解决方案: ​ 使用归并排序。将链表分为两个子链表,在对两个子链表排序后再将它们合并为一个排序的链表。 源代码: /*** Definition for sin…

C语言:动态内存管理(二)

目录 前言 1.3 realloc​编辑 3、常见动态内存管理错误 3.1 对空指针的解引用操作 3.2 对动态开辟的空间进行越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态内存开辟的一部分 3.5 对同一块空间的多次释放 3.6 动态内存开辟之后忘记释放 总结 前…

前端三剑客 —— HTML (下)

目录 HTML 多媒体标签 Img*** a标签*** 第一种用法:超链接 第二种用法:锚点 audio标签 video标签 表格标签 带标题的表格 跨行跨列标签 表格嵌套 列表标签 ul --- 它是无序列表标签 ol --- 它是有序列表 dl --- 它是数据列表 表单标签***…

2024.3.30学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p295-p314 super关键字 super代表父类的引用,用于访问父类的属性、方法、构造器 super细节和语法 访问父类的属性,但不能访问父类的private属性 super.属性名 访问父类的…

暴力破解pdf文档密码

首先安装pdfcrack工具包 apt install pdfcrack 默认密码字典存储在/usr/share/wordlists里,是gz文件,将它解压并copy到pdf目录 然后使用pdfcrack破解 密码在最后一行user-password的单引号里

最优算法100例之17- 环形连续子数组的最大和

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 给定一个长度为 nn 的环形整数数组,请你求出该数组的 非空 连续子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开…

Linux重点思考(下)--shell脚本使用以及内核开发

Linux重点思考(下)--shell脚本使用和组合拳 shell脚本的基础算法shell脚本写123...n的值,说思路Shell 脚本用于执行服务器性能测试的死循环Shell 脚本备份和定时清理垃圾文件 shell脚本的内核开发正向映射反向映射 shell脚本的基础算法 shell脚本写123……

解决MySQL幻读?可重复读隔离级别背后的工作原理

什么是当前读和快照读 当前读:又称为 "锁定读",它会读取记录的最新版本(也就是最新的提交结果),并对读取到的数据加锁,其它事务不能修改这些数据,直到当前事务提交或回滚。"sele…

linux服务器安装mysql8

1.下载MYSQL 近几天在linux服务器已安装过2次mysql8,亲测有效,没有遇到任何问题,文档已写的很清楚,按步骤来即可。如果按文档有遇到要使用yum命令的话,需要服务器开通外网。 1.1官网下载 进入官网下拉到最后&#x…

【查看显卡信息】如何查看nvidia-smi命令后的显卡信息

【查看显卡信息】如何查看nvidia-smi命令后的显卡信息 【先赞后看养成习惯】求点赞关注收藏!!!😊 一般我们用nvidia-smi进行查看当前电脑或者服务器的显卡信息,出来一大堆内容,很多小白根本看不懂&#xf…

elementui 导航菜单栏和Breadcrumb 面包屑关联

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 文章目录 系列文章目录前言一、elementui 导航菜单栏和Breadcrumb 面包屑怎么关联?二、实现效果三、实现步骤1.本项目演示布局2.添加面包屑2.实现breadcrumbName方法3.监听方法4.路由指配5.路由配置…

大数据设计为何要分层,行业常规设计会有几层数据

大数据设计通常采用分层结构的原因是为了提高数据管理的效率、降低系统复杂度、增强数据质量和可维护性。这种分层结构能够将数据按照不同的处理和应用需求进行分类和管理,从而更好地满足不同层次的数据处理和分析需求。行业常规设计中,数据通常按照以下…

R语言颜色细分

1.如何对R语言中两种颜色之间进行细分 2.代码&#xff1a; x <- colorRampPalette(c("#FC8D62","#FDEAE6"))(12) #打印向量值 # 按字典顺序排序颜色值 x_sorted <- sort(x,decreasing TRUE)# 打印排序后的颜色值 print(x_sorted)#展示颜色 scales:…

websocket 局域网 webrtc 一对一 视频通话的实例

基本介绍 使用websocket来 WebRTC 建立连接时的 数据的传递和交换。 WebRTC 建立连接时&#xff0c;通常需要按照以下顺序执行一些步骤&#xff1a; 1.创建本地 PeerConnection 对象&#xff1a;使用 RTCPeerConnection 构造函数创建本地的 PeerConnection 对象&#xff0c;该…

springboot企业级抽奖项目业务四 (缓存预热)

缓存预热 为什么要做预热: 当活动真正开始时&#xff0c;需要超高的并发访问活动相关信息 必须把必要的数据提前加载进redis 预热的策略: 在msg中写一个定时任务 每分钟扫描一遍card_game表 把(开始时间 > 当前时间)&& (开始时间 < 当前时间1分钟)的活动及相…

(八)Gateway服务网关

Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目&#xff0c;该项目是基于 Spring 5.0&#xff0c;Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关&#xff0c;它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。…

day01-SpringCloud01(Eureka、Ribbon、Nacos)

视频地址: SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务 学习资料地址: 百度网盘 提取码&#xff1a;1234 1. 认识微服务 1.1.单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#x…

WebCopilot:一款功能强大的子域名枚举和安全漏洞扫描工具

关于WebCopilot WebCopilot是一款功能强大的子域名枚举和安全漏洞扫描工具&#xff0c;该工具能够枚举目标域名下的子域名&#xff0c;并使用不同的开源工具检测目标存在的安全漏洞。 工具运行机制 WebCopilot首先会使用assetsfinder、submaster、subfinder、accumt、finddom…