Redis 五大基础数据结构命令详细介绍

一、Redis数据结构

Redis命令官网介绍

Redis是一个key-value的数据库,key一般是String类型,不过value的类型多种多样:

基本类型:String、Hash、List、Set、Zset

特殊类型:GEO、BitMap、HyperLog等

  • String:
 Hello world
  • Hash
{name:"cy", age:"25"}
  • List
[A -> B -> C -> C]
  • Set
{A, B, C}
  • Zset
{A:1, B:2, C:3}
  • GEO
{A:(120.3,30.5)}
  • BitMap
0110110101110101011
  • HyperLog
0110110101110101011

二、Redis通用命令

通用命令是部分数据类型的,都可以使用的指令,常见的有:

  • KEYS:查看符合模板的所有key
通过help[command]可以查看一个命令的具体用法,例如:

help keys

命令行会显示KEYS用法
  KEYS pattern
  summary: Find all keys matching the given pattern
  since: 1.0.0
  group: generic

KEYS *  查询所有,支持通配符”*“查询

  • DEL:删除一个指定的key
通过help[command]可以查看一个命令的具体用法,例如:

help DEL

命令行会显示DEL用法
  DEL key [key ...]
  summary: Delete a key
  since: 1.0.0
  group: generic

DEL k1 k2 k3  支持删除多个key值

  • EXISTS:判断key是否存在
EXISTS k1

命令行会显示是否存在,存在则返回1,不存在返回0
(integer) 0

  • EXPIRE:给一个key设置有效期,有效期到期时该key会被自动删除
设置k1 20秒有效期
EXPIRE k1 20  

可以通过TTL命令查看key剩余时间,如果没有设置有效时间,则会返回-1,代表永久有效
TTL k1
  • TTL:查看一个KEY的剩余有效期
TTL key

三、String类型

3.1 String类型,也就是字符串类型,是Redis中最简单的存储类型。

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

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

不管是哪种格式,底层都是字节数组形式存储,只不过是编码方式不同。字符串类型的最大空间不能超过512m

KEYVALUE
msghello world
num10
score90.5

3.2 String类型的常见命令

String类型的常见命令有:

  • SET:添加或者修改已经存在的一个String类型的键值对
  • GET:根据key获取String类型的value
  • MEST:批量添加多个String类型的键值对
  • MGET:根据多个key获取多个String类型的value
  • INCR:让一个整形的key增1
  • INCRBY:让一个整形的key自增并指定步长,例如:incrby age 2 让age值增2
  • INCRBYFLOAT:让一个浮点类型的数字自增并指定步长
  • SETNX:添加一个String类型的键值对,前提是这个key不存在,否则不执行
  • SETEX:添加一个String类型的键值对,并且指定有效期

四、Redis-key的层级格式

4.1 key的结构

Redis的key允许有多个单词形成层级结构,多个单词之间用’:'隔开,格式如下:

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

这个格式并非固定,可以根据自己的需要来删除或添加词条。
例如我们的项目名叫做study,有user和order两种不同类型的数据,我们可以这样定义key:

  • user相关的key:study:user:11
  • order相关的key:study:order:11

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:

KEYVALUE
study:user:11{“id”:1, “name”:“cy”, “age”:“25”}
study:order:11{“id”:1, “name”:“华为出口订单”, “price”:“500000”}
  1. String 类型的三种格式
  • 字符串
  • int
  • float
  1. Redis的key的格式
  • 【项目名】:【业务名】:【类型】:【id】

五、Hash类型

Hash类型,也叫散列,其Value是一个无序字典,类似于Java中的HashMap结构。
String结构是将对象序列化为JSON字符串后存储,当需要修改对象某个字段很不方便:

KEYVALUE
study:user:11{“id”:1, “name”:“cy”, “age”:“25”}
study:order:11{“id”:1, “name”:“华为出口订单”, “price”:“500000”}

Hash结构可以将对象中的每个字段独立存储,可以针对单个字段CRUD:

KEYVALUE
fieldvalue
study:user:11namecy
age25
study:order:11name华为出口订单
price500000

5.1 Hash类型的常用命令

