Redis_01_数据类型

数据类型

Redis内置5种键类型:字符串哈希列表集合有序集合

1)每种类型的底层编码实现可为多种(都有两种以上);

2)根据其底层不同数据结构的实现区分各种键;

//Redis中无命名空间概念,键名可为任意字符、符号和数字组成


如:Redis键类型和底层数据结构实现
在这里插入图片描述

字符串

字符串(String):一键一值关系

1)值可为字符串、数字和二进制数据(大小不能超512MB);

2)底层数据结构格式分为:int、embstr和raw

//字符串是Redis最基础的键类型(其他键类型均基于字符串类型实现);


Redis会根据值类型和长度自动选择数据供结构作为对应字符串键的底层

数据结构说明
int8个字节的长整型
embstr小于等于39个字节的字符串
raw大于39个的字符串

如:创建不同的字符串键,并判断其类型
在这里插入图片描述

常用命令

创建

(1)创建键:set 键名 值 选项

1)批量创建键:mset 键名1 值1 键名N 值N

2)创建成功返回OK;

3)选项分为以下4种:

选项说明
ex 数值N指定键的过期时间为N秒
px 数值N指定键的过期时间为N毫秒
nx仅在指定键名不存在才可执行(添加)
xx指定键名必须存在才可执行(更新)

//setex和setnx命令是set命令分别加上ex和nx选项的变体


(2)重定义键:getset 键名 值

1)若指定键不存在,则返回“(nil)”;

2)返回指定键原来的值;


(3)修改指定位字符:setrange 键名 索引位 字符

1)使用指定字符替换值中索引位的字符;

2)成功替换返回OK;


(4)值自增(跨度为1):incr 键名

1)只能对值类型为整数的键应用(否则返回“error”);

2)返回自增后的结果(若键不存在,则默认初始化为0且自增1);

3)类似命令如下:

命令说明
incrby指定跨度自增
decr自减(跨度为1)
decrby指定跨度自减
incrbyfloat浮点数自增(指定跨度)

(5)追加值:append 键名 值

1)向指定键名的尾部添加值(不常用,一般直接重新赋值键);

2)返回添加值后的长度;


获取

(1)获取值:get 键名

1)批量获取值:mget 键名1 键名N

2)若获取的键不存在,则返回“(nil)”;

3)返回获取指定键的值(返回顺序为指定键的顺序);


(2)获取值长度:strlen 键名

1)字符和数字占一位,汉字占三位;

2)返回指定键对应值的字符串长度;


(3)返回部分字符串:getrange 键名 索引位1 索引位2

1)返回值中索引位1到索引位2的字符串(包含2个索引位);

2)索引位从0开始;


如:创建字符串键值对,并获取值和修改
在这里插入图片描述


如:单次操作和批量操作的时间区别
在这里插入图片描述
1)N次set/get命令时间 = N次网络时间 + N次set/get命令时间

2)1次mset/mget命令时间 = 1次网络时间 + N次set/get命令时间

//批量命令操作需限制数量,否则可能导致Redis阻塞或网络拥塞


哈希

哈希(Hash):一键多值关系,且键也可为键值对(字典)

1)若值也是键值对,则相对值为键的值称为“内值”;

2)底层数据结构格式分为:ziplist(压缩列表)hashtable(哈希表)


Redis会根据值个数和大小自动选择数据供结构作为对应键的底层

  1. ziplist:当值的个数小于hash-max-ziplist-entries(默认512)个,且小于hash-max-ziplist-value(默认64)字节时(多个值连续存储,更节省内存);

  2. hashtable:当值条件不能满足ziplist时(读写时间复杂度为O(1))


如:创建不同的哈希键,并判断其类型
在这里插入图片描述
//若键的底层已为hashtable,即使后续条件再满足ziplist也不会切换


常用命令

创建

(1)创建键:hset 键 值 内值

1)批量创建:hmset 键名1 值1 内值1 键名N 值N 内值N

2)hsetnx命令是hset命令的基础上,指定值必须存在才可设置内值;

