当前位置: 首页 > news >正文

Redis学习笔记1【数据类型和常用命令】

Redis学习笔记


基础语法

1.数据类型
  1. String: 最基本的类型,可以存储任何数据,例如文本或数字。示例值为 hello world
  2. Hash: 用于存储键值对,适合存储对象或结构体。示例值为 {"name": "Jack", "age": 21}
  3. List: 有序的字符串列表,适用于队列等场景。示例值为 [A -> B -> C]
  4. Set: 不重复的元素集合,适用于需要唯一性的场景。示例值为 {A, B, C}
  5. SortedSet: 有序且唯一的元素集合,每个元素有一个对应的分数,用于排序。示例值为 {A: 1, B: 2, C: 3}
  6. GEO: 用于处理地理数据,比如位置的经纬度。示例值为 {A: (120.3, 30.5)}
  7. Bitmap: 用于存储位图,可以支持高效的位运算。示例值为 011011010110101011
  8. HyperLog: 一种用于基数估算的数据结构,节省空间。示例值为 011011010110101011

2.通用命令
  1. help @数据类型:得到相应数据类型会用到的命令.
  2. KEYS ***???:获取符合模糊匹配的所有关键字,"?“代表一个字符,”*"代表任意个字符。
  3. del [keyname] [keyname]....:删除key。
  4. EXISTS [keyname]:查询key是否存在。
  5. EXPIRE [keyname]:设置过期时间。
  6. TTL [keyname]:查看过期时间,-1表示永久有效,-2表示不存在这个key。

3.String类型
  1. SET [key] [value]: 添加或修改一个已有的String类型的键值对。
  2. GET [key]: 根据key获取String类型的value。
  3. MSET [key1 value1] [key2 value2] ...: 批量添加多个String类型的键值对。
  4. MGET [key1] [key2] ...: 根据多个key获取多个String类型的value。
  5. INCR [key]: 让一个整型的key自增1。
  6. INCRBY [key] [increment]: 让一个整型的key自增并指定步长,例如:INCRBY num 2让num值自增2。
  7. INCRBYFLOAT [key] [increment]: 让一个浮点类型的数字自增并指定步长。
  8. SETNX [key] [value]或者SET [key] [value] NX: 添加一个String类型的键值对,前提是这个key不存在,否则不执行。
  9. SETEX [key] [seconds] [value]或者SET [key] EX [value]: 添加一个String类型的键值对,并且指定有效期(单位:秒)。

4.key的层级结构

由于Redis中没有表这一结构,于是我们会需要key按照项目名:业务名:类型:主键id的方式命名,但并不固定,比如mysql里面的shopping库中的goods表的id为1的数据的key可以表示为shopping:goods:1,而这一个key对应的value可以是结构体(对象)序列化后的json字符串,这里值得一提的是,如果你用的RDM的redis图形化界面,这样的命名在图形化界面里面会以的形式出现,显示很清晰,但是Datagrip这类软件貌似并不支持这个功能。

5.Hash类型
key
├── field1: value1
├── field2: value2
└── field3: value3
...

哈希类型,它的value是一个无序字典,可以理解为key里面又存储了多个key的键值对,相较于上面json字符串形式存储数据有着一定的优势,那就是对json字符串中的单个数据进行修改很不方便,而hash类型则可以对单个字段进行CRUD。

常用命令:

  1. HSET [key] [key] [field1] [value1] [field2] [value2]...: 添加或修改 hash 类型 key 的 field 的值。注:hmset也行,不过已经弃用了.
  2. HGET [key] [field]: 获取一个 hash 类型 key 的 field 的值。
  3. HMGET [key] [field1] [field2] ...: 批量获取多个 hash 类型 key 的 field 的值。
  4. HGETALL [key]: 获取一个 hash 类型的 key 中的所有 field 和 value。
  5. HKEYS [key]: 获取一个 hash 类型的 key 中的所有 field。
  6. HVALS [key]: 获取一个 hash 类型的 key 中的所有 value。
  7. HINCRBY [key] [field] [increment]: 让一个 hash 类型 key 的指定 field 值增加并指定步长。
  8. HSETNX [key] [field] [value]: 添加一个 hash 类型 key 的 field 的值,前提是这个 field 不存在,否则不执行。

6.List类型

可以看作是一个双向队列结构

特征

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

