Redis字符串数据类型

作者:zheng_Great 2020-04-11 4017次

一、Redis字符串类型基本概念及应用场景

高速缓存HTML片段或者页面;

高速缓存关系型数据库查询的数据结果;

高速缓存会话控制数据;

分布式锁;

防止重复提交;

存储设置固定格式的字符串序列(例如:时间序列);

统计网站访问者数量;

每天注册用户数;

限制API在某一时段的访问次数;

用户签到;

统计活跃用户;

用户在线状态。

统计网站访问者数量;

每天注册用户数;

限制API在某一时段的访问次数;

用户签到;

统计活跃用户;

用户在线状态。

二、Redis字符串类型的基本命令

Redis字符串类型键的设置

1 命令名称:SET

语法: SET key value [EX seconds] [PX milliseconds] [NX|XX]

功能:

给一个key添加字符串类型的值,如果该key已经存在,值会被新值覆盖,不论是什么类型的key。SET设置后的键,之前的生存时间会被丢弃。

选项:

EX seconds(生存时间:秒) / PX milliseconds(生存时间:毫秒) / NX(仅在键不存在时设置) / XX(仅在键存在时设置)

返回值

如果设置成功,返回OK。

如果设置失败,返回nil

2 命令名称:MSET

语法: MSET key value [key value ...]

功能:

同时设置多个key,如果key存在会覆盖。

MSET是原子的,所有键会同时设置成功或者失败。

返回值:

成功返回ok

3 命令名称:SETEX

语法: SETEX key seconds value

功能:

给一个键设置为字符串类型,并指定生存时间(单位:秒)。

该命令是原子的,如果设置失败或者指定生存时间失败,会恢复初始状态。

返回值:

如果设置成功,返回OK。

如果设置失败,返回错误信息。

4 命令名称:PSETEX

语法: PSETEX key milliseconds value

功能:

给一个键设置为字符串类型,并指定生存时间(单位:毫秒)。

该命令是原子的,如果设置失败或者指定生存时间失败,会恢复初始状态。

返回值:

如果设置成功,返回OK。

如果设置失败,返回错误信息。

5 命令名称:SETNX

语法: SETNX key value

功能:

如果key不存在,将其设置为字符串类型。

返回值:

如果设置成功,返回1。

如果设置失败,返回0。

6 命令名称:MSETNX

语法: MSETNX key value [key value ...]

功能:

同时设置多个key,如果其中一个key存在则设置失败,不考虑其他键是否存在。

MSETNX是原子的,所有键会同时设置成功或者失败。

返回值:

如果所有键设置成功返回1,如果所有键设置失败返回0。

7 命令名称:SETRANGE

语法: SETRANGE key offset value

功能:

修改或者设置一个键的字符串类型值的内容。

如果键不存在,就设置一个新的,并且补充offset个NULL,再加入value,换句话说,值为 “offset个NULL+value”。

如果键已经存在,从该键值offset处开始插入value,如果offset的值大于该键字符串长度,用NULL补充到该长度,再末尾插入value。

返回:

成功返回字符串长度,失败返回错误信息

注意事项:

8 命令名称:APPEND

语法: APPEND key value

功能:

如果key存在,则在后面追加value的内容。

如果key不存在,会创建一个key,并设置其值为空字符串,并在后追加value的内容。

返回:

追加成功以后的字符串长度。

Redis字符串类型键的查询

1 命令名称:GET

语法: GET key

功能:

查询key的值。

返回值:

如果键不存在,返回nil。

如果key不是String类型,返回错误信息。

命令名称:MGET

语法: MGET key [key …]

功能:

查询所有key的值。

返回值:

列出所有键的值,绝不会执行失败,如果键是String类型,返回其值,如果键不存在或者不是String类型,返回 nil。

2 命令名称:GETRANGE

语法: GETRANGE key start end

功能:

查询一个字符串的子串,子串的内容取决于start和end(两个参数都必需),start和end可以为负数,-1代表最后一个字符,-2代表倒数第二个字符。

返回值:

如果key存在,返回字符串的子串内容,如果key不存在,返回空字符串,如果key不是String类型,返回错误信息。

3 命令名称:STRLEN

语法: STRLEN key

功能:

返回key的字符串长度。

返回值:

字符串长度,如果key不存在返回0,如果不是字符串类型,返回错误信息。

4 命令名称:GETSET

语法: GETSET key value

功能:

