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

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的基本的数据结构和基本数据结构常用的有关命令,希望对你也会有帮助。


http://www.kler.cn/a/511346.html

相关文章:

  • 【专题二 二叉树中的深搜】98. 验证二叉搜索树
  • Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
  • LLM - 大模型 ScallingLaws 的 C=6ND 公式推导 教程(1)
  • 物联网网关Web服务器--Boa服务器移植与测试
  • C++速览之智能指针
  • MySQL 数据库 :SQL 语句规约(不得使用外键与级联,一切外键概念必须在应用层解决。)
  • 查看代理设置Get-Item Env:https_proxy
  • < OS 有关 > 阿里云:轻量应用服务器 的使用 安装 Tailscale 后DNS 出错, 修复并替换 apt 数据源
  • 安装指南:LLaMA Factory、AutoGPTQ 和 vllm
  • 算法刷题笔记——图论篇
  • Java反射、静态代理、动态代理
  • 以单用户模式启动 Linux 的方法
  • 调试Hadoop源代码
  • 020:为什么 Resnet 如此重要?
  • K8S 容器重启策略
  • C#中如何使用异步编程
  • Mysql--实战篇--@Transactional失效场景及避免策略(@Transactional实现原理,失效场景,内部调用问题等)
  • 深度学习 DAY1:RNN 神经网络及其变体网络(LSTM、GRU)
  • Spring AI入门示例HelloWorld
  • 基于微信小程序的购物系统设计与实现(LW+源码+讲解)
  • 【江西新能源科技职业学院主办 | JPCS(ISSN: 1742-6588)出版,快速见刊检索】2025年可再生能源与节能国际会议(REEC 2025)
  • Windows中安装RabbitMQ
  • TrueNas Webui页面自定义
  • 2024年度总结:从后端Java到全栈成长的蜕变
  • python3GUI--仿崩坏三二次元登录页面(附下载地址) By:PyQt5
  • 如何优化前端性能,减少页面加载时间?