3)创建成功返回1(反之返回0);


(2)内值自增(跨度默认为1):hincrby 键 值 跨度

1)只能对内值类型为整数的值应用(否则返回“error”);

2)返回自增后的结果(若值不存在,则默认初始化为0且自增1);

3)hincrbyfloat命令可对浮点数类型进行自增运算(可指定跨度,默认为1);


获取

(1)键中值数量:hlen 键名

1)返回指定键含有值的个数


(2)判断值是否存在:hexists 键名 值

1)若存在返回1,不存在则返回0;


(3)获取内值:hget 键名 值

1)批量获取内值:hmget 键名 值1 值N

2)返回获取指定内值(返回顺序为指定值的顺序);

3)若获取的键不存在,则返回“(nil)”;


(4)获取内值长度:hstrlen 键 值

1)字符和数字占一位,汉字占三位;

2)返回指定值对应内值的字符串长度;


(5)获取所有值:hkeys 键名

1)返回指定键的所有值;


(6)获取所有内值:hvals 键名

1)返回指定键的所有内值;


(7)获取所有值和内值:hgetall 键名

1)返回顺序为:先值后内值

2)若指定键中值数量较多时,可能导致Redis阻塞(可使用scan命令代替)


删除

(1)删除值:hdel 键名 值1 值N

1)值被删除后,其对应的内值也随之被删除;

2)返回成功删除值的个数;


如:创建哈希键值对,并获取/修改值和内值
在这里插入图片描述


列表

列表(List):一键多值的有序关系,且可通过索引值获取(从0开始)

1)列表中只能存储2³²-1个值,且值可重复;

2)可在列表的两端进行插入(Push)和弹出(Pop)操作;

3)底层数据结构格式分为:ziplist(压缩列表)linkedlist(链表)


Redis会根据值个数和大小自动选择数据供结构作为对应键的底层

  1. ziplist:当值的个数小于list-max-ziplist-entries(默认512)个,且小于list-max-ziplist-value(默认64)字节时(多个值连续存储,更节省内存)

  2. hashtable:当值条件不能满足ziplist时

  3. quicklist:结合ziplist和linkedlist(默认使用)


参数说明
list-max-ziplist-size指定最大压缩空间或长度 (默认值-2代表8KB) (负数指定最大压缩空间,正数指定长度)
list-compress-depth指定最大压缩深入 (默认值0代表不压缩)

//list-max-ziplist-entries和list-max-ziplist-value参数已被废弃


常用于实现栈(仅一端Push和Pop)和队列(两端均可Push和Pop):

lpush + lpop = Stack()

lpush + rpop = Queue(队列)

lpush + ltrim = Capped Collection(有限集合)

lpush + brpop = Message Queue(消息队列)

//索引值为负数时,代表从列表的末端开始定位


常用命令

创建

(1)创建键分为:从末端添加值创建、从前端添加值创建

1)从末端添加值创建:rpush 键名 值1 值N

2)从前端添加值创建:lpush 键名 值1 值N

3)返回成功添加值的个数


(2)添加值:linsert 键名 before或after 定位值 添加值

1)将指定值添加到定位值的前方(before)或后方(after);

2)返回插入成功后的列表的长度(含值个数);


(3)修改值:lset 键名 索引 新值

1)将指定索引代表的值替换为新值;

2)替换成功返回OK;


获取

(1)获取列表长度(所含值个数):llen 键名

1)返回键的长度(所含值个数);


(2)获取值:lindex 键名 索引值

1)返回指定索引值代表的值


(3)获取范围内的值:lrange 键名 索引1 索引2

1)返回索引1到索引2之间的所有值(包括两个索引);

2)默认从左到右定位(索引值为负数时,则从右到左);


删除

(1)弹出值分为:末端弹出值、前端弹出值

1)末端弹出值:rpop 键

2)前端弹出值:lpop 键

3)返回被弹出的值(默认仅弹出一个);


(2)删除匹配值:lrem 键名 数值N 匹配值

