9大类型:String(字符类型)、Hash(散列类型)、List(列表类型)、Set(集合类型)、SortedSet(有序集合类型,简称zset)、Bitmap(位图)、HyperLogLog(统计)、GEO(地理)、Stream
Stream(了解即可)- Redis Stream是 Redis 5.0 版本新增加的数据结构Redis Stream主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃。简单来说发布订阅(pub/sub)可以分发消息,但无法记录历史消息而Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。它算是redis自己消息功能的补充但是,一般主流MQ都固定了(Kafka/RabbitMQ/RocketMQ/Pulsar),我们只用redis做缓存,不做mq消息的发送命令不区分大小写,而key是区分大小写的
- String是Redis最基本的类型,一个key对应一个value。String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList存储( set key value) 获取(get key) 删除(del key)
分布式锁
应用场景一: 比如抖音无限点赞某个视频或者商品,点一下加一次
应用场景二: 是否喜欢的文章(阅读数:只要点击了rest地址,直接可以使用incr key 命令增加一个数字1,完成记录数字)
①. 列表list是一个单键多值的
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存,当数据量比较多的时候才会改成quicklist
list的场景–微信公众号订阅的消息
集合 Set1 大V作者李永乐老师和CSDN发布了文章分别是 11 和 22
2 关注了他们两个,只要他们发布了新文章,就会安装进我的List
lpush likearticle:小智id 11 22
3 查看自己的号订阅的全部文章,类似分页,下面0~10就是一次显示10条
lrange likearticle:小智id 0 9
set是可以自动排重的,不允许元素重复Set数据结构是dict字典,字典是用哈希表实现的
应用场景一:微信抽奖小程序
共同关注的人
推可能认识的人
Hash类型对应的数据结构是两种: ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable (Map
新增商品 → hset shopcar:uid1024 334488 1 新增商品 → hset shopcar:uid1024 334477 1 增加商品数量 → hincrby shopcar:uid1024 334477 1 商品总数 → hlen shopcar:uid1024 全部选择 → hgetall shopcar:uid1024有序集合 Zset
Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。不同之处是有序集合的每个成员都关联了一个评分(score),这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了
127.0.0.1:9736> zrange tops 0 -1 withscores 1) "java" 2) "100" 3) "mysql" 4) "200" 127.0.0.1:9736> zrevrangebyscore tops 300 100 1) "mysql" 2) "java" 127.0.0.1:9736> zrevrange tops 0 -1 1) "mysql" 2) "java"应用场景:商品进行排序显示 应用场景:抖音热搜
这里的值用了timestamp,实现了按照时间排序
- redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中
Redis持久化策略有哪些?(RDB、AOF)
Rdb:定时将数据保存在硬盘中(dump.rdb)
Aof:保存所有操作的命令RDB(持久化机制默认)
默认方式,不需要进行配置,默认就使用这种机制
在一定的间隔时间中,检测key的变化情况,然后持久化数据
日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据



