Redis的使用 | 青训营

56 阅读2分钟

Redis

01.Redis是什么

数据从单表演进出分库分表

MySQL从单机演进出集群:数据量增长、读写数据压力的不断增加

数据分冷热:热数据存储到内存中

02.Redis原理

  • 概念

    Redis是现在最受欢迎的NoSQL数据库之一,Redis是一个使用ANSI C编写的开源、包含多种数据结构、支持网络、基于内存、可选持久性的键值对存储数据库,其具备如下特性:

    • 基于内存运行,性能高效

    • 支持分布式,理论上可以无限扩展

    • key-value存储系统

    • 开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API

  • 原理

    • 数据从内存中读写

    • 数据保存到硬盘防止数据丢失

      • AOF文件

      • RDB文件

    • 单线程处理所有操作命令

03.Redis的使用

  • 1.连续签到String数据结构

GET/SET,Key过期

String数据结构:可以存储字符串、数字、二进制数据;通常配合expire使用;用于存储计数、Session

  • 2.消息通知List数据结构

用list作为消息队列

Quicklist:由一个双向链表和listpack实现

  • 3.计数Hash数据结构dict

一个用户有多项计数需求,可通过hash结构存储

hash数据结构dict:

rehash:将ht[0]中的数据全部迁移到ht[1]中。数据量小的场景下,直接将数据从ht[0]拷贝到ht[1]速度是较快的。数据量大的场景,迁移过程将会明显阻塞用户请求;渐进式rehash:每次用户访问时都会迁移少量数据,将整个迁移过程平摊到所有的访问用不请求过程中。

  • 4.排行榜zset数据结构zskiplist

使用setnx实现分布式锁

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

查找数字7的路径,head,3,3,7

结合dict(哈希)后可实现通过key操作跳表的功能

  • 5.限流

要求1秒内放行的请求为N,超过N则禁止访问

Key:comment_freq_limit_1671356046

对这个Key调用incr,超过限制N则禁止访问。1671356046是当前时间戳

  • 6.分布式锁

并发场景,要求一次只能有一个协程执行

执行完成后,其他等待中的协程才能执行

可以使用redis的setnx实现,利用了两个特性:Redis是单线程执行命令、setnx只有未设置过才能执行成功