Hash的常用命令有:

  • HSET key field value:添加或者修改hash类型key的field的值
  • HGET key field:获取一个hash类型的key的field的值
  • HMSET:批量添加多个hash类型的key的field的值
  • HMGET:批量获取多个hash类型key的field的值
  • HGETALL:获取一个hash类型的key中所有的field和value
  • HKEYS:获取一个hash类型的key中的所有value
  • HINCRBY:让一个hash类型key的字段值自增并指定步长
  • HSETNX:添加一个hash类型的key的field值,前提是这个field不存在,否则不执行

六、List类型

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

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

常用来存储一个有序数据,例如:朋友圈点赞列表、评论列表等。

6.1 List类型的常见命令

List的常见命令有:

  • LPUSH key element …:向列表左侧插入一个或多个元素
  • LPOP key:移除并返回列表左侧的第一个元素,没有则返回nil
  • RPUSH key element…:向列表右侧插入一个或多个元素
  • RPOP key:移除并返回列表右侧的第一个元素
  • LRANGE key star end:返回一段角标范围内的所有元素
  • BLPOP和BRPOP:与LPOP和RPOP类似,只不过在没有元素时等待指定时间,而不是直接返回nil
 
 BLPOP key [key ...] timeout
  summary: Remove and get the first element in a list, or block until one is available
  since: 2.0.0
  group: list

获取对应key左侧第一个元素,且超时时间为10s,如果没有元素则阻塞10s,有则返回并删除该元素
BLPOP list1 10

获取对应key右侧第一个元素,且超时时间为10s,如果没有元素则阻塞10s,有则返回并删除该元素
BRPOP list1 10

6.2 举例

6.2.1 如何利用List结构模拟一个栈?
  • 入口和出口在同一边,先进后出,用LPSH、LPOP或者RPUSH、RPOP
6.2.2 如何利用List结构模拟一个队列?
  • 入口和出口在不同边,先进显出,用LUSH、RPOP或者RPUSH、LPOP
6.2.3 如何利用List结构模拟一个阻塞队列?
  • 入口和出口在不同边,先进后出,用LUSH、BRPOP或者RPUSH、BLPOP

七、Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

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

7.1 Set类型的常见命令

Set的常见命令有:

  • SADD key member …:向Set中添加一个或多个元素
  • SREM key member …:移除set中的指定元素
  • SCARD key:返回Set中元素的个数
  • SISMEMBER key member:判断一个元素是否存在于Set中
  • SMEMBERS key:获取Set中的所有元素
  • SINTER key1 key2:求key1与key2的交集
  • SDIFF key1 key2:求key1与key2的差集
  • SUINON key1 key2:求key1与key2的并集

八、Zset类型

Redis的Zset是一个可排序的Set集合,与Java中的TreeSet有些类似,但底层数据结构却差别很大。Zset的每一个元素都带有一个score属性,可以基于score属性对元素排序,底层的实现是一个跳表(SkipList)加Hash表。
Zset具备以下特性:

  • 可排序
  • 元素不重复
  • 查询速度快
    因为Zset的可排序性,经常被用来实现排行榜这样的功能。

8.1 Zset类型的常见命令

ZSet的常见命令有:

  • ZADD key score member:添加一个或多个元素到Zset,如果已经存在则更新其score值
  • ZREM key member:删除ZSet中的一个指定元素
  • ZSCORE key member:获取Zset中的指定元素的score值
  • ZRANK key member:获取ZSet中的指定元素的排名
  • ZCARD key:获取ZSet中的元素个数
  • ZCOUNT key min max:统计score值在给定范围内的所有元素的个数
  • ZINCRBY key increment member:让ZSet中的指定元素自增,步长为指定的increment值
  • ZRANGE key min max:按照score排序后,获取指定排名范围内的元素
  • ZRANGEBYSCORE key min max:按照score排序后,获取指定score范围内的元素
  • ZDIFF、ZINTER、ZUINON:求差集、交集、并集

注意: 所有的排名默认都是升序,如果要降序则在命令的Z后面添加REV即可。例如:ZREVRANGE key min max

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值