Redis字符串数据类型
一、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 设置失败。
值的类型有误或者命令语法有误返回错误。