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

Redis基础(2):Redis常见命令

Redis数据结构

Redis一个Key-Value的数据库,其Key一般是String类型,但是Value的类型多种多样

这是Redis中几种常见的数据结构,其中前五种被称为基本类型,后三种是在基本类型的基础上创建的,被称为特殊类型
不同的数据类型,操作也有差异,我们可以通过查阅官方提供的文档获取不同数据结构的操作方法,也可以在命令行中通过help命令来获取使用方法:

可以在help命令后加上该数据结构对应的分组,来获取该数据结构所有的指令:

也可以通过使用help命令后加上具体的指令,获取该指令的具体用法:

通用命令generic

keys

keys命令可以查看符合模板(pattern)的所有Key,这个命令必须要指定一个查询的模板:比如*(代表查询所有)或者A*(代表查询所有以A开头的key),但底层是基于模糊查询的,所以说效率相对较低不建议在生产环境设备上使用。假如说Redis是分布式的,有主有从千万不要在主节点上使用这个命令,否则在在命令运行时会阻塞所有请求。

del

del命令可以删除一个key,参数是需要删除的keydel命令的参数可以是多个key,代表批量删除。删除一个key,会返回一个值,代表删除key的个数,使用del命令删除一个不存在的key时,不会报错。

exists

exists命令可以判断一个key是否存在,参数是需要判断的keyexists命令的参数可以是多个key,代表批量判断。判断一个key,会返回0(代表key不存在)或者1(代表key存在)

expire

expire命令可以给一个key设置有效期,有效期到期时该key会自动删除。这样做的目的是:因为Redis是基于内存存储数据的,内存十分的宝贵,所以说如果不清除key,一直存储,总有一天内存会占满expire命令后需要的参数是key和过期时间(单位是秒)。expire命令通常和ttl命令一起配合使用,ttl命令可以查看key剩余的有效时间,ttl如果返回-1,则代表该key是永久存储的,如果返回-2,则代表该key已经过期。在存储时建议给每一个key都添加有效时间。

String类型

String类型,也就是字符串类型,是Redis中最简单的存储类型,其value是字符串,但根据字符串格式不同,又可以分为3类:String普通字符串、int整数类型,可以做自增、自减操作、float浮点类型,可以做自增、自减操作。但是不管是哪种格式,其底层都是字节数组形式存储,只不过编码方式不同(数字会直接转换为二进制的形式作为字节存储)。字符串类型的最大空间不能超过512m

String的常见命令如上图所示。

Key的层级格式

Redis是一个以Key-Value键值型数据库,要求存放数据的Key必须是唯一的,通常在存储时我们会将存储数据的id来作为唯一标识以确保Key的唯一性。但这样会出现一个问题:由于Redis中没有像MySql中那样的表(table)的概念(关系型数据库非关系型数据库的区别),所有的数据都是存放于同一个数据库里中,那么该如何区分不同存储数据类型的id?比如存储用户商品信息到Redis中,此时用户和商品的id都是1,二者的id是一样的,都存放在Redis中就出现了Key相同的冲突。此时就需要使用到Key的层级结构。
Redis中的Key允许使用多个单词形成层级结构,多个单词需要使用:进行分隔,其常见格式如下:

项目名:业务名:类型:id

举个例子,项目名叫做外卖,有userorder两种不同的数据,我们就可以这样定义Key

外卖:user:1;
外卖:order:1;

当然,这只是一种较为常见的作法,并不一定要像这样定义Key
如果存储的Value是一个Java对象,则可以将这个对象序列化为Json字符串之后再进行存储:

Key 外卖:uer:1    Value {"id":1,"name":"jack","age":21}

按照层级构造Key之后,数据在Redis中的存储也和Key的层级一样,这样就可以避免不同数据id冲突后导致的Key冲突问题,并且可以让数据存储更加有条理,层次更加明了,推荐存储时都按照层次存储

http://www.dtcms.com/a/265074.html

相关文章:

  • 多模态DeepSeek大模型的本地化部署
  • Colormind:优秀大模型赋能国产求解器,打造自主可控建模平台
  • 数学建模_拟合
  • 【Erdas实验教程】026:遥感图像辐射增强(去条带处理)
  • IDEA2025 Version Control 窗口 local changes显示
  • JavaScript 性能优化实战:减少 DOM 操作引发的重排与重绘
  • 操作系统考试大题-处理机调度算法-详解-2
  • 代码实现特殊的字段的基本功能
  • 用Rust编写的开源支付解决方案——Hyperswitch
  • springboot集成达梦数据库,取消MySQL数据库,解决问题和冲突
  • nohup java -jar 命令启动jar包,项目仍然会挂掉或者停止运行的解决方案
  • C++——手撕智能指针、单例模式、线程池、String
  • Vue + RuoYi 前后端分离入门手册
  • [深度学习环境踩坑记录]ubuntu22.04安装RTX3060驱动,黑屏、桌面只有壁纸和鼠标,一顿折腾
  • javaWeb02-Tomcat
  • java.sql.SQLSyntaxErrorException: Unknown column ‘user_name‘ in ‘field list‘
  • YOLOv11剪枝与量化(一)模型压缩的必要性
  • Qt写入excel
  • 整流电路Multisim电路仿真实验汇总——硬件工程师笔记
  • Rust实现FasterR-CNN目标检测全流程
  • 教程:国内如何免费用Claude4+GPT4o生成高质量科研绘图
  • vue动态绑定样式
  • Kalibr解毒填坑(一):相机标定失败
  • 408第三季part1 - 操作系统 - 文件基本概念
  • 基于STM32的土豆种植自动化灌溉系统设计与实现
  • java依赖注入方法
  • 【C语言】知识总结·文件操作
  • Redis在项目中的使用
  • 在移动端使用 Tailwind CSS (uniapp)
  • 在项目架构时,如何选择打包构建工具?