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

0 阅读4分钟

Redis数据结构

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

image.png

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

image.png

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

image.png

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

image.png

通用命令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

image.png
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冲突问题,并且可以让数据存储更加有条理,层次更加明了,推荐存储时都按照层次存储