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完整笔记总结-数据类型-事务与锁-集群-分布式锁-常见问题(缓存穿透、击穿、雪崩)相关推荐

  1. Redlock——Redis集群分布式锁

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 分布式锁是一种非常有用的技术手段.实现高效的分布式锁有三个属性需要考虑: 安全属性:互斥,不管什么时候,只有一个客户端持有锁 ...

  2. Redis缓存穿透击穿雪崩

    目录 1.缓存穿透 2.缓存击穿 3.缓存雪崩 1.缓存穿透 概述: 缓存穿透的概念很简单,用户想要査询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库査询.发现也数据库 ...

  3. 顶级“Redis学习笔记”,缓存雪崩+击穿+穿透+集群+分布式锁,NB了

    如果你是一位后端工程师,面试时八成会被问到 Redis,特别是那些大型互联网公司,不仅要求面试者能简单使用 Redis,还要深入理解其底层实现原理,具备解决常见问题的能力.可以说,熟练使用 Redis ...

  4. Redis 集群分布式锁与 API 网关分布式限流

    https://www.infoq.cn/article/FoQGIk*BzdQWJJ0tKqrJ Redis 集群的历史 Redis 在 3.0 前一般有两种集群方案,一是 proxy(Twempr ...

  5. springboot + redis(兼容单机、哨兵、集群) + 分布式锁模拟抢手机

    redis环境的搭建,可参考博主的文章 windows环境下 单机.集群.哨兵模式的redis环境_min开发的博客-CSDN博客windows环境下redis单机.集群.哨兵的部署https://b ...

  6. Redis缓存/穿透/击穿/雪崩

    目录 1 缓存穿透 1.1 问题描述 1.2 产生原因 1.3 解决方案 2 缓存击穿 2.1 问题描述 2.2 解决方案 3 缓存雪崩 3.1 问题描述 3.2 解决方案: 1 缓存穿透 1.1 问 ...

  7. 一文搞懂Redis缓存穿透/击穿/雪崩

    缓存穿透 问题描述 缓存穿透是指查询一个一定不存在的数据,由于缓存时不命中的,则需要从数据库中查询.查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到数据库中去查询,进而增大了数据库的压力 ...

  8. Redis完整笔记--狂神

    Redis 一.Nosql 为什么使用Nosql 1.单机Mysql时代 90年代,一个网站的访问量一般不会太大,单个数据库完全够用.随着用户增多,网站出现以下问题 数据量增加到一定程度,单机数据库就 ...

  9. Redis全部知识总结(概念、安装、用法、数据类型、事务、持久化、Jeids、订阅系统、缓存穿透及雪崩等)

    Redis NoSql简述 Nosql概念 Nosql的四大分类 Redis概述 Redis的安装 安装文件 Window下安装 Linux下安装 redis-benchmark 压力测试工具 五大数 ...

最新文章

  1. php-fpm的pool,php-fpm慢执行日志,open_basedir,php-fpm进程管理
  2. Linux-unit12
  3. oauth最后的确认按钮_绕过GitHub的OAuth授权验证机制($25000)
  4. C二维数组行为空,列不为空
  5. RK3399如何选择系统呢?
  6. vs2017c语言图像界面库,C語言中在VS2017中構建圖形界面基礎知識點
  7. linux内核之内存管理.doc,linux内核之内存管理.doc
  8. android wifi在待机状态下可用,Android APP休眠状态下无法联网和播放音频解决方案...
  9. css3 动画 vs js 动画
  10. MySQL触发器写入Sqlseever_sqlserver 触发器实例
  11. Java代码审计详解
  12. 未来不迎,当时不杂,过往不乱
  13. 相机焦距与视场角FOV
  14. 昨日皇者——Symbian(塞班)
  15. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
  16. no theme named ‘sphinx_rtd_theme‘ found (missing theme.conf?)
  17. 色彩空间与色彩模型 RGB/CMYK/YCbCr/HSB/HSI/HSV
  18. git 新建分支并切换到该分支_Git 从master拉取代码创建新分支 并且再将修改合并到master...
  19. SLF4J日志框架在项目中使用
  20. 侯捷先生的Design Patterns高级课程

热门文章

  1. 2012年至今,细数深度学习领域这些年取得的经典成果
  2. 【306】通过ArcPy编写ArcToolbox
  3. iOS学习资源(二)
  4. PO、VO、FormBean的思考
  5. 基于Jquery插件Uploadify实现实时显示进度条上传图片
  6. win32 打印机api
  7. 再学 GDI+[56]: 路径 - Warp
  8. FilteredTextBoxExtender
  9. Windows 2003服务器维护的几个技巧
  10. 帆软填报增加记录提交成功后没有_大病医疗填报图解