导图社区 Redis
这是一篇关于Redis的思维导图,包括高并发高可用,存在问题,redis失去,过期时间,概念,数据一致性等内容
这是一篇关于JVM的思维导图,JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的
这是一篇关于Mybatis的思维导图,Java开发中常用SSM(Spring,SpringMVC,Mybatis)组合中的Mybatis框架的使用要点
这是一篇关于Mysql的思维导图,MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
社区模板帮助中心,点此进入>>
安全教育的重要性
个人日常活动安排思维导图
西游记主要人物性格分析
17种头脑风暴法
如何令自己更快乐
头脑风暴法四个原则
思维导图
第二职业规划书
记一篇有颜又有料的笔记-by babe
伯赞学习技巧
Redis
数据一致性
读
先读缓存
缓存中存在
直接返回
缓存中不存在
读数据库
更新缓存
写
先写数据库再删除缓存
先写缓存再删除数据库
概念
数据存在内存中的数据库
高性能,高并发
文件事件处理器(file event handler)
多个socket
IO多路复用程序
文件事件分派器
事件处理器
连接应答处理器
命令请求处理器
命令回复处理器
支持的数据类型
String
常用命令:set,get,decr,incr,mget 等
常规计数:微博数,粉丝数等
常规Key-Value缓存应用
List
常用命令: lpush,rpush,lpop,rpop,lrange等
适合存储:消息列表,粉丝列表等
双向列表,操作方便,内存开销大
lrange查询某个元素后多少个元素,实现分页
Set
常用命令: sadd,spop,smembers,sunion 等
可自动重排的列表
提供查询某个元素是否存在的接口
ZSet
常用命令: zadd,zrange,zrem,zcard等
比set多了一个权重参数score,可以按照score排序
Hash
常用命令: hget,hset,hgetall 等
适合存储对象
持久化
AOF
appendonly yes开启AOF
三种方式
appendfsync always
appendfsync everysec
appendfsync no
RDB
默认持久化方式
创建某个时间点的快照副本
AOF+RDB
aof-use-rdb-preamble 开启
4.0以后有
AOF中RDB部分是压缩的,可读性差
过期时间
可以对每个元素设置过期时间
过期删除
定期删除
100ms
随机删除
惰性删除
需要手工检查删除
内存淘汰机制
volatile:已设置过期时间数据集 allkeys:键空间 lru:最少使用 ttl:过期 lfu:不经常使用
volatile-lru:已设置过期时间的数据集-》最近最少使用的数据
volatile-ttl
volatile-random
allkeys-lru
allkeys-random
volatile-lfu
allkeys-lfu
redis 事务
通过 MULTI、EXEC、WATCH 等命令来实现事务(transaction)功能
原子性(Atomicity)、一致性(Consistency)和隔离性(Isolation)
存在的问题
缓存雪崩
缓存大面积失效,请求大量落在数据库上
事前:保证Redis机器高可用
事中:本地缓存,限流
事后:利用持久化数据快速恢复缓存
缓存穿透
请求数据在缓存中不存在
布隆过滤器
过滤无效请求
缓存击穿
热点key突然失效
基本不更新数据
调整失效时间为永久不失效
更新不频繁数据
使用分布式锁,让部分请求通过重新构建缓存
频繁更新数据
定时在缓存失效前重新构建缓存
并发竞争Key
多个系统对同一个key操作,执行顺序无法控制
利用zookeeper分布式锁
RedLock
特性
只有一个client可以得到锁
所有client最终都会得到锁,不存在死锁
只要大部分节点存活就可以运行
SET resource_name my_random_value NX PX 30000实现单节点分布式锁
数据库和缓存的数据一致性
读写串行队列
高并发高可用
主从结构
哨兵