常用命令

  1. LPUSH [key] [element] ...: 向列表左侧插入一个或多个元素。
  2. LPOP [key]: 移除并返回列表左侧的第一个元素,没有则返回 nil。
  3. RPUSH [key] [element] ...: 向列表右侧插入一个或多个元素。
  4. RPOP [key]: 移除并返回列表右侧的第一个元素。
  5. LRANGE [key] [start] [end]: 返回一段角标范围内的所有元素。
  6. BLPOP [key] [timeout]: 与 LPOP 类似,在没有元素时等待指定时间。
  7. BRPOP [key] [timeout]: 与 RPOP 类似,在没有元素时等待指定时间。

7.Set类型

相当于C++的 unordered_set 或者Java的HashSet,可以用于查看共同好友等。

特征

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

常用命令

  1. SADD [key] [member] ...: 向 set 中添加一个或多个元素。
  2. SREM [key] [member] ...: 移除 set 中的指定元素。
  3. SCARD [key]: 返回 set 中元素的个数。
  4. SISMEMBER [key] [member]: 判断一个元素是否存在于 set 中。
  5. SMEMBERS [key]: 获取 set 中的所有元素。
  6. SINTER [key1] [key2] ...: 求 key1 与 key2 的交集。
  7. SDIFF [key1] [key2] ...: 求 key1 与 key2 的差集。
  8. SUNION [key1] [key2] ...: 求 key1 和 key2 的并集。

8.SortedSet类型

可以理解为C++中的Map,可以用于排行榜系统

特征

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

常用命令

  • ZADD [key] [score] [member]: 添加一个或多个元素到 sorted set,如果已存在则更新其 score 值。
  • ZREM [key] [member]: 删除 sorted set 中的指定元素。
  • ZSCORE [key] [member]: 获取 sorted set 中指定元素的 score 值。
  • ZRANK [key] [member]: 获取 sorted set 中指定元素的排名。
  • ZCARD [key]: 获取 sorted set 中的元素个数。
  • ZCOUNT [key] [min] [max]: 统计 score 值在指定范围内的所有元素的个数。
  • ZINCRBY [key] [increment] [member]: 让 sorted set 中的指定元素自增,步长为指定的 increment 值。
  • ZRANGE [key] [min] [max]: 按照 score 升序排序,获取指定排名范围内的元素,在这里,查询的排名的范围为(min, max]
  • ZREVRANGE [key] [min] [max]: 按照 score 降序排序。
  • ZRANGEBYSCORE [key] [min] [max]: 按照 score 排序,获取指定 score 范围内的元素。
  • ZDIFFZINTERZUNION: 求差集、交集、并集。

结语

以上总结了关于redis的基本的数据结构和基本数据结构常用的有关命令,希望对你也会有帮助。

相关文章:

Redis学习笔记1【数据类型和常用命令】

Redis学习笔记 基础语法 1.数据类型 String: 最基本的类型,可以存储任何数据,例如文本或数字。示例值为 hello world。Hash: 用于存储键值对,适合存储对象或结构体。示例值为 {"name": "Jack", "age": 21}。…...

JavaWeb项目——查询角色列表到页面中——转发模式

一、知识点 1、req.getRequestDispatch与resp.sendRedirect跳转方式的比较 一、实现原理 1、req.getRequestDispatcher: 属于服务器端跳转,在服务器内部将请求转发给另一个资源(如另一个 Servlet 或 JSP 页面)。调用 getReques…...

feign调用跳过HTTPS的SSL证书校验配置详解

一、问题抛出 如果不配置跳过SSL证书校验,当Feign客户端尝试连接到一个使用自签名证书的服务器时,可能会抛出类似以下的异常: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building faile…...

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们,今天又来记录一下小程序的进展啦!真是太激动了,项目又迈出了重要的一步,231啦!感觉每一步的努力都在积累,功能逐渐完善,离最终上线的目标越来越近了。大家一直支持着这个项目&…...

SQL-leetcode—1084. 销售分析 III

