redis完整笔记总结-数据类型-事务与锁-集群-分布式锁-常见问题(缓存穿透、击穿、雪崩)
1. 数据类型
五大基本类型
- String
- hash -> 类似map
- list
- set ->
- zset -> 基于set的有序集合
新增
- bitmaps:其实就是string,主要用于位运算,应用如登录记录等
- HyperLogLog:基数计算
- Geospatial:地图经纬度
2. 发布与订阅
发布者与订阅者在同一个频道时,订阅者可接收到发布者发布的消息。
3. 事务
队列模式,首先组队,然后依次执行。非原子性,
- 若组队中出错,则组队失败,不执行队列
- 若执行时出错,出错的语句执行失败,其他语句正常执行,不回滚
可以使用lua脚本,执行时具有原子性。
4. 锁
- redis乐观锁:使用watch监视key,然后使用队列,队列exec时,检查监视的key版本号是否更改,以此决定是否执行。
- 分布式锁:setnx命令
- 设置一个key value 在整个集群有效,同一时间只有一个人能拿到这个锁(key)
- 当锁的持有者删除这个锁时,其他人才能拿到
- 为了防止死锁,设置过期时间,要与加锁操作同时(原子性)
- 为防止操作到他人的锁,可以给value值设置一个自己的唯一值,如UUID
5. 持久化
分为rdb与aop,两者根据需求决定是否开启
- rdb为快照记录,损失数据的可能性较大,性能较好
- aop为日志记录,数据丢失率小,占用内存较多,性能较差
6. 主从
- 通过设置主机与从机,将多个redis联合
- 主机做增删改操作,从机只能读
- 薪火相传:主机有从机,从机又可以有从机,薪火相传。
- 反客为主:主机挂掉之后,从机可手动上升为主机,原来的主机变为从机
- 哨兵:通过哨兵监视主机的运行状态,若判定主机挂掉,则在从机中选举一个晋升为主机,原来的主机降级为从机,选举受影响最大的是设置的优先级。
7. 集群
- 最少六台redis服务器才能组建集群
- 至少一主一从,主机挂掉从机自动上位,主机降级。
- redis集群采用无中心化方式,即无论从集群中哪一台服务器连接,都可以操作整个集群。
- 插槽:集群会给每个主机分配插槽,当插入数据时,首先会通过key计算出插槽值,然后插到对应插槽中,
- 可以设置集群的故障处理方式,当一个模块挂掉之后,整个集群停止或者能用的继续用。
8. 应用问题及解决
1. 缓存穿透
原因:
- 大量请求访问数据库和缓存中没有的数据,由于缓存中查不到,到数据库中查询,把数据库挤爆了,多发于恶意攻击
解决思路:
- 将查询的没有的字段也添加到缓存中,设置较短的过期时间,缓解数据库压力。
- 过滤拦截,如bitmaps或者布隆过滤器(二进制位图+哈希函数)
- 加锁,会降低效率
2. 缓存击穿
原因:
- 每个热门key过期了,导致一瞬间大量请求涌向数据库,数据库挂。
解决思路:
- 预防:监控热门key,快过期时自动添加时长;主动将一些热门的信息加到缓存中;延长这些key的过期时间。
- 锁
3. 缓存雪崩
原因:
- 某个时刻有大量key过期,导致数据库压力巨大,挂。
解决思路:
- 预防:避免大量key同时失效,即分散key的过期时间,可以使用随机数。
- 加锁
- 多级缓存架构,nginx+redis+ehcache等,繁琐
- 监视,在快过期时更新
4. 分布式锁问题
分布式锁的死锁等问题,见上方锁部分
redis完整笔记总结-数据类型-事务与锁-集群-分布式锁-常见问题(缓存穿透、击穿、雪崩)相关推荐
- Redlock——Redis集群分布式锁
欢迎关注方志朋的博客,回复"666"获面试宝典 前言 分布式锁是一种非常有用的技术手段.实现高效的分布式锁有三个属性需要考虑: 安全属性:互斥,不管什么时候,只有一个客户端持有锁 ...
- Redis缓存穿透击穿雪崩
目录 1.缓存穿透 2.缓存击穿 3.缓存雪崩 1.缓存穿透 概述: 缓存穿透的概念很简单,用户想要査询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库査询.发现也数据库 ...
- 顶级“Redis学习笔记”,缓存雪崩+击穿+穿透+集群+分布式锁,NB了
如果你是一位后端工程师,面试时八成会被问到 Redis,特别是那些大型互联网公司,不仅要求面试者能简单使用 Redis,还要深入理解其底层实现原理,具备解决常见问题的能力.可以说,熟练使用 Redis ...
- Redis 集群分布式锁与 API 网关分布式限流
https://www.infoq.cn/article/FoQGIk*BzdQWJJ0tKqrJ Redis 集群的历史 Redis 在 3.0 前一般有两种集群方案,一是 proxy(Twempr ...
- springboot + redis(兼容单机、哨兵、集群) + 分布式锁模拟抢手机
redis环境的搭建,可参考博主的文章 windows环境下 单机.集群.哨兵模式的redis环境_min开发的博客-CSDN博客windows环境下redis单机.集群.哨兵的部署https://b ...
- Redis缓存/穿透/击穿/雪崩
目录 1 缓存穿透 1.1 问题描述 1.2 产生原因 1.3 解决方案 2 缓存击穿 2.1 问题描述 2.2 解决方案 3 缓存雪崩 3.1 问题描述 3.2 解决方案: 1 缓存穿透 1.1 问 ...
- 一文搞懂Redis缓存穿透/击穿/雪崩
缓存穿透 问题描述 缓存穿透是指查询一个一定不存在的数据,由于缓存时不命中的,则需要从数据库中查询.查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库中去查询,进而增大了数据库的压力 ...
- Redis完整笔记--狂神
Redis 一.Nosql 为什么使用Nosql 1.单机Mysql时代 90年代,一个网站的访问量一般不会太大,单个数据库完全够用.随着用户增多,网站出现以下问题 数据量增加到一定程度,单机数据库就 ...
- Redis全部知识总结(概念、安装、用法、数据类型、事务、持久化、Jeids、订阅系统、缓存穿透及雪崩等)
Redis NoSql简述 Nosql概念 Nosql的四大分类 Redis概述 Redis的安装 安装文件 Window下安装 Linux下安装 redis-benchmark 压力测试工具 五大数 ...
最新文章
- php-fpm的pool,php-fpm慢执行日志,open_basedir,php-fpm进程管理
- Linux-unit12
- oauth最后的确认按钮_绕过GitHub的OAuth授权验证机制($25000)
- C二维数组行为空,列不为空
- RK3399如何选择系统呢?
- vs2017c语言图像界面库,C語言中在VS2017中構建圖形界面基礎知識點
- linux内核之内存管理.doc,linux内核之内存管理.doc
- android wifi在待机状态下可用,Android APP休眠状态下无法联网和播放音频解决方案...
- css3 动画 vs js 动画
- MySQL触发器写入Sqlseever_sqlserver 触发器实例
- Java代码审计详解
- 未来不迎,当时不杂,过往不乱
- 相机焦距与视场角FOV
- 昨日皇者——Symbian(塞班)
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
- no theme named ‘sphinx_rtd_theme‘ found (missing theme.conf?)
- 色彩空间与色彩模型 RGB/CMYK/YCbCr/HSB/HSI/HSV
- git 新建分支并切换到该分支_Git 从master拉取代码创建新分支 并且再将修改合并到master...
- SLF4J日志框架在项目中使用
- 侯捷先生的Design Patterns高级课程