【redis 学习系列】API的理解与使用(一)

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

一、预备知识

1.1 全局命令

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

(1)查看全部的键

1 keys *

(2)键总数

1 dbsize

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

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

 (3)检查键是否存在

1 exists key

若是键存在则返回1,不存在则返回0缓存

(4)删除键

1 del key [key1 ...]

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

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

(5)键过时

1 expire key seconds

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

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

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

(6)键的数据类型

1 type key

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

 

1.2 数据结构及内部编码

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

 

二、字符串

字符串类型是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

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

(2)获取值 

1 get key

若是要获取的值不存在,则返回nil(空)

(3)批量设置值

1 mset key value [key value ...]

(4)批量获取值

1 mget key [key ...]

若是有些键不存在,则它的值为nil(空),结果是按照传入键的顺序返回的:

关于使用n次get获取n条结果与使用1次mget获取n条结果的比较:

使用get命令:n次get时间 = n次网络时间+n次命令时间

使用mget命令:n次get时间 = 1次网络时间+n次命令时间

学会使用批量操做,有助于提升业务处理效率,可是要注意的是每次批量操做所发送的命令数不是无节制的,若是数量过多可能会形成Redis拥塞或者网络拥塞,此时能够用屡次的批量操完成。

(5)计数

1 incr key

incr命令用于对作自增操做,返回的结果分为3种状况:

  • 值不是整数,返回错误
  • 值是整数,返回自增结果
  • 键不存在,按照值为0自增,返回结果为1

除了incr命令,Redis还提供了decr(自减)、incrby(自增指定数字)、decrby(自减指定数字)、incrbyfloat(自增浮点数)。

 

2.1.1 不经常使用命令

(1)追加值

1 append key value

append能够字符串尾部追加值。

(2)字符串长度

1 strlen key

须要注意的是中文占两个字节。命令返回的是当前value所占的字节数。

(3)设置并返回原值

1 getset key value

getset和set同样会设置值,可是不一样的是,它同时会返回原来的值。

(4)设置指定位置的字符

1 setrange key offeset value

(5)获取部分字符串

1 getrange key start end

start和end分别是开始和结束的偏移量,偏移量是从0开始计算。例以下述操做获取了值bast的前两个字符。

下表是字符串类型命令的时间复杂度。

 

2.2 内部编码

字符串类型的内部编码有3种

  • int:8个字节的长整型
  • embstr:小于等于39个字节的字符串
  • raw:大于39个字节的字符串

 Redis会根据当前值的类型和长度来决定使用哪一种内部编码实现。

 

2.3 典型使用场景

2.3.1 缓存功能

2.3.2 计数

2.3.3 共享Session

2.3.4 限速

相关文章
相关标签/搜索