Redis是什么
Redis(全称为Remote Dictionary Server)是一个开源的高性能键值对存储系统,具有快速、灵活和可扩展的特性。它是一个基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理。
Redis 支持多种数据结构,包括字符串(String)、哈希(Hash)、列表(List)、集合(Set)和有序集合(Sorted Set)。这些数据结构提供了丰富的操作命令,使得开发者可以方便地处理各种数据需求。此外,Redis 还提供了两种持久化方式,即快照(Snapshotting)和日志追加(Append-only file,AOF)。快照方式将 Redis 内存数据以二进制格式写入磁盘,而 AOF 则通过追加记录 Redis 的操作命令来实现持久化。
Redis 还支持发布/订阅模式,可以用作消息代理。发布者将消息发送到指定的频道,订阅者则可以接收和处理这些消息。这种模式在构建实时通信、事件驱动系统和消息队列等场景中非常有用。此外,Redis 还可以通过主从复制和分片来实现数据的分布式存储和高可用性。主从复制可以将数据复制到多个从节点,实现读写分离和数据备份。而分片则可以将数据分布在多个 Redis 节点上,实现横向扩展和负载均衡。
下面就让我们跟随笔记学习一下redis的概念和应用。
为什么需要Redis
- 数据分冷热
- 热数据:经常被访问到的数据
- 将热数据存储到内存中
Redis的基本工作原理
一旦重启,数据会丢失? 怎么预防呢?
Redis能在服务器上做到持久化。
下面是Redis架构
RDB文件保存Redis所有实例文件
单进程处理
Redis应用案例
- 连续签到
- 消息通知
- 计数
- 排行榜
- 限流
- 分布式锁
涉及到的一些包的解释:
context:提供上下文用于处理请求的截止时间、取消信号等。fmt:用于格式化输出strconv:用于字符串和基本数据类型之间的转换time:用于时间相关操作github.com/redis/go-redis/v9:这是go语言的redis客户端库。
下载安装redis
1 连续签到
string数据结构
2 消息通知
文章10-13相当于单链表,里面含有数据,文章14相当于监听器,检测链表头。
List数据结构 Quicklist Quicklist由一个双向链表和listpack实现
3 计数
Hask数据结构dict
4 排行榜
积分变化时,排名要实时变更
结合dict后,可实现通过key操作跳表的功能
- ZINCRBY myzset"Alex"
- ZSCORE myzset "Alex"
zset数据结构zskiplist
zskiplist是跳跃表和哈希表的结合,如下图,上面是跳跃表框架,下面是哈希表。
最高层数是4层,一般来说不会超过四层。
5限流
6 分布式锁
并发场景,要求一次只能有一个协程执行。执行完毕后,其他等待中的协程才能执行。
可以使用redis的setnx实现,利用两个特性
- Redis是单线程执行命令
- setnx只有未设置过才能执行成功