1084. 销售分析 III 表: Product --------------------- | Column Name | Type | --------------------- | product_id | int | | product_name | varchar | | unit_price | int | --------------------- product_id 是该表的主键(具有唯一值的列&…...

Linux C\C++编程-文件位置指针与读写文件数据块

【图书推荐】《Linux C与C一线开发实践(第2版)》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践(第2版)(Linux技术丛书)》(朱文伟,李建英)【摘要 书评 试读】- 京东图书 Linu…...

Flask简介与安装以及实现一个糕点店的简单流程

目录 1. Flask简介 1.1 Flask的核心特点 1.2 Flask的基本结构 1.3 Flask的常见用法 1.3.1 创建Flask应用 1.3.2 路由和视图函数 1.3.3 动态URL参数 1.3.4 使用模板 1.4 Flask的优点 1.5 总结 2. Flask 环境创建 2.1 创建虚拟环境 2.2 激活虚拟环境 1.3 安装Flask…...

【自动化测试】—— Appium使用保姆教程

目录 一. 连接手机 1. 授权 2. 调试 3. 获取参数 二. 启动APP 1. 启动Appium服务 2. 启动Appium Inspector 3. 配置Appium Inspector 三. 功能说明 1. 主菜单功能 2. 快照视图菜单 3. 元素视图菜单 四. 常见问题 1. appPackage有多个设备时 一. 连接手机 1. 授权 首先将手机的开…...

西门子【Library of General Functions (LGF) for SIMATIC S7-1200 / S7-1500】

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 通用函数库 (LGF) 扩展了 TIA Portal 中用于 PLC 编程的 STEP 7 指令(数学函数、时间、计数器 等)。该库可以不受限制地使用,并包含 FIFO 、搜索功能、矩阵计算、 astro 计…...

IntelliJ IDEA 2023.3 中配置 Spring Boot 项目的热加载

IntelliJ IDEA 2023.3 中配置 Spring Boot 项目的热加载 在 IntelliJ IDEA 2023.3 中配置 Spring Boot 项目的热加载,可以让你在不重启应用的情况下看到代码修改的效果。以下是详细的配置步骤: 添加 spring-boot-devtools 依赖 在 pom.xml 文件中添加 …...

Python----Python高级(正则表达式:语法规则,re库)

一、正则表达式 1.1、概念 正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、 regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母&#xff0…...

通过Ukey或者OTP动态口令实现windows安全登录

通过 安当SLA(System Login Agent)实现Windows安全登录认证,是一种基于双因素认证(2FA)的解决方案,旨在提升 Windows 系统的登录安全性。以下是详细的实现方法和步骤: 1. 安当SLA的核心功能 安…...

Node.js接收文件分片数据并进行合并处理

前言:上一篇文章讲了如何进行文件的分片:Vue3使用多线程处理文件分片任务,那么本篇文章主要看一下后端怎么接收前端上传来的分片并进行合并处理。 目录: 一、文件结构二、主要依赖1. express2. multer3. fs (文件系统模块)4. pat…...

Lsky-Pro在线图片搭建教程(Docker部署方式)

Lsky Pro+ 是一个使用 PHP 语言,采用 Laravel 框架开发的一款 Web 图片管理程序,中文名:兰空图床。如果你需要一个在线图床程序,那么这个开源项目可以帮助到你,部署流程非常简单。本章教程记录如何部署Lsky-Pro。 一、拉取镜像 docker pull halcyonazure/lsky-pro-docke…...

“深入浅出”系列之算法篇:(2)openCV、openMV、openGL

OpenCV是一个的跨平台计算机视觉库,可以运行在Linux囚、Windows 和Mac OS操作系统上。它轻量级而且高效,由一系列 C函数和少量C类构成,同时也提供了Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。 OpenMV是一个开源,低成本&am…...

AI 新动态:技术突破与应用拓展

目录 一.大语言模型的持续进化 二.AI 在医疗领域的深度应用 疾病诊断 药物研发 三.AI 与自动驾驶的新进展 四.AI 助力环境保护 应对气候变化 能源管理 后记 在当下科技迅猛发展的时代,人工智能(AI)无疑是最具影响力的领域之一。AI 技…...

从CRUD到高级功能:EF Core在.NET Core中全面应用(三)

目录 IQueryable使用 原生SQL使用 实体状态跟踪 全局查询筛选器 并发控制使用 IQueryable使用 在EFCore中IQueryable是一个接口用于表示可查询的集合,它继承自IEnumerable但具有一些关键的区别,使得它在处理数据库查询时非常有用,普通集…...

【记录】Jenkins版本及JDK关系介绍的官网地址

Redhat Jenkins Packages...

vue3-json-viewer和vue-json-pretty插件使用,vue3 json数据美化展示

本文介绍vue3如何进行json数据pretty展示 1 vue3-json-viewer 1.1 安装 npm install vue3-json-viewer --save1.2 全局引入 在main.ts中引入,然后直接在组件中使用 import { createApp } from vue import App from ./App.vue import JsonViewer from "vue3…...

python转转商超书籍信息爬虫

1基本理论 1.1概念体系 网络爬虫又称网络蜘蛛、网络蚂蚁、网络机器人等,可以按照我们设置的规则自动化爬取网络上的信息,这些规则被称为爬虫算法。是一种自动化程序,用于从互联网上抓取数据。爬虫通过模拟浏览器的行为,访问网页并…...

浅谈 React Hooks

React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率&#xff0c…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...