缓存穿透

一般出现这样的问题,是因为当我们查询一条肯定不存在的数据的时候,缓存中没有,就会透过缓存来查询数据库,数据库也不存在,这样就不会将值保存在缓存中,最后还是缓存和数据库中都没有,如果一直访问这条数据。我们就对数据库进行频繁的查询,给数据库带来压力;

解决方法:当查询的时候,如果缓存和数据库中都没有,我们就将这个数据以空的形式存放在缓存中,(或者是给一个false的标示)这样就不用去数据库就可以知道不存在,减少对数据库查询的次数,当我们这个值发生改变的时候,我们在重新进行赋值;

并发情况

当我们大量访问都是查询一个缓存中没有的数据时,这样就会都去数据库中进行查询,可能会造成数据库的宕机;

解决方法:在查询的时候,我给他添加了一个同步锁,只有第一条数据去数据库中查并且返回到redis中后才能查询,这是数据库中已近存在了值,这样也可以避免;

缓存雪崩 

大量数据的缓存时间失效,这样用户就会访问到数据库,第一台数据库崩溃了,访问就会到第二台数据库进行查询,这样会导致第二台的也崩溃;

解决方法:就是设置失效时间时,不要一起失效,或者是设置在访问量少的时候,或者设置为永远不失效;

缓存击穿

  是指一个key非常热点,在不停的扛着大并发,大并发集中对这一个点进行访问,当这个key在失效的瞬间,持续的大并发就穿破缓存,直接请求数据库,就像在一个屏障上凿开了一个洞。

  解决方法:对热门访问key早早的做好了准备,让缓存永不过期;

Redis可能出现的问题的更多相关文章

  1. 使用redis可能出现的问题

    1)缓存与数据库双写不一致 2)缓存雪崩 3)缓存穿透 由于缓存中不存在某个key,所有的请求都会落到数据库上,会对数据库造成很大压力,甚至崩溃 一个简单的方案是将不存在的数据也缓存起来(value值 ...

  2. Redis安装教程及安装报错解决方案(大佬勿喷)

    安装环境:CentOS7 Redis版本:redis-6.0.9.tar.gz 依次按照以下顺序执行: 1. [root@localhost ~]# wget https://download.red ...

  3. Windows 上安装 Redis 及可能出现的错误和解决方法!

    前言 Redis(REmote Dictionary Server) 是一种以key-value写得存储系统.他是开源的ANSI语言编写的.遵守BSD协议.被称作“数据结构服务器”,因为它的值(val ...

  4. 安装使用Redis过程中可能出现的错误收集

    1.使用make test测试编译状态报错 cd src && make test make[1]: Entering directory `/usr/local/redis-3.2. ...

  5. Redis Cluster

    使用 Redis Cluster Redis 3.0 在2015年出了Stable版本,3.0版本相对于2.8版本带来的主要新特性包括: 实现了Redis Cluster,从而做到了对集群的支持: 引 ...

  6. 分布式缓存Redis使用心得

    一.缓存在系统中用来做什么 1. 少量数据存储,高速读写访问.通过数据全部in-momery 的方式来保证高速访问,同时提供数据落地的功能,实际这正是Redis最主要的适用场景. 2. 海量数据存储, ...

  7. Redis中持久化的两种方法详解

    Redis提供了两种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里;另一种方法教只追加文件(append-only f ...

  8. Redis setNX 实现分布式锁(重复数据插入可用其来实现排他锁)

    使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其实现方法. SETNX命令简介 命令格式 SETNX key value 将 key 的值设为 value,当且仅当 key 不存在. 若 ...

  9. 使用Redis做预定库存缓存功能

    最近在自己的工作中,把其中一个PHP项目的缓存从以前的APC缓存逐渐切换到Redis中,并且根据Redis所支持的数据结构做了库存维护功能.缓存是在业务层做的,准确讲应该是在MVC模型中Model的O ...

随机推荐

  1. 15-cookie技术和session技术的联系和区别

    ​1. 联系: *session实现依赖于Cookie 2. session问题: * 由服务器创建,存储在服务器 * 当浏览器关闭时,服务器不关闭,再次打开浏览器时, 默认获得的不是同一个sessi ...

  2. js + php服务器推送see(自定义推送时间)

    //javascript code var source = new EventSource("./main.php"); source.onmessage=function(ev ...

  3. day14 jQuery

    day13-14 jQueryjQuery是对js和dom的封装,相当于一个类库使用jQuery的目的: 1:获取标签 2:修改jQuery提供的方法:http://www.php100.com/ma ...

  4. [Python]判断变量类型是否为List列表

    用法:isinstance(变量,list) li = [1,2,3] print(type(li)) if isinstance(li,list): print("This is a Li ...

  5. JavaScript 箭头函数(Lambda表达式)

    Lambda表达式(箭头函数)用于表示一个函数,所以它和函数一样,也拥有参数.返回值.函数体,但它没有函数名,所以Lambda表达式相当于一个匿名函数. 使用方法: ()=>{} 小括号里放参数 ...

  6. codewars--js--Roman Numerals Encode

    问题描述:(将阿拉伯数字转换成罗马数字) Create a function taking a positive integer as its parameter and returning a st ...

  7. pikachu-远程代码、命令执行漏洞(RCE)

    一.RCE概述 1.1 什么是RCE? RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. 1.2 远程系统命令执行 一般出现这种漏洞,是因为应用系统从设计上需要 ...

  8. Android中实现一个简单的逐帧动画(附代码下载)

    场景 Android中的逐帧动画,就是由连续的一张张照片组成的动画. 效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 ...

  9. fish 设置环境变量;fish shell 相关使用说明记录;

    最近使用 fish进行工作,发现环境变量忘记如何设置: fish 环境变量保存在两个地方: ~ 目录下,.config/fish 目录下: /etc/fish/ 目录下 如果配置所有用户都能用的环境变 ...

  10. kali帮助

    kali help Attention 这是我N久前学习kali时自己打的东西,不保证没有纰漏啊…… 网址 kali:https://www.herojd.com/forum.php?mod=view ...