Redis学习笔记知识整理-公开
2021-08-18 15:04:50 0 举报
AI智能生成
Redis学习笔记知识整理-公开
作者其他创作
大纲/内容
Nosql介绍
3V+3高
海量多样实时
高并发,高扩展,高性能
C:强一致性 A:高可用性 P:分布式容忍性
CA 传统Oracle数据库
AP 大多数网站架构的选择
CP Redis、Mongodb
BASE其实是下面三个术语的缩写:
基本可用(Basically Available)
软状态(Soft state)
最终一致(Eventually consistent)
Redis入门
好处
速度快
持久化
支持丰富数据类型
支持事务
丰富的特性:可用于缓存,消息,按key设置过期时间,过期后将会自动删除
Master-Slave模式备份
Http://redis.io/
Http://www.redis.cn/
Redis基础数据结构
Value的不同
5种数据类型
String
setex
expire
List
队列,栈桢,索引
ziplist
quicklist
hash
渐进式rehash策略
set
zset
容器型数据结构的通用规则
create if not exists
drop if no elements
过期时间
Redis 所有的数据结构都可以设置过期时间
过期是以对象为单位
调用了 set 方法修改了它,它的过期时间会消失
持久化
RDB
缺点:
丢失数据
内存膨胀
AOF
重写
都会丢失数据
事务
3阶段
开启,入队,执行
multi
3特性
隔离,但是没有隔离级别,不保证原子性(没有回滚)
发布订阅
复制
Master-Slave
一主二仆
薪火相传
反客为主
Saveof no one
复制原理
哨兵模式
缺点
延迟
集群
redisCluster的缺陷
a,键的批量操作支持有限,比如mset, mget,如果多个键映射在不同的槽,就不支持了
b,键事务支持有限,当多个key分布在不同节点时无法使用事务,同一节点是支持事务
c,键是数据分区的最小粒度,不能将一个很大的键值对映射到不同的节点
d,不支持多数据库,只有0,select 0
e,复制结构只支持单层结构,不支持树型结构。
使用jedis的JedisCluster做服务端集群,ShardedJedisPool做客户端分片
管道
JedisAPi
JedisSentinelPool,ShardedJedi
Redis应用
所谓原子操作是指不会被线 作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch 线程切换。
分布式锁
原子性
超时
可重入性
不建议使用
延时队列
超时服务器会自动断开
blpop
位图
HyperLogLog
UV统计去重统计
布隆过滤器
去掉存在的
简单限流
每一个行 为到来时,都维护一次时间窗口。将时间窗口外的记录全部清理掉,只保留窗口内的记录。
但这种方案也有缺点,因为它要记录时间窗口内所有的行为记录,如果这 个量很大,它是不适合做这样的限流 的,因为会消耗大量的存储空间。
漏斗限流
Redis-Cell
cl.throttle
GeoHash
在集群环境中单个 key 对应的数据量不宜超过 1M,否则会导致集群迁移出现 卡顿现象,影响线上服务的正常运行
scan
渐进式 rehash
大 key 扫描
redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1
6种数据淘汰策略
mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据
请用Redis和任意语言实现一段恶意登录保护的代码,限制1小时内每用户Id最多只能登录5次。
Maxmemory-samples:设置样本数量
Maxmemory-policy
Memcache与Redis的区别都有哪些?
存储方式
数据支持类型
使用底层模型不同
value大小
Redis 常见的性能问题都有哪些
Master写内存快照,save命令
Master AOF持久化
某个Slave开启AOF备份数据,策略为每秒同步一次
Master调用BGREWRITEAOF重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源
Redis主从复制的性能问题
最适合的场景
会话缓存(Session Cache)
全页缓存(FPC)
队列
排行榜/计数器
发布/订阅
缺点
Redis的主要缺点是数据库容量受到物理内存的限制,不能用作海量数据的高性能读写,
因此Redis适合的场景主要局限在较小数据量的高性能操作和运算上。
Redis是单进程单线程的
redis的并发竞争问题如何解决???
会有吗
集群
Redis集群方案应该怎么做?都有哪些方案?
Redis集群方案什么情况下会导致整个集群不可用?
原理
线程 IO 模型
通信协议
持久化
fork
AOF 重写
管道
这个技术本质上是由客户端提供的
事务
PubSub
消息多播
小对象压缩
ziplist
主从同步
集群
Sentinel
Codis
是 Redis 集群方案之一,是中国人开发并开源的
Cluster
拓展
Stream
Info 指令
再谈分布式锁
主从节点同步
Redlock 算法
大多数算法
需要考虑出错重试、时钟漂移等很多细节问题
过期策略
贪心策略
过期算法
LRU
链表
近似LRU算法
懒惰删除
优雅地使用 Jedis
异常
封装
重试
保护 Redis
Redis 安全通信
spiped 就是这样的一款 SSL 代理 软件,它是 Redis 官方推荐的代理软件
源码
探索「字符串」内部结构
SDS,Simple Dynamic String
在长度特别短时,使用 emb 形式存储 (embeded),当 长度超过 44 时,使用 raw 形式存储。
扩容策略
探索「字典」内部
渐进式 rehash
缩容条件
探索「压缩列表」内部
探索「快速列表」内部
探索「跳跃列表」内部结构
探索「紧凑列表」内部
探索「基数树」内部
Rax
5.0新功能
多线程
收藏
收藏
0 条评论
下一页