redis10大数据类型-String、List、Hash、Set(持续更新)


(尚硅谷redis7)

1. 10大数据类型有哪些?

1.1 10大数据类型简括

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

1.1.1 redis字符串(String)

String(字符串)
string是redis最基本的类型,一个key对应一个value。
string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。
string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

1.1.2 redis列表 (List)

List(列表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)

1.1.3 redis哈希表(Hash)

Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)

1.1.4 redis集合(SET)

Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是 intset 或者 hashtable。
Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
集合中最大的成员数为 2^32 - 1 (4294967295, 每个集合可存储40多亿个成员)

1.1.5 redis有序集合(ZSet)

zset(sorted set:有序集合)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 2^32 - 1

1.1.6 redis地理空间(GEO)

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,包括
添加地理位置的坐标。
获取地理位置的坐标。
计算两个位置之间的距离。
根据用户给定的经纬度坐标来获取指定范围内的地理位置集合

1.1.7 redis基数统计(HyperLogLog)

HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。
在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
但是,因为 HyperLogLog 只会根据输入元素来计算基数,而不会储存输入元素本身,所以 HyperLogLog 不能像集合那样,返回输入的各个元素。

1.1.8 redis位图(bitmap)

在这里插入图片描述

1.1.9 redis位域(bitfield)

通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。
说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。

1.1.10 redis流(Stream)

Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
简单来说发布订阅 (pub/sub) 可以分发消息,但无法记录历史消息。
而 Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失

2. redis键(key)

2.1 常用命令

在这里插入图片描述

2.1 案例

keys *
查看当前库所有的key
在这里插入图片描述

exists key
判断某个key是否存在
在这里插入图片描述
type key
查看key是什么数据类型
在这里插入图片描述
del key
删除指定的key数据
在这里插入图片描述
在这里插入图片描述

unlink key
非阻塞删除,仅仅将keys<evspace元数据中删除除,真正的删除会在后续异步中操作(常用来处理大体量数据)
ttl key
查看还有多少秒过期,-1表示用不过期,-2表示已经过期
在这里插入图片描述
expire key 秒钟
为给定的key设置过期时间
在这里插入图片描述
move key dbindex【0-15】(可以在config里面去修改)
将当前数据库的 key移动到给定的数据库 db 当中
select dbindex
切换数据库【0-15】,默认为0
在这里插入图片描述

dbsize
查看数据库key的数量
在这里插入图片描述

flushdb 清空当前库
flushall 通杀全部库
在这里插入图片描述

3. 10大redis数据类型落地讲解。

命令大全:http://www.redis.cn/commands.htm
命令不区分大小写,而key是区分大小写的
永远的帮助命令,help @类型 比如:help @String

3.1 redis字符串(String)

3.1.1 常用命令

在这里插入图片描述

3.1.2 命令实例

3.1.2.1 set的全部命令里面包含很多:

在这里插入图片描述

3.1.2.2 启动redis

我们一个一个来。
在这里插入图片描述

3.1.2.3 set key value nx:当没有这个key的时候创建,有key的值的时候,错误。

在这里插入图片描述

3.1.2.4 set key value xx:有这个值的时候,也可以修改

在这里插入图片描述

3.1.2.5 set key value get:先得到原本的值,然后设置新的值

在这里插入图片描述

3.1.2.6 set key value ex 10:10秒钟之后key失效

在这里插入图片描述

3.1.2.7 set key value px 8000:8000毫秒(8秒)之后失效

在这里插入图片描述

3.1.2.8 set key value exat 时间戳:在这个时间戳之后失效。时间戳获得网页

在这里插入图片描述

3.1.2.9 当我们设置了一个过期时间,在过期时间里面使用set key value,那么过期时间将会被覆盖为-1,永不过期

在这里插入图片描述
所以我们需要用另一个命令:

3.1.2.10 set key value keepttl

在这里插入图片描述

3.1.2.11 当我们需要大量创建、获得数据的时候,使用的命令:

mset key value key value
mget key key key
msetnx key value key value(当没有的时候创建)
在这里插入图片描述

3.1.2.12 当我们的值为String的时候,我们可以截取查询,和更改值

getrange key 起始 结束 (0 -1为全部)
setrange:我们截取更改
setrange key 起始 value
在这里插入图片描述

3.1.2.13 当我们的值为int时,我们可以用incr、incrby、decr、decrby加减

incr key 默认+1
incrby key 值 +值
decr key 默认-1
decrby key 值 -值

在这里插入图片描述

3.1.2.14 strlen key 查询有多少字符

append key 值 在value后面加上值
在这里插入图片描述

3.1.2.15 当我们设置的值过期后,就消失了。

在这里插入图片描述

3.1.2.16 getset key value= set key value get

在这里插入图片描述

3.1.3 适用场景:

