Redis基本数据结构
# Redis基本数据结构
redis提供了5种常用的数据结构。
# 常用的
已经涵盖了开发过程中的绝大多数情况
下面列举的应用场景是包括但不限于
# string
字符串是最基本的Redis值。Redis字符串是二进制安全的,这意味着Redis字符串可以包含任何类型的数据,例如JPEG图像或序列化的Ruby对象。 字符串的长度最大为512兆字节。
内部的实现是通过 SDS(Simple Dynamic String )来存储的。SDS 类似于 Java 中的 ArrayList,可以通过预分配冗余空间的方式来减少内存的频繁分配。
应用场景:
分布式锁
缓存功能
利用自增的API作为原子计数器,统计阅读量,点赞数
Web集群的session
分布式系统全局序列号
# hash
类似Map的一种结构.场景单一 应用场景:
- 电商购物车
# list
有序列表。存储一些列表型的数据结构,类似粉丝列表、文章的评论列表之类的东西。
应用场景:
- 微博和公众号的消息流
- 商品评论,文章列表或者数据分页展示的应用。
- 消息队列:Redis的链表结构,可以轻松实现阻塞队列,可以使用左进右出的命令组成来完成队列的设计。比如:数据的生产者可以通过Lpush命令从左边插入数据,多个数据消费者,可以使用BRpop命令阻塞的“抢”列表尾部的数据。
# set
会自动去重的无序集合。
应用场景:
- 抽奖(从集合中随机弹出一个元素,元素出一个删一个)
- 微信朋友圈点赞、收藏、标签
- 微信微博关注模型
# zset
会自动去重的有序集合。
应用场景:
- 抖音微博热搜
- 商品销售榜,根据销售量进行排行
- 用Sorted Sets来做带权重的队列
基于上面的五种结构,还提供了几种基于上面结构的扩展。
# 扩展结构
# bitmap
基于String类型扩展出来的数据结构,按照Bit位来存储信息
应用场景:
- 布隆过滤器
# hyperloglog
提供不精确的去重计数功能,适合大规模数据的去重统计
应用场景:
- 亿级别的UV统计
# GEO
用于保存地理位置信息,并提供了位置距离计算或者根据半径计算的API。
还有不常用的扩展功能
# 扩展功能
# pub/sub
提供了简单的消息队列,不常用,用的最多的还是mq
# pipeline
像是Linux的管道
# Lua 脚本
特点是能够原子性执行
# 事务
Redis 提供的不是严格的事务,Redis 只保证串行执行命令,并且能保证全部执行,但是执行命令失败时并不会回滚,而是会继续执行下去。
- 01
- 以 root 身份启动 transmission-daemon12-13
- 02
- Debian系统安装qbittorrent-nox12-09
- 03
- LXC Debain12安装zerotier并实现局域网自动nat转发07-29