原子地给一个key设置value并且将旧值返回。

返回值:

如果key不是字符串类型,返回一个错误。

应用场景:

获取计数器并且重置为0。

Redis字符串类型键的计数操作

1 命令名称:INCR

语法: INCR key

功能:

将 key 中储存的数字值增一,如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 INCR 操作。本操作的值限制在 64 位(bit)有符号数字表示之内。Key的值必须是整型。

返回值:

如果值包含错误的类型,或字符串类型的值不能表示为数字,返回一个错误 / 如果执行成功,返回执行 INCR 命令之后 key 的值。

2 命令名称:INCRBY

语法: INCRBY key increment

功能:

将 key 所储存的值加上增量 increment,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。本操作的值限制在 64 位(bit)有符号数字表示之内。Key的值必须是整型。

返回值:

如果值包含错误的类型,或字符串类型的值不能表示为数字,返回一个错误 / 如果执行成功,返回执行 INCRBY 命令之后 key 的值。

3 命令名称:INCRBYFLOAT

语法: INCRBYFLOAT key increment

功能:

为 key 中所储存的值加上浮点数增量 increment,如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

可以使用科学计数法。

返回值:

执行成功返回更新以后的值。

4 命令名称:DECR

语法: DECR key

功能:

将 key 中储存的数字值减一,如果 key 不存在,那么 key 的值会先被初始化为 0,然后再执行 DECR 操作。本操作的值限制在 64 位(bit)有符号数字表示之内。Key的值必须是整型。

返回值:

如果值包含错误的类型,或字符串类型的值不能表示为数字,返回一个错误 / 如果执行成功,返回执行 DECR 命令之后 key 的值。

5 命令名称:DECRBY

语法: DECRBY key increment

功能:

将 key 所储存的值加上增量 decrement,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 命令。本操作的值限制在 64 位(bit)有符号数字表示之内。Key的值必须是整型。

返回值:

如果值包含错误的类型,或字符串类型的值不能表示为数字,返回一个错误 / 如果执行成功,返回执行 DECRBY 命令之后 key 的值。

Redis字符串类型键的二进制操作

1 命令名称:SETBIT

语法: SETBIT key offset value

功能:

对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit),位的设置或清除取决于 value 参数,可以是 0 也可以是 1 。

字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。

返回值:

当 key 不存在时,自动生成一个新的字符串值。

指定偏移量原来储存的位。

2 命令名称:GETBIT

语法: GETBIT key offset

功能:

对 key 所储存的字符串值,获取指定偏移量上的位(bit)。

返回值:

当 offset 比字符串值的长度大,或者 key 不存在时,返回 0 。

字符串值指定偏移量上的位(bit)。

3 命令名称:BITCOUNT

语法: BITCOUNT key [start] [end]

功能:

计算给定字符串中,被设置为 1 的比特位的数量。

一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。

返回值:

不存在的 key 被当成是空字符串来处理,因此对一个不存在的 key 进行 BITCOUNT 操作,结果为 0 / 被设置为 1 的位的数量。

4 命令名称:BITOP

语法: BITOP operation destkey key [key ...]

功能:

对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。

OPERATION:

可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种。

除了 NOT 操作之外,其他操作都可以接受一个或多个 key 作为输入。

注意:

当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0 。空的 key 也被看作是包含 0 的字符串序列。

返回值:

保存到 destkey 的字符串的长度,和输入 key 中最长的字符串长度相等。

5 命令名称:BITPOS

语法: BITPOS key bit [start] [end]

功能:

返回字符串里面第一个被设置为1或者0的bit位。

返回值:

命令返回字符串里面第一个被设置为1或者0的bit位。

如果我们在空字符串或者0字节的字符串里面查找bit为1的内容,那么结果将返回-1。

6 命令名称:BITFIELD

语法: BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL]

功能:

本命令会把Redis字符串当作位数组,并能对变长位宽和任意未字节对齐的指定整型位域进行寻址。在实践中,可以使用该命令对一个有符号的5位整型数的1234位设置指定值,也可以对一个31位无符号整型数的4567位进行取值。类似地,在对指定的整数进行自增和自减操作,本命令可以提供有保证的、可配置的上溢和下溢处理操作。

返回值:

GET 当前偏移位置所在的值。

SET 当前偏移量的旧值。

INCRBY 当前偏移量的旧值。

Nil 设置失败。

值的类型有误或者命令语法有误返回错误。