比如抖音无限点赞某个视频或者商品,点一下加一次
在这里插入图片描述
是否喜欢文章:
在这里插入图片描述

3.2 redis列表(List)

3.2.1 List 常用命令

在这里插入图片描述

3.2.2 List 命令实例

3.2.2.1 List是什么

List适用于单key多value,
一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。
left、right都可以插入添加;
如果键不存在,创建新的链表;
如果键已存在,新增内容;
如果值全移除,对应的键也就消失了。
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。
在这里插入图片描述

3.2.2.2 lpush/rpush/lrange (从左边开始创建/从右边/遍历List)

在这里插入图片描述

3.2.2.3 lpop/rpop(从左边删除一个/从右边删除一个)

上左下右
在这里插入图片描述

3.2.2.4 lindex,按照索引下标获得元素(从上到下)

在这里插入图片描述

3.2.2.5 llen获取列表中元素的个数

在这里插入图片描述

3.2.2.6 lrem key 数字N 给定值v1(解释(删除N个值等于v1的元素))

因为list是可以重复的,所以,我们示例中是删除3个1
在这里插入图片描述

3.2.2.7 ltrim key 开始index 结束index,截取指定范围的值后再赋值给key

在这里插入图片描述

3.2.2.8 rpoplpush 源列表 目的列表

移除列表的最后一个元素,并将该元素添加到另一个列表并返回
在这里插入图片描述

3.2.2.9 Iset key index value(根据索引,来修改list中的某个数据)

在这里插入图片描述

3.2.2.10 linsert key before/after (在某个元素元素之前/之后插入)

在这里插入图片描述

3.2.3 适用场景

  1. 大V作者李永乐老师和CSDN发布了文章分别是 11 和 22
    2.关注了他们两个,只要他们发布了新文章,就会安装进我的List

    lpush likearticle:用户id 11 22

  2. 查看阳哥自己的号订阅的全部文章,类似分页,下面0~10就是一次显示10条
    lrange likearticle:用户id 0 9
    在这里插入图片描述

3.3 redis哈希(Hash)

3.3.1 常用命令:

KV模式不变,但V是一个键值对
Map<string,Map<object,object>>
在这里插入图片描述

3.3.2 命令实例:

3.3.2.1 hset(创建)/hget(查询)/hmset(多值创建)/hmget(多值查询)/hgetall(查询全部)/hdel(删除)/hlen(查询某个key中的全部数量)/
3.3.2.2 hexists key/hkeys/hvals/hincrby/hincrbyfloat/hsetnx

HEXISTS:
在这里插入图片描述
HKEYS\HVALS:
在这里插入图片描述
HINCRBY、HINCRBYFLOAT:
在这里插入图片描述
HSETNX:
在这里插入图片描述

3.3.3 适用场景

新增商品 → hset shopcar:uid1024 334488 1

新增商品 → hset shopcar:uid1024 334477 1

增加商品数量 → hincrby shopcar:uid1024 334477 1

商品总数 → hlen shopcar:uid1024

全部选择 → hgetall shopcar:uid1024
在这里插入图片描述

3.4 redis集合(Set)

3.4.1 常用命令

在这里插入图片描述

3.4.2 命令实例

单值多value,且无重复(无序无重复)

3.4.2.1 SADD key member [member …] 添加元素、SMEMBERS key 遍历集合中的所有元素、SISMEMBER key member 判断元素是否在集合中、SREM key member [member …】删除元素、scard,获取集合里面的元素个数

在这里插入图片描述

3.4.2.2 SRANDMEMBER key[数字] 从集合中随机展现设置的数字个数元素,元素不删除

在这里插入图片描述

3.4.2.3 SPOP key[数字] 从集合中随机弹出一个元素,出一个删一个

在这里插入图片描述

3.4.2.4 smove key1 key2 在key1里已存在的某个值 将key1里已存在的某个值赋给key2

在这里插入图片描述

3.4.2.5 SDIFF key [key …] 集合的差集运算 A-B 属于A但不属于B的元素构成的集合

在这里插入图片描述

3.4.2.6 SUNION key [key …】集合的并集运算 A U B,属于A或者属于B的元素合并后的集合

在这里插入图片描述

3.4.2.7 SINTER key [key …] 属于A同时也属于B的共同拥有的元素构成的集合,然后返回结果

在这里插入图片描述

3.4.2.7 SINTERCARD numkeys key [key …] [LIMIT limit】它不返回结果集,而只返回结果的基数。返回由所有给定集合的交集产生的集合的基数

在这里插入图片描述

3.4.3 适用场景:

3.4.3.1 微信抽奖小程序

在这里插入图片描述

3.4.3.2 微信朋友圈点赞查看同赞朋友

在这里插入图片描述

3.4.3.3 QQ内推可能认识的人

在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