redis入门

redis的常见五种数据类型

String类型

  • String类型,类似于java中的String类型,常见使用get,set方法。

  • String类型还可以存储json字符串格式。

Hash类型

  • Hash类型,也叫散列,它的value是一个无序字典,类似于java中HashMap

  • Hash类型的常用命令:

List类型:

  • Redis中的List类型与java中的LinkedList相类似,可以看做一个双向链表的结构,即支持正向检索,又支持反向检索。

  • 特征也与java的LinkedList类似

    有序

    元素可重复

    插入和删除速度快

    查询速度一般

  • List类型常用命令

  • 使用List模拟栈、队列、阻塞队列

Set类型

Redis的Set结构与Java中的HashSet类似,可以看做是一个value为null的HashMap。因为也是一个hash表,因此具备与HashSet类似的特征:

  • 无序
  • 元素不可重复
  • 查找快
  • 支持并集,交集,差集

Set常用命令:

redis实战(黑马点评)

短信验证码的登录注册功能

商家查询的缓存功能

redis缓存:查询的时候先查询redis,redis有直接返回,redis没有再查数据库

1、缓存更新

缓存更新的三种策略

内存淘汰:redis自带的内存淘汰机制

过期淘汰:利用expire命令给数据设置过期时间(TTL)

主动更新:主动完成数据库与缓存的同时更新

主动更新的三种方案

策略选择

低一致性需求:内存淘汰或过期淘汰

高一致性需求:主动更新为主,过期淘汰兜底

Cache Aside模式的选择

  1. 更新缓存还是删除缓存?

    更新缓存会产生很多无效更新,并存在较大的线程安全问题。

    删除缓存本质是延迟更新,没有无效更新,线程安全问题相对较低

  2. 先操作数据库还是缓存?

    先更新数据,再删除缓存——在满足原子性的情况下,安全问题概率较低

    先删除缓存,再更新数据库——安全问题概率较高

  3. 如何确保数据库与缓存操作原子性

    单体系统——利用事务机制

    分布式系统——使用分布式事务

最佳实践

查询数据时:

  1. 先查询缓存
  2. 如果缓存命中,直接返回
  3. 如果缓存未命中,则查询数据库
  4. 将数据库数据写入缓存
  5. 返回结果

修改数据库时:

  1. 先修改数据库
  2. 然后删除缓存
  3. 增加事务,确保两者的原子性

2、缓存穿透

产生原因

客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库

解决方案

缓存空对象

对于不存在的数据也在redis、建立缓存,值为空,并设置一个较短的TTl时间

布隆过滤

利用布隆过滤算法,在请求进去redis之前先判断是否存在,如果不存在则直接拒绝请求

其他

3、缓存雪崩

产生原因

在同一时段大量的缓存key同时失效或者redis服务宕机,导致大量请求到达数据库,带来巨大压力。

解决方案

4、缓存击穿(热点key)

产生原因

热点key在某一时间被高并发访问,缓存重建好事较长。

热点key突然过期,因为重建耗时长,在这段时间内大量请求落到数据库,带来巨大冲击

解决方案

互斥锁

逻辑过期

黑马2022最新redis课程笔记知识点(面试用)持续更新的更多相关文章

  1. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...

  2. 4W字的后端面试知识点总结(持续更新)

    点赞再看,养成习惯,微信搜索[三太子敖丙]关注这个互联网苟且偷生的工具人. 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试完整考点.资料以及我的 ...

  3. html知识点汇总(持续更新中)

    本人从事前端行业三年多,打算从今天开始整理一些关于前端的一些比较经典的知识点,持续更新中...希望能对一些相关知识点有疑问的朋友有一些帮助! HTML篇: 1.常见的行内元素/块级元素/空元素有哪些? ...

  4. 【Python灰帽子--黑客与逆向工程师的Python编程之道】我的学习笔记,过程.(持续更新HOT)

    我的学习笔记---python灰帽子 世界让我遍体鳞伤,但伤口长出的却是翅膀. -------------------------------------------- 前言 本书是由知名安全机构Im ...

  5. react知识点总结(持续更新。。。)

    一.webpack 1. 什么是以及为什么要使用webpack 现在的网页功能越来越丰富,所需要的JavaScript和模块也会很多,为开发更加简洁,出现了以下方法,如模块化,scss,typescr ...

  6. 关于JavaScript初级的知识点一(持续更新 )

    自己刚开始接触JS这是自己一个多月以来的一些总结和回顾. 一.什么是js? js是一种弱类型的脚本语言,是HTML的3大组成部分之一.HTML标签 CSS样式 JS脚本. 二.js的5种基本数据类型 ...

  7. Java工程师面试题,整理自网络与博主各种笔试面试,持续更新

    1.面向对象的特征有哪些方面? 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口. 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应.简单的说就是用同 ...

  8. jQuery中易混淆知识点总结(持续更新)

    find()与children() <body> <ul class="level-1"> <li class="item-i"& ...

  9. MySQL数据库知识点整理 (持续更新中)

    一.修改用户密码 格式(在命令行下输入):mysqladmin -u 用户名 -p旧密码 password 新密码 1. 给root添加密码ab12:  mysqladmin -uroot -pass ...

随机推荐

  1. 【系统】查看windows系统是否永久激活

    查看windows系统是否永久激活 查看激活时间 slmgr.vbs -xpr 查看激活详情 slmgr.vbs -dlv

  2. node-sass,sass-loader和node之间的关系

    vue-cli运行在node平台上scss语言是运行在 node-sass平台上node-sass的运行环境是node平台vue-cli工程中不识别scss语法,.scss模块,sass-loader ...

  3. 【Unity Shader】syntax error: unexpected token 'struct' at line x 错误解决办法

    以下代码处出现了syntax error: unexpected token 'struct' at line 33的错误 struct a2v { float4 vertex_position : ...

  4. 开源的.Net 工作流引擎Elsa初试——创建工作流服务器和图形化工作流配置管理应用

    微软的Workflow Foundation基于.Net Framework,并且没有向.Net Core迁移的计划.我们的很多项目使用了工作流引擎,这些项目向.Net Core以及更高版本迁移时遇到 ...

  5. django框架5

    内容概要 模板语法之过滤器(类似于内置函数) 模板语法之标签(类似于流程控制) 自定义过滤器.标签.inclusion_tag 模板的导入 模板的继承 注释语法补充 前期数据准备(测试环境搭建) al ...

  6. 【Java集合】ArrayDeque源码解读

    简介 双端队列是一种特殊的队列,它的两端都可以进出元素,故而得名双端队列. ArrayDeque是一种以循环数组方式实现的双端队列,它是非线程安全的. 它既可以作为队列也可以作为栈. 继承体系 Arr ...

  7. 记一次学习kibaba踩过的坑(Windows环境)

    下载地址 ElasticSearch:https://www.elastic.co/cn/downloads/elasticsearchLogstash:https://www.elastic.co/ ...

  8. robotframework之环境安装

    一.安装python2.7环境,python --version查询python安装的版本 二.setuptools安装

  9. BUUCTF-大白

    大白 使用16进制打开没发现什么异常的,根据提示来看图片可能没有显示完整 将第七位修改为02即可正常查看图片.

  10. 关于Node.js 链接mysql超时处理(默认8小时)

    备注:这是在pm2配置node环境下,超过8小时mysql自动关闭的情况下出现的解决方法:1.封装mysql.js var mysql = require('mysql'); var connecti ...