Redis提供了5种数据结构,以下介绍一些预备知识以及Redis的5种数据结构

1、预备知识

1.1 全局命令

Redis的5种数据结构,它们是键值对中的值,对于说有一些通用的命令。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

(1)查看所有的键

1 keys *

【redis 学习系列】API的理解与使用 随笔 第1张

(2)键总数

1 dbsize

【redis 学习系列】API的理解与使用 随笔 第2张

dbsize会返回当前数据库中键的总和,例如当前数据库中有4个键即hello java python mylist,所以测试结果为4。注意,dbsize在计算键总数时不会遍历所有的键,而是直接获取

Redis内置的键总和的变量,所以此命令的时间复杂度为O(1)。然而命令keys *会遍历所有的键,所以它的时间复杂度为O(n)。当Redis保存了大量的键时,线上环境禁止使用命令keys *

 (3)检查键是否存在

1 exists key

如果键存在则返回1,不存在则返回0

【redis 学习系列】API的理解与使用 随笔 第3张

(4)删除键

1 del key [key1 ...]

del是一个通用命令,无论键值是何种数据结构,del命令都可以将其删除,例如删除键值类型为字符串类型的java以及类型为列表类型的mylist。

【redis 学习系列】API的理解与使用 随笔 第4张

返回结果为成功删除键的个数,假设删除一个不存在的键,就会返回0。同时del命令支持同时删除多个键

【redis 学习系列】API的理解与使用 随笔 第5张

(5)键过期

1 expire key seconds

Redis支持对键添加过期时间,当超过过期时间后,将会自动删除键,例如为键hello设置了10秒的过期时间。

【redis 学习系列】API的理解与使用 随笔 第6张

这里的ttl命令会返回键的剩余过期时间,它有3种返回值:

  • 大于或等于0的整数:键剩余的过期时间
  • -1:键没有设置过期时间
  • -2:键不存在

(6)键的数据类型

1 type key

例如键hello是字符串类型,返回结果为string。键mylist是列表类型,返回结果为list。如果键不存在,则返回none

【redis 学习系列】API的理解与使用 随笔 第7张

 

1.2 数据结构及内部编码

【redis 学习系列】API的理解与使用 随笔 第8张

在终端可以使用object encoding命令查询内部编码。

【redis 学习系列】API的理解与使用 随笔 第9张

 

2、字符串

字符串类型是Redis最基础的数据结构,首先键都是字符串类型,而其他几种数据结构都是在字符串类型的基础上构建的,所以字符串类型能为其它4种数据结构的学习奠定基础。字符串的类型可以使字符串(简单字符串、复杂字符串(例如json以及XML))、数字(整型、浮点数)、二进制(图片、音视频)。但是占用的空间最大不能超过512M

2.1 命令

2.1.1 常用命令

(1)设置值

1 set key value [ex seconds] [px milliseconds] [nx|xx]

上述命令的常用选项:

  • ex seconds:为键设置秒级过期时间。
  • px milliseconds:为键设置毫秒级过期时间。
  • nx:键必须不存在,才能设置成功,用于添加
  • xx:与nx相反,键必须存在,才能设置成功,用于更新

除了set选项,Redis还提供了setex和setnx两个命令,他们的作用与ex和nx选项是一样的

1 setex key seconds value
2 setnx key value

【redis 学习系列】API的理解与使用 随笔 第10张

setnx和setxx在实际的场景有何应用呢?以setnx命令为例,由于Redis的单线程命令处理机制,如果有多个客户端同时执行setnx key value,根据setnx的特性,只有一个客户端能设置成功,setnx可以作为分布式锁的一种实现方案。

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