Redis-大厂程序员是怎么用的 | 青训营

536 阅读3分钟

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

image.png

  • 数据分冷热
    • 热数据:经常被访问到的数据
  • 将热数据存储到内存中

image.png

Redis的基本工作原理

一旦重启,数据会丢失? 怎么预防呢?

Redis能在服务器上做到持久化。

下面是Redis架构

RDB文件保存Redis所有实例文件

image.png

单进程处理

image.png

Redis应用案例

  • 连续签到
  • 消息通知
  • 计数
  • 排行榜
  • 限流
  • 分布式锁

涉及到的一些包的解释:

  • context:提供上下文用于处理请求的截止时间、取消信号等。
  • fmt:用于格式化输出
  • strconv:用于字符串和基本数据类型之间的转换
  • time:用于时间相关操作
  • github.com/redis/go-redis/v9 :这是go语言的redis客户端库。

blog.csdn.net/u011334954/…

下载安装redis

1 连续签到

image.png

string数据结构 image.png

2 消息通知

image.png 文章10-13相当于单链表,里面含有数据,文章14相当于监听器,检测链表头。

List数据结构 Quicklist Quicklist由一个双向链表和listpack实现

image.png

image.png

3 计数

image.png

Hask数据结构dict

image.png

4 排行榜

积分变化时,排名要实时变更

结合dict后,可实现通过key操作跳表的功能

  • ZINCRBY myzset"Alex"
  • ZSCORE myzset "Alex"

image.png

zset数据结构zskiplist

image.png

zskiplist是跳跃表和哈希表的结合,如下图,上面是跳跃表框架,下面是哈希表。

image.png

最高层数是4层,一般来说不会超过四层。

5限流

image.png

6 分布式锁

并发场景,要求一次只能有一个协程执行。执行完毕后,其他等待中的协程才能执行。

可以使用redis的setnx实现,利用两个特性

  • Redis是单线程执行命令
  • setnx只有未设置过才能执行成功

image.png