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. 万字长文,带你轻松学习 Spark

    大家好,我是大D. 今天给大家分享一篇 Spark 核心知识点的梳理,对知识点的讲解秉承着能用图解的就不照本宣科地陈述,力求精简.通俗易懂.希望能为新手的入门学习扫清障碍,从基础概念入手.再到原理深入 ...

  2. linux篇-Centos7jdk安装

    2.1查看现有JDK #rpm -qa|grep jdk (如果有其他版本的JDK建议卸载) 卸载其他版本的JDK命令 #yum –y remove java-1.6.0 #yum –y remov ...

  3. 好客租房41-react组件基础综合案例-渲染列表数据

    1渲染列表 在state定义数据 进行数据渲染 //导入react import React from 'react' import ReactDOM from 'react-dom' //导入组件 ...

  4. 网络编程之socket套接字

    目录 socket套接字简介 socket模块 通信循环 代码优化 连接循环 半连接池 黏包问题 解决黏包问题 黏包问题特殊情况(文件过大) socket套接字简介 由于操作OSI七层是所有C/S架构 ...

  5. Activate-or-Not:learning-customized-activation

    关于activate-or-Not的PPT paper code step1 step2 step3 step4 step5 step6 step7 step8 step9 step10

  6. 变量作用域——JavaSE基础

    变量作用域 局部变量.成员变量.静态变量的区别 类型 声明位置 从属于 生命周期 局部变量 方法或语句块内部 方法/语句块 从声明位置开始,直到方法或语句块执行完毕,局部变量消失 成员变量 (实例变量 ...

  7. 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon socket"类情况

    Docker安装命令: 解决Docker运行命令时提示"Got permission denied while trying to connect to the Docker daemon ...

  8. markdowm使用学习

    markdowm学习 标题(#/##/###/####) 三级标题 四级标题 字体(*/) hello world! hello world! hello world! hello world! he ...

  9. PowerShell 定时刷新查看文件内容

    get-content .\1.txt -ReadCount 0 -Tail 5 -Wait

  10. 入坑KeePass(四)KeePass通过坚果云WebDav同步方法

    参考博客:什么值得买平台-Keepass+坚果云:多平台密码无缝同步 .1.在坚果云上创建一个同步专用的文件夹(建议勾上"默认不同步到电脑"选项) 创建之后可以把刚才创建的数据库文 ...