Redis使用及场景 | 青训营

55 阅读3分钟

//为避免浪费时间,请尽快退出

为什么需要 Redis

  • 数据从单表演进出分库分表
  • MySQL 从单机演进出集群
    • 数据量增长
    • 读写数据压力不断增长 搭配 Redis 改进 \downarrow
  • 数据分冷热
    • 热数据:经常被访问到的数据
  • 将热数据存储到内存中

Redis 基本工作原理

(一定程度持久化

  • 数据从内存中读写
  • 数据保存到硬盘上防止重启数据丢失
    • 增量数据保存到 AOF 文件
    • 全量数据 RDB 文件
  • 单线程处理所有命令

Redis 实际应用场景

  1. 连续签到
    • key
    • value
    • expireAt

string 数据结构 通常和 expire 配合使用 场景:存储计数、session

  1. 消息通知 list 作为消息队列

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

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

dict rehash: rehash 操作是将 ht[0]中的数据,全部迁移到 ht[1]中。数据量小的场景下,直接将数据从 ht[0]拷贝到 ht[1]速度是较快的。数据量大的场景,例如存有上百万的 KV 时,迁移过程将会明显阻塞用户请求。 渐进式 rehash: 为避免出现这种情况,使用了 rehash 方案。基本原理就是,每次用户访问时都会迁移少量数据。将整个迁移过程,平摊到所有的访问用不请求过程中。

  1. 排行榜

  2. 限流

  3. 分布式锁

字符串 string

区分大小写

键值对存储, 以二进制形式

命令功能
SET
GET
DEL
EXISTS
KEYS
FLUSHALL
clear
TTL查看过期时间
EXPIRE/SETEX设置过期时间
SETNS只有当键不存在时才设置键的值
redis-cli --raw 可以显示中文

列表 L

命令功能
LPUSH/RPUSH
LRANGE
LPOP/RPOP
LLEN
LTRIM删除指定范围以外的数

集合 S

命令功能
SADD
SMEMBERS查看集合元素
SISMEMBER
SREM删除集合中元素
支持集合运算

有序集合 Z

命令功能
ZADD
ZRANGE (WITHSCORES)键值
ZSCORE
ZRANK/ZREVRANK排名

哈希 H

同默认, 前面+H

发布订阅

命令功能
PUBLISH将消息发送到指定的频道
SUBSCRIBE订阅频道

消息队列 X

stream 解决订阅消息无法持久化,无法记录历史消息等等

命令功能
XADD
XLEN
XRANGE
XTRIM删除消息
eg. XTRIM name MAXLEN 0 删除所有消息
XREAD COUNT 2 BLOCK 1000 STREAMS name 0
      读两条        if 没读取阻塞 1000ms    从 0 读

地理空间 GEO

命令功能
GOPOS获取一个地方经纬度
GEODIST获取两个地方直线距离
GEOSEARCH一个地方/经纬度附近 xx 的圆形区域周围城市

HyperLogLog PF

是一种用来做基数统计的算法,牺牲一定精度,占用内存小,缺点是有一定的误差 基数:如果集合中的每个元素都是唯一且不重复的,那么基数就是集合中元素的个数

位图 BIT

字符串类型的拓展

命名功能
SETBIT
GETBIT
SET用字符串/二进制来设置
BITCOUNT
BITPOS第一个出现 0/1 的位置

位域