《玩转Redis》系列文章主要讲述Redis的基础及中高级应用,文章基于Redis5.0.4 。本文主要讲述Redis的基础数据结构,《玩转Redis-Redis基础数据结构及核心命令》相关操作命令为方便对比分析,使用脑图展示(若手机端查看图片不方便,可搜索zxiaofan前往PC网页端
本文更适合用于复习总结,阅读》实战》阅读 更有效果哟,主要包含以下内容:
后续会介绍其他高级数据结构:
文章思路:
异常统一说明:
error(out of range)导图简写@EOOR;
负数偏移量表示倒数第几,导图简写@LBN(last but number);
String可以说是Redis中最常见的数据结构,没有之一。
String结构可存储字符串或者各种类型的二进制数据。
String底层结构是动态字符串,可修改指定位置数据,通过预分配冗余空间减少内存的频繁分配,实际分配的空间capacity一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间,如果超过1M,扩容时一次只会多扩1M的空间。字符串最大长度为512M(51210241024个字符)。
数字及浮点数在Redis中以字符串形式存储。
// 如何证明 String最大长度是512M;
// 512M=512*1024*1024;
127.0.0.1:6379> setrange ran 536870911 a
(integer) 536870912
127.0.0.1:6379> strlen ran
(integer) 536870912
127.0.0.1:6379> append ran a
(error) ERR string exceeds maximum allowed size (512MB)
String命令支持以下操作类型:单一操作、批量操作、字符操作、位操作、计数操作。
【核心命令】:SET、SETNX、SETEX、PSETEX、GET、GETSET、APPEND、STRLEN;
注意:
【Redis-String单元素操作】命令简述:
命令 | 功能 | 参数 |
---|---|---|
SET | 设置value值,支持选项 | key value [expiration EX seconds/PX milliseconds] [NX/XX] |
SETNX | key不存在才允许设置 | key value |
SETEX | 设置value及过期时间(秒) | key seconds value |
PSETEX | 设置value及过期时间(毫秒) | key milliseconds value |
GET | 查询指定key | key |
GETSET | 查询返回旧值设置新值 | key value |
APPEND | value追加字符串 | key value |
STRLEN | 查询value长度 | key |
【Redis-String单元素操作】命令详细对比分析如下:
【核心命令】:MSET、MGET;
注意:
【Redis-String批量操作】命令简述:
命令 | 功能 | 参数 |
---|---|---|
MSET | 批量设置 | key value [key value …] |
MGET | 批量查询 | key [key …] |
【Redis-String批量操作】命令详细对比分析如下:
【核心命令】:SETRANGE、GETRANGE;
注意:
【Redis-String指定范围处理】命令简述:
命令 | 功能 | 参数 |
---|---|---|
SETRANGE | 设置指定偏移量位置的字符 | key offset value |
GETRANGE | 查询指定区间字符串 | key start end【@LBN;offset大于len将自动以len为准】 |
【Redis-String指定范围处理】命令详细对比分析如下:
【核心命令】:INCR/DECR、INCRBY/DECRBY、INCRBYFLOAT;
注意:
【Redis-String递增操作】命令简述:
命令 | 功能 | 参数 |
---|---|---|
INCR/DECR | 递增/1递减1 | key |
INCRBY/DECRBY | 递增n/递减n | key increment(支持负数) |
INCRBYFLOAT | 递增浮点值 | key increment(支持负数) |
【Redis-String递增操作】命令详细对比分析如下:
【核心命令】:SETBIT、BITOP、GETBIT、BITCOUNT、BITFIELD、BITPOS;
注意:
【Redis-String位操作】命令简述:
命令 | 功能 | 参数 |
---|---|---|
SETBIT | 指定偏移量bit位置设置值 | key offset value【0=< offset< 2^32】 |
BITOP | 对一个或多个key执行逻辑操作,并将结果保存到destkey | operation destkey key [key …]【AND, OR, XOR, NOT】 |
GETBIT | 查询指定偏移位置的bit值 | key offset |
BITCOUNT | 统计指定区间bit为1的数量 | key [start end]【@LBN】 |
BITFIELD | 操作多字节位域 | key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP/SAT/FAIL] |
BITPOS | 查询指定区间第一个被设置成1的bit位的位置 | key bit [start] [end]【@LBN】 |
【Redis-String位操作】命令详细对比分析如下:
概述:
【核心命令】:LPUSH、RPUSH、LPUSHX、RPUSHX、RPOPLPUSH、BRPOPLPUSH;
注意:
【Redis-List新增元素操作】命令简述:
命令 | 功能 | 参数 |
---|---|---|
LPUSH / RPUSH | (批量)添加元素 | key value [value …] |
LPUSHX / RPUSHX | 向已存在的list中添加单个元素 | key value |
RPOPLPUSH | 弹出source尾压入dest头部 | source destination |
BRPOPLPUSH | 阻塞式弹出source压入dest | source destination timeout |
【Redis-List新增元素操作】命令详细对比分析如下:
【核心命令】:LPOP、RPOP、BLPOP、BRPOP;
注意:
【Redis-List弹出元素操作】命令简述:
命令 | 功能 | 参数 |
---|---|---|
LPOP / RPOP | 弹出元素 | key |
BLPOP / BRPOP | 阻塞式弹出元素 | key [key …] timeout |
【Redis-List弹出元素操作】命令详细对比分析如下:
【核心命令】:LSET、LINDEX、LRANGE、LTRIM、LREM;
注意:
【Redis-List处理指定位置元素】命令简述:
命令 | 功能 | 参数 |
---|---|---|
LSET | 指定位置设置元素 | key index value |
LINDEX | 查询指定位置元素 | key index |
LRANGE | 查询指定区间元素 | key start stop |
LTRIM | 保留指定区间元素 | key start stop |
LREM | 移除前/后count次的value元素 | key count value |
【Redis-List处理指定位置元素】命令详细对比分析如下:
概述:
【核心命令】:SADD(增)、SCADD(数量统计)、SISMEMBER(存在)、SMEMBERS(所有元素)、SREM(移除)、SMOVE(移动);
注意:
【Redis-Set增删移动及统计】命令简述:
命令 | 功能 | 参数 |
---|---|---|
SADD | (批量)添加元素到Set中 | key member [member …] |
SCARD | 统计Set中元素数量 | key |
SISMEMBER | 判断指定元素是否存在于Set中 | key member |
SMEMBERS | 返回Set中的所有元素 | key |
SMOVE | 移动Set的指定元素到另一个集合 | source destination member |
SRANDMEMBER | 返回Set中count个随机元素 | key [count] |
SPOP | 移除并返回Set中count个随机元素 | key [count] |
SREM | 移除Set中指定的元素 | key member [member …] |
SSCAN | 迭代Set | key cursor [MATCH pattern] [COUNT count] |
【Redis-Set增删移动及统计】命令详细对比分析如下:
【核心命令】:差集SDIFF/SDIFFSTORE、交集SINTER/SINTERSTORE、并集SUNION/SUNIONSTORE;
注意:
【Redis-Set集合运算】命令简述:
命令 | 功能 | 参数 |
---|---|---|
SDIFF | 【差集】返回在第一个set中但不在其他set中的元素集合 | key [key …] |
SDIFFSTORE | 【差集】将SDIFF结果存入destination | destination key [key …] |
SINTER | 【交集】返回(多个)set集合的交集 | key [key …] |
SINTERSTORE | 【交集】将多个set集合的交集存入dest | destination key [key …] |
SUNION | 【并集】返回多个set的并集 | key [key …] |
SUNIONSTORE | 【并集】将多个set集合的并集存入dest | destination key [key …] |
【Redis-Set集合运算】命令详细对比分析如下:
概述:
【核心命令】:HSET、HSETNX、HMSET;HGET、HMGET、HGETALL;
注意:
【Redis-Hash新增、查询元素】命令简述:
命令 | 功能 | 参数 |
---|---|---|
HSET | 设置hash中指定字段的值 | key field value |
HSETNX | field不存在才设置hash中指定field的值 | key field value |
HMSET | 批量设置hash值 | key field value [field value …] |
HGET | 查询hash中指定字段的值 | key field |
HMGET | 批量查询指定field的value | key field [field …] |
HGETALL | 查询所有field-value列表 | key |
【Redis-Hash新增、查询元素】命令详细对比分析如下:
【核心命令】:HKEYS、HVALS、HLEN;HDEL、HEXISTS、HSTRLEN;HINCRBY、HINCRBYFLOAT;HSCAN;
注意:
【Redis-Hash统计、修改、删除】命令简述:
命令 | 功能 | 参数 |
---|---|---|
HKEYS | 查询所有field列表 | key |
HVALS | 查询所有value列表 | key |
HLEN | 查询hash的field数量 | key |
HDEL | 移除hash中指定field字段 | key field [field …] |
HEXISTS | 判断hash中是否存在指定field | key field |
HSTRLEN | 查询hash中filed关联的value字符串的长度 | key field |
HINCRBY | 增加hash中指定field的值 | key field increment |
HINCRBYFLOAT | 增加hash中指定field的值 | key field increment |
HSCAN | 基于游标迭代hashes | key cursor [MATCH pattern] [COUNT count] |
【Redis-Hash统计、修改、删除】命令详细对比分析如下:
《玩转Redis-Redis基础数据结构及核心命令》至此结束,后续将继续分享Redis其他数据结构及核心命令。
祝君好运!
Life is all about choices!
将来的你一定会感激现在拼命的自己!
【CSDN】【GitHub】【OSCHINA】【掘金】【微信公众号】