1)匹配到特定值开始执行删除操作(仅删除匹配值),删除个数为N;

2)删除个数满足N时则停止,若删除个数不足则继续匹配;

3)返回成功删除值的个数(可能不等于N,保证不阻塞);

4)N的取值影响删除操作:

取值说明
N > 0从左到右,删除最多N个匹配值
N < 0从右到左,删除最多N个匹配值
N == 0删除所有匹配值

(3)删除范围外的值:ltrim 键名 索引1 索引2

1)仅保留索引1到索引2范围内之间的值(包括两个索引),其他均删除;

2)删除成功返回OK;


(4)阻塞弹出值分为:末端阻塞弹出值、前端阻塞弹出值

1)末端阻塞弹出值:brpop 键1 键N 阻塞时间M

2)前端阻塞弹出值:blpop 键1 键N 阻塞时间M

3)brpop是M秒内从左到右遍历N个键直到有值可弹出并返回(blpop反之);

4)多个客户端对同一个键执行brpop/blpop,则最先执行的客户端获得值;

5)返回被弹出的值(若M秒内无值可返回,则返回“(nil)”);


如:创建列表键值对,并获取/修改值和内值
在这里插入图片描述


集合

集合(Set):一键多值的无序关系

1)列表中只能存储2³²-1个值,且值不可重复;

2)多个集合之间可进行交集并集差集操作;

3)底层数据结构格式分为:intset(整数集合)hashtable(哈希表)


Redis会根据值个数和大小自动选择数据供结构作为对应键的底层

  1. intset:值均为整数类型,且个数小于set-max-intset-entries(默认512)个;

  2. hashtable:当值条件不能满足ziplist时

//intset底层编码具有使用更小内存的优势

//若底层编码为intset,插入数据时会自动进行排序和去重


如:创建不同的集合键,并判断其类型
在这里插入图片描述


常用命令

创建

(1)创建键:sadd 键名 值1 值N

1)返回成功添加值的个数;


(2)交集:sintersotroe 新键名 键名1 键名N

1)将多个集合键之间的交集结果存储至新键(相同值);

2)返回新键中所含值的个数;


(3)并集:sunionstore 新键名 键名1 键名N

1)将多个集合键之间的并集结果存储至新键(所有值,排序重复值);

2)返回新键中所含值的个数;


(4)差集:sdiffstore 新键名 键名1 键名N

1)将多个集合键之间的差集结果存储至新键(不同值);

2)返回新键中所含值的个数;


获取

(1)键中值数量:scard 键名

1)返回指定键中所含有的值的个数;

2)时间复杂度为O(1),其直接查询内部变量获得;


(2)判断值是否存在:sismember 键名 值

1)若存在返回1,不存在则返回0;


(3)获取随机值:srandmember 键名 数量N

1)从集合键中随机获取N个值(默认1个);

2)返回获取的值(仅获取,不删除);


(4)获取所有值:smembers 键名

1)返回指定键中所有的值;

2)由于集合是无序的,所以返回结果也是无序(每次返回结果可能不同);

//若指定键中所含有值过多时,可能导致Redis阻塞


删除

(1)删除值:srem 键名 值1 值N

1)返回成功删除值的个数;


(2)随机弹出值:spop 键名 数量N

1)指定集合键中随机弹出N个值(默认弹出1个);

2)返回弹出的值;


如:创建集合键值对,并获取/修改值和内值
在这里插入图片描述

交/并/差

(1)交集:sinter 键名1 键名N

1)返回多个集合键之间的交集结果(相同值);


(2)并集:sunion 键名1 键名N

1)返回多个集合键之间的并集结果(所有值,排序重复值);


(3)差集:sdiff 键名1 键名N

1)返回多个集合键之间的差集结果(不同值);


如:计算两个集合键之间交、并和差集
在这里插入图片描述


有序集合

有序集合(Zset):一键多值的有序关系

1)列表中只能存储2³²-1个值,且值不可重复;

