这是我参与[第五届青训营]伴学笔记创作活动的第12天 主要包括以下四部分内容
- 为什么使用Redis
- Redis的使用场景
- Redis的常见命令
- 使用Redis的注意事项
概述
通过 Redis 来做分布式锁是一种比较常见的方式。
Redis的list可以作为一个简单的消息队列来使用
一般是通过 Redis + Lua 脚本的方式来实现限流。
为什么需要Redis?
Redis 内部做了非常多的性能优化,比较重要的主要有下面 3 点:
- Redis 基于内存,内存的访问速度是磁盘的上千倍;
- Redis 基于 Reactor 模式设计开发了一套高效的事件处理模型,主要是单线程事件循环和 IO 多路复用(Redis 线程模式后面会详细介绍到);
- Redis 内置了多种优化过后的数据结构实现,性能非常高。
Redis的五种数据结构
- 5 种基础数据结构 :String(字符串)、List(列表)、Set(集合)、Hash(散列)、Zset(有序集合)。
- 3 种特殊数据结构 :HyperLogLogs(基数统计)、Bitmap (位存储)、Geospatial (地理位置)。
Redis持久化的两种方式:ROF(保存增量数据的日志文件)/AOB(保存全量数据的日志文件)
Redis的基本操作
- GET/SET/DEL/INCR/SETNX
- HSET/HGET/HINCRBY
- LPUSH/RPOP/LRANGE
- ZADD/ZRANGEBYSCORE/ZREVRANGE/ZINCRBY/ZSCORE
在字节跳动,使用Redis有哪些注意事项
- 缓存穿透(热点数据查询绕过缓存,直接查询数据库)、缓存雪崩(大量缓存同时过期) 解决方案:(1)缓存空值(2)布隆过滤器
- 慢查询场景(一次操作过多的Key(mset/hmset/sadd/zadd),导致redis慢查询的操作比如单批次不要超过100,不然性能下降)
- 大Key(某个key对应的value很大,占用的redis空间很大 ,使用大Key将导致Redis系统不稳定)、热Key(用户访问一个key的QPS特别高,导致出现CPU负载突增或者不均的情况,将导致Redis实例出现负载突增,负责均衡流量不均的情况。导致单实例故障)