Redis的5种基础数据类型

Redis的五种基础数据类型

Redis是非关系型数据库,它是以键值对的形式将数据存储在内存中的,当然它有完善持久化的机制保证服务的HA,这里所说的数据类型是指value的数据类型。以reidis5.0.4版本为例,记录这五种基础数据类型的用法和注意事项。
在linux上安装redis服务后启动,使用redis自带的客户端连接工具,连接到redis服务,通过输入help @ + 对应的数据类型的名称,就可以看到和该数据类型相关的指令,下面我是把bitmap这种高级数据类型,也放在下面,待五种基础数据类型都补充完, 会把bitmap迁到高级数据类型中去。

1.字符串(String)

输入 help @String
在这里插入图片描述在这里插入图片描述
String类型的数值操作有这么多指令,那我们一一来看

1.1 set、get指令

在这里插入图片描述

指令解释说明
set给键设置值
get获取键对应的值

set还有一些复杂的操作,我们看图中指令的提示
在这里插入图片描述

1.2 getset指令

在这里插入图片描述

指令解释说明
getset key value设置key对应的新值,返回旧值

1.3 setex、psetex、ttl指令

在这里插入图片描述

指令解释说明
setex key second value设置键过期时间(单位秒)再设置值
ttl获取键的有效期是多久,也就是还有多久这个键值对就会被redis清除掉。

相同的指令如下:
在这里插入图片描述

指令解释说明
set key ex 5设置key的过期时间为5秒

在这里插入图片描述

指令解释说明
psetex key milliseconds value设置键过期时间(单位毫秒)再设置值

在这里插入图片描述

指令解释说明
set key value px设置键过期时间(单位毫秒)再设置值

那么说到有效期的事情,todo 待补充 可以看下redis的缓存过期清除策略

1.4 setnx指令

在这里插入图片描述

指令解释说明
setnx key value当键不存在时,才会将键值对添加到redis中

在这里插入图片描述

指令解释说明
set key value nx当键不存在时,才会将键值对添加到redis中

在这里插入图片描述

指令解释说明
set key value xx当键存在时,才会将键值对添加(本质是覆盖)到redis中

1.5 mset、msetnx、mget指令

在这里插入图片描述

指令解释说明
mset key value key value …批量添加键值对
mget key key …批量获取键值对的值
mset key value key value …批量添加的键值对都不存在时,才会将所有的键值对添加到redis中

1.6 setrange、getrange指令

在这里插入图片描述

列1列2列3列4列5列6列7列8列9列10列11
正向索引0123456789
value0123456789
反向索引-10-9-8-7-6-5-4-3-2-1
指令解释说明
getrange key start end当end为正数时,获取索引start到end为止的值;
当end为负数,且为-1时,获取start到最后一个索引的值
当end为负数,且超过范围时默认返回start索引位置的值
(例子中最大的反向索引是-10,你可以说是最小的因为是负值)

1.7 strlen、append指令

在这里插入图片描述

指令解释说明
strken key获取key对应值的长度
append key value在key对应的值后追加字符串value

1.8 incr、decr、incrby、decrby、incrbyfloat指令

在这里插入图片描述

指令解释说明
incr key对key的value数值加1
decr key对key的value数值减1
incrby key increment对key的value数值加指定的数
decrby key increment对key的value数值减指定的书
incrbyfloat key incement对key的value数值加指定的浮点数

2.散列(hash)

涉及到相关指令如下
在这里插入图片描述

2.1 hset、hget、hdel指令

在这里插入图片描述
把hash想成java数据结构中的的map

指令解释说明
hset key field vaue设置key对应map的键值对,field和value为map新增的键值对
hget key field获取key对应map键field映射的值
hdel key field删除key对应map键fied及其映射的值

2.2 hmset、hmget指令

在这里插入图片描述

指令解释说明
hmset key field value field value …批量设置key对应map的键值对,field和value为map新增的键值对
hmget key field field …批量获取key对应map中field对应的值

2.3 hsetnx指令

在这里插入图片描述

指令解释说明
hsetnx key field vauekey对应的map中,不存在field的键,再进行添加,同setnx指令是一样的道理

2.4 hexists指令

