3. Redis(String,Stream,List,Set,Zset,Hash)

3. Redis(String,Stream,List,Set,Zset,Hash)_第1张图片

常用五大数据类型

9大类型:String(字符类型)、Hash(散列类型)、List(列表类型)、Set(集合类型)、SortedSet(有序集合类型,简称zset)、Bitmap(位图)、HyperLogLog(统计)、GEO(地理)、Stream

Stream(了解即可)

  1. Redis Stream是 Redis 5.0 版本新增加的数据结构
  2. Redis Stream主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃。简单来说发布订阅(pub/sub)可以分发消息,但无法记录历史消息
  3. 而Redis Stream 提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。它算是redis自己消息功能的补充
  4. 但是,一般主流MQ都固定了(Kafka/RabbitMQ/RocketMQ/Pulsar),我们只用redis做缓存,不做mq消息的发送
  5. 命令不区分大小写,而key是区分大小写的

String

  1. String是Redis最基本的类型,一个key对应一个value。
  2. String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象
  3. String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M
    String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。是可以修改的字符串,内部结构实现上类似于Java的ArrayList
  4. 存储( set key value) 获取(get key) 删除(del key)

3. Redis(String,Stream,List,Set,Zset,Hash)_第2张图片

分布式锁
3. Redis(String,Stream,List,Set,Zset,Hash)_第3张图片

String应用场景

应用场景一: 比如抖音无限点赞某个视频或者商品,点一下加一次

应用场景二: 是否喜欢的文章(阅读数:只要点击了rest地址,直接可以使用incr key 命令增加一个数字1,完成记录数字)
3. Redis(String,Stream,List,Set,Zset,Hash)_第4张图片

列表 list

①. 列表list是一个单键多值的
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差
在这里插入图片描述
3. Redis(String,Stream,List,Set,Zset,Hash)_第5张图片

List的数据结构为快速链表quickList

  • 首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表
  • 它将所有的元素紧挨着一起存储,分配的是一块连续的内存,当数据量比较多的时候才会改成quicklist
    在这里插入图片描述

list的场景–微信公众号订阅的消息

1 大V作者李永乐老师和CSDN发布了文章分别是 11 和 22
2 关注了他们两个,只要他们发布了新文章,就会安装进我的List
lpush likearticle:小智id 11 22
3 查看自己的号订阅的全部文章,类似分页,下面0~10就是一次显示10条
lrange likearticle:小智id 0 9

集合 Set

  • set是可以自动排重的,不允许元素重复
  • Set数据结构是dict字典,字典是用哈希表实现的
    3. Redis(String,Stream,List,Set,Zset,Hash)_第6张图片

应用场景一:微信抽奖小程序

3. Redis(String,Stream,List,Set,Zset,Hash)_第7张图片

应用场景二:微信朋友圈点赞

3. Redis(String,Stream,List,Set,Zset,Hash)_第8张图片

应用场景三:微博好友关注社交关系

共同关注的人
3. Redis(String,Stream,List,Set,Zset,Hash)_第9张图片
推可能认识的人
3. Redis(String,Stream,List,Set,Zset,Hash)_第10张图片

哈希 hash

Hash类型对应的数据结构是两种: ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable (Map>)
3. Redis(String,Stream,List,Set,Zset,Hash)_第11张图片

应用场景:购物车模块

新增商品 → 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)被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但是评分可以是重复了
3. Redis(String,Stream,List,Set,Zset,Hash)_第12张图片

应用场景:实现一个文章访问量的排行榜

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"

应用场景:商品进行排序显示3. Redis(String,Stream,List,Set,Zset,Hash)_第13张图片

应用场景:抖音热搜

3. Redis(String,Stream,List,Set,Zset,Hash)_第14张图片

在这里插入图片描述

这里的值用了timestamp,实现了按照时间排序
3. Redis(String,Stream,List,Set,Zset,Hash)_第15张图片

持久化

  1. redis是一个内存数据库,当redis服务器重启,获取电脑重启,数据会丢失,我们可以将redis内存中的数据持久化保存到硬盘的文件中
    Redis持久化策略有哪些?(RDB、AOF)
    Rdb:定时将数据保存在硬盘中(dump.rdb)
    Aof:保存所有操作的命令
  2. RDB(持久化机制默认)
    默认方式,不需要进行配置,默认就使用这种机制
    在一定的间隔时间中,检测key的变化情况,然后持久化数据
    3. Redis(String,Stream,List,Set,Zset,Hash)_第16张图片

日志记录的方式,可以记录每一条命令的操作。可以每一次命令操作后,持久化数据
3. Redis(String,Stream,List,Set,Zset,Hash)_第17张图片

你可能感兴趣的:(redis6,redis,哈希算法,java)