2)多个集合之间可进行交集并集差集操作;

3)通过给每个值设置权重值进行排序(权重值可重复);

4)底层数据结构格式分为:ziplist(压缩列表)skiplist(跳跃表)


Redis会根据值个数和大小自动选择数据供结构作为对应键的底层

  1. ziplist:当值的个数小于list-max-ziplist-entries(默认512)个,且小于list-max-ziplist-value(默认64)字节时(多个值连续存储,更节省内存)

  2. skiplist:当值条件不能满足ziplist时


如:创建不同的集合键,并判断其类型
在这里插入图片描述


常用命令

创建

(1)创建键:ZADD 键名 选项 权重值1 值1 权重值N 值N

1)返回成功添加值的个数;

2)选项如下(可省略):

选项说明
NX键必须不存在才可执行(创建)
XX键必须存在才可执行(添加值)
CH返回该次执行后,值发生变化的个数
incr仅增加权重值

(2)增加权重值:ZINCRBY 键名 权重值 值

1)返回添加权重值的权重值;

2)若指定值不存在,则将值添加到键中(并赋予指定的权重值);


获取

(1)键中值数量:ZCARD 键名

1)返回指定键中所含有的值的个数;

2)时间复杂度为O(1),其直接查询内部变量获得;


(2)获取权重值:ZSCORE 键名 值

1)返回指定值对应的权重值(若值不存在,则返回“(nil)”);


(3)获取排名:ZRANK 键名 值

1)返回指定值的在键中的排名(根据权重值,递增排序);

2)ZREVRANK命令同理,但以递减的形式排序;

//排序名从0开始技术


(4)获取范围内的值:ZRANGEBYSCORE 键名 最小值 最大值

1)返回权重值在最小值和最大值之间的值(包括范围值,递增);

2)可在最后添加“WITHSCORES”选项,同时显示该值的权重值;

3)可在最小值和最大值旁指定圆括号,代表不包含该范围值;

4)“-INF”和“+INF”分别代表无限小和无限大;

3)ZREVRANGEBYSCORE命令同理,但以递减的形式返回;


(5)获取范围内的值数量:ZCOUNT 键名 最小值 最大值

1)返回权重值在最小值和最大值之间的值个数(包括范围值);


(6)获取排名内的值:ZRANGE 键名 最小排名 最大排名

1)返回排名在最小排名和最大排名之间的值(包括排名,递增);

2)可在最后添加“WITHSCORES”选项,同时显示该值的权重值;

3)ZREVRANGE命令同理,但以递减的形式返回;

删除

(1)删除值:ZREM 键名 值1 值N

1)返回成功删除值的个数;


(2)删除分数范围内的值:ZREMRANGEBYSCORE 键名 最小值 最大值

1)删除权重值在最小值和最大值之间的值(包括范围值);

2)返回成功删除值的个数;


(3)删除排名范围内的值:ZREMRANGEBYRANK 键名 最小排名 最大排名

1)删除排名在最小排名和最大排名之间的值(包括排名);

2)返回成功删除值的个数;


如:创建有序键值对,并获取/修改值和内值
在这里插入图片描述
//若两个值的权重值相同,则按照两个值名的ASCII码值再排序(递增)


交/并

(1)并集:ZINTERSTORE 新键名 键个数 键1 键N 选项

1)将多个键的并集结果存储至新键中;

2)返回新键中所含值的个数;

3)选项如下:

选项含义
WEIGHTS 权重1 权重N每个键中权重值在计算时的权重 (默认全为1)
AGGREGATE MIN或MAX或SUM指定新键的权重值取值方式 (默认为SUM)

权重公式如下:

权重公式说明
MIN保留最小权重值
MAX保留最大权重值
SUM多个权重值合并

(2)交集:ZUNIONSTORE 新键名 键个数 键1 键N 选项

1)将多个键的交集结果存储至新键中;

2)返回新键中所含值的个数;

3)选项等同于ZINTERSTORE命令;


如:计算两个集合键之间交集和并集
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值