在这里插入图片描述

指令解释说明
hexists key fieldkey对应的map中,是否存在field键,0 不存在 1 存在

2.5 hkeys、hvals、hgetall指令

在这里插入图片描述

指令解释说明
hkeys key获取key对应map所有的键
hvals key获取key对应map所有的值
hgetall获取key对应map所有的键值对

2.6 hlen、hstrlen指令

在这里插入图片描述

指令解释说明
hlen key获取key对应map中键的数量
hstrlen key field获取key对应map中,键对应值的长度

2.7 hscan指令

在这里插入图片描述

指令解释说明
hscan key cursor match pattern count num从某个游标开始获取key对应map中,匹配表达式的游标位置、键、值

2.8 hincrby、hincrbyfloat指令

在这里插入图片描述

指令解释说明
hincrby key field increment增加指定数量,key对应map的field的值
hincrbyfloat key field increment增加指定浮点数,key对应map的field的值

3.列表(lists)

涉及到的指令如下
在这里插入图片描述
在这里插入图片描述

3.1 lpush、lpop、rpush、rpop指令

在这里插入图片描述
可以将list理解为一个队列

指令解释说明指令执行完成后的值
lpush key value value value从左侧向队列列表添加值4 3 2 1
rpush key value value value从右侧向队列列表添加值4 3 2 1 5 6 7 8
lpop key从左侧移除第一个元素并返回3 2 1 5 6 7 8
rpop key从左侧移除第一个元素并返回3 2 1 5 6 7

3.2 blpop、brpop指令

在这里插入图片描述
todo 搞成动图

指令解释说明
blpop key timeout阻塞从左侧获取元素,直到超时,如果timeou为0则一直阻塞
brpop key timeout阻塞从右侧获取元素,直到超时,如果timeou为0则一直阻塞

3.3 rpoplpush、brpoplpush指令

todo 搞成动图

指令解释说明
rpoplpush source destination从一个list右侧获取元素,添加到另一个list的最左侧
brpoplpush source destination timeout阻塞从一个list右侧获取元素,添加到另一个list的最左侧
如果timeout为0,获取不到元素就一直阻塞
如果timeout不为0就阻塞指定的时间后结束指令

3.4 lpushx、rpushx、llen指令

在这里插入图片描述

指令解释说明
lpushx key value当列表存在时,才向左侧添加元素
rpushx key value当列表存在时,才向右侧添加元素

3.5 lset、lrem、lrange指令

在这里插入图片描述
在这里插入图片描述

指令解释说明
lset key index vauelset 设置指定索引位置的值
lrem key count value移除list中指定元素,当count=0,移除全部指定元素;
当count>0,从左侧移除count个指定元素;当count<0,从右侧移除count个指定元素
lrange key start end获取list,索引start到end的元素,支持正反向索引

3.6 lindex、linsert指令

在这里插入图片描述

指令解释说明
lindex key index获取list指定索引位置的元素
linsetr key after/before pivot value在list从左查找到的元素前或后,添加元素

3.7 ltrim指令

在这里插入图片描述

指令解释说明
ltrim key start stop移除指定start到stop索引区间外的元素,支持正反向索引

4. 集合(sets)

在这里插入图片描述

4.1 sadd、srem、smembers、sismember指令

在这里插入图片描述

指令解释说明
sadd key member member…向key的集合中添加元素(自带去重)
smembers key获取key对应集合中所有的元素
srem key member member …移除key对应集合中的指定的元素
sismember key member判断给定的元素是否为key对应集合中的元素
4.2 spop、srandmember、smove指令

在这里插入图片描述

指令解释说明
spop key count从key对应的集合中随机移除count个元素并返回
srandmember key count从key对应的集合中随机获取(不移除)count个元素并返回
smove source destination member将元素从source移除添加到destination集合中
4.3 scard、sscan指令

在这里插入图片描述

指令解释说明
scard key获取key对应集合的元素数量
sscan key cursor match pattern count num从某个游标开始获取key对应集合中,匹配表达式的元素,count表示每次获取的数量
4.4 sinter、sinterstore指令

在这里插入图片描述

指令解释说明
sinter key key …获取多个key对应集合中元素的交集
sinterstore destination key key …获取多个key对应集合中元素的交集并保存到destination集合中
4.5 sunion、sunionstore指令

在这里插入图片描述

指令解释说明
sunion key key …获取多个key对应集合中元素的并集
sunionstore destination key key …获取多个key对应集合中元素的并集并保存到destination集合中
4.6 sdiff、sdiffstore指令

在这里插入图片描述

指令解释说明
sdiff key key …获取多个key对应集合中元素的差集
sdiffstore destination key key …获取多个key对应集合中元素的差集(实际获取是和第一个key对应的集合相比,缺少的元素)并保存到destination集合中

5. 有序集合(sorted sets)

在这里插入图片描述
在这里插入图片描述
有序集合,那么是怎么样达到有序的呢?按照什么排序呢?

5.1 zadd、zrange、zrevrange、zcard、zrem指令

在这里插入图片描述

指令解释说明
zadd key [nx xx] score member [score member…]添加一个元素及其分数到有序集合中,nx就是不存在再添加,xx就是存在再添加
zrange key start stop获取有序集合中,获取指定升序序索引范围内元素
zrevrange key start stop获取有序集合中,获取指定降序索引范围内元素
zcard key获取有序集合中元素的数量
zrem key移除有序集合中指定元素
5.2 zincrby、zscore、zcount指令

在这里插入图片描述

指令解释说明
zincrby key increment member增加有序集合中指定元素的分数
zscore key member获取有序集合对应元素的分数
zcount key min max统计有序集合中分数再max和min之间的元素
5.3 zpopmax、zpopmin指令

在这里插入图片描述

指令解释说明
zpopmax key count移除有序集合中分数最大的count个元素
zpopmin key count移除有序集合中分数最小的count个元素
5.4 zrank、zrevrank指令

在这里插入图片描述

指令解释说明
zrank key member获取有序集合中指定元素升序排序索引
zrevrank key member获取有序集合中指定元素降序排序索引
5.5 zrangebyscore、zrevrangebyscore、zrangebylex、zrevrangebylex指令

在这里插入图片描述

指令解释说明
zrangebyscore key min max根据分数范围获取有序集合中的元素按照升序排序返回
zrevreangebyscore key max min根据分数范围获取有序集合中的元素按照降序排序返回
zrangebylex key min maxtodo 待补充
zrevrangebylex keytodo 待补充
5.6 zremrangebyrank、zremrangebyscore、zremrangebylex指令

在这里插入图片描述

指令解释说明
zremrangebyrank key start stop根据降序索引范围移除有序集合中的元素
zremrangebyscore key min max根据分数范围移除有序集合中的元素
zremrangebylex key min maxtodo 待补充
5.7 zscan、zlexcount指令
指令解释说明
zscan key cursor match pattern count count从某个游标开始获取有序集合中,匹配表达式的元素,count表示每次获取的数量
zlexcount key min maxtodo 待补充
5.8 zinterstore、zunionstore指令

在这里插入图片描述

指令解释说明
zinterstore destination key key weight agreegate [max min sum]去多个集合的交集中的元素,weight权重,argeegate取最大值 最小值或者和,保存到另一个集合中
zunionstore destination key key weight agreegate [max min sum]去多个集合的集中的元素,weight权重,argeegate取最大值 最小值或者和,保存到另一个集合中
5.9 bzpopmax、bzpopmin指令

在这里插入图片描述

指令解释说明
bzpopmax key timeout阻塞获取有序集合中分数最大的元素及其分数,timeout为-1则会一直阻塞,直到有序集合中有元素
bzpopmin key timeout阻塞获取有序集合中分数最小的元素及其分数,timeout为-1则会一直阻塞,直到有序集合中有元素

那我们通过这些指令的学习可以得出上面问题的结论,有序集合是按照什么排序的,是按照设置的score进行排序的,他支持降序查询、升序查询等等复杂的查询。

我们是不是应该思考为什么redis为我们提供了这么多的数据类型?
思考1:是不是为了减少网络io的数据量,才这么涉及的,我们知道影响请求和响应速度的瓶颈是io,各种io,磁盘IO,网络IO等
思考2:计算向数据移动,也是为了减少IO

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值