Redis学习笔记(五) 总结

  • 为什么使用redis
            改善性能。当大SQL执行耗时久,且结果不频繁变动,就特别适合将运行结果放入缓存,后面的请求从缓存中读取,使得请求能够迅速响应
            缓解并发压力。大并发下,所有请求都是直接访问数据库的,会出现连接异常。redis做一个缓冲,让请求先访问redis,而不是数据库。

  • redis缺点
             1、缓存与数据库双写一致性问题
             2、缓存雪崩问题(缓存同一时间大面积失效,这时又来了一波请求,结果请求都怼到数据库上,从而连接异常)
             3、缓存击穿问题(黑客故意去请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而连接异常)
             4、缓存的并发竞争问题

  • redis的过期策略与内存淘汰机制
        思考:为什么redis只能存5G,而你写了10G,redis怎么删除的。为什么设置过期时间,时间到了,内存占用率还是那么高
             redis采用的是定期删除+惰性删除策略
             定期删除不等于定时删除,定期删除是指redis默认100ms检查是否有过期的key,有则删除。但redis不是每个100ms将所有的key检查一次,而是随机抽取进行检查,因此,只采用定期删除策略,会导致很多key到时间没有删除。惰性删除会在你获取key时,redis检查是否过期,如果过期,此时就会删除。
              但是如果一直没有被删除(定期删除没有删,也没有被访问),则redis内存会越来越高,应该采用内存淘汰机制:

              在redis.conf中有一行配置:# maxmemory-policy volatile-lru

              该配置就是配内存淘汰策略的(什么,你没配过?好好反省一下自己)

              1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。应该没人用吧。

              2)allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key。推荐使用,目前项目在用这种。

              3)allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。应该也没人用吧,你不删最少使用Key,去随机删。

              4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。这种情况一般是把redis既当缓存,又做持久化存储的时候才用。不推荐

              5)volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key。依然不推荐

              6)volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除。不推荐

             
  • 解决缓存击穿问题
           1、利用互斥锁,缓存失效的时候,先获得锁,得到锁了再请求数据库,没得到锁,则休眠一段时间重试
           2、采用异步更新策略,无论key是否取到值,都直接返回。value值中维护一个缓存失效时间,缓存过期,则异步起一个线程去读数据库,更新缓存,需要做缓存预热操作。
           3、提供一个迅速判断请求是否有效的拦截机制

  • 解决雪崩问题
            1、给换成的失效时间加上随机值,避免集体失效
            2、使用互斥锁,但是该方案吞吐量明显下降了
            3、双缓存

  •           

转载于:https://www.cnblogs.com/yaohuiqin/p/9412367.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hbase 导入mysql_HBase导入SQL Server数据库数据

在先前的几篇随笔中已经介绍了Hadoop、Zookeeper、Hbase的分布式框架搭建方案,目前已经搭建完成了一个包含11个节点的分布式集群。而对于HBase数据库的使用仅限于测试性质的增删改查指令,为了进一步熟悉分布式框架的使用,本文介绍将已有的数据…

googlenet网络结构_CNN网络结构的发展

 CNN基本部件介绍,1. 局部感受野在图像中局部像素之间的联系较为紧密,而距离较远的像素联系相对较弱。因此,其实每个神经元没必要对图像全局进行感知,只需要感知局部信息,然后在更高层局部信息综合起来即可得到全局信…

linux数据库mysql的安装

1数据库文件放到opt下面 2赋予权限775 3运行脚本 4运行成功 5数据库操作 密码修改并刷新 权限修改,允许外部设备访问 6工具连接 7附录 1、显示当前数据库服务器中的数据库列表:   mysql> SHOW DATABASES;   2、建立数据库:   …

智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于侏儒猫鼬算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.侏儒猫鼬算法4.实验参数设定5.算法结果6.…

偏函数 匿名函数 高阶函数 map filter reduce

# 偏函数 创建一个新的函数,指定我们要使用的函数的某个参数为固定的值,这个新函数就是偏函数 def test(a, b, c, d1):print(a b c d)from functools import partial # 使用偏函数必须导入此模块newFunc partial(test, c5) # newFunc为偏函数&…

Centos7中Memcached安装使用说明

安装编译libevent tar -zxvf libevent-2.0.21-stable.tar.gz cd libevent-2.0.21-stable ./configure --prefix/usr 配置报错,不着急,安装gcc试试 可以了 make make install 测试libevent是否安装成功 ls -al /usr/lib|grep libevent 安装成功 2.编译…

mysql-plus多数据库_Springboot+mybatisplus+mysql配置多数据源(注解版)

1、添加依赖,最关键的两个依赖是后面两个"druid依赖"和"配置动态数据源"(已标红),其他"非主要"依赖可按自身实际开发环境进行选择。org.springframework.bootspring-boot-starter-jdbcorg.springframework.bootspring-boo…

python用cmd运行失败_解决python在cmd运行时导入包失败,出现错误信息 ModuleNotFoundError: No module named ***...

1.下图为我的自动化测试工程结构图我通过运行run.bat批处理文件,调用cmd控制台运行start_run.py来开始我的自动化测试,但是出现如下错误:大家可能知道我们的工程在IDE(Pycharm)中运行和我们在cmd中运行的路径是不一样的&#xff0…

Centos7jdk安装

2.1查看现有JDK #rpm -qa|grep jdk (如果有其他版本的JDK建议卸载) 卸载其他版本的JDK命令 #yum –y remove java-1.6.0 #yum –y remov java* 重新安装(安装需要的JDK版本) #chmod 755 jdk-6u45-linux-x64-rpm.bin ./jdk-6u45-linux-x64-rpm.bin安装…

java自学 day8

Map Map初始化 Map<String, String> map new HashMap<String, String>(); 添加数据 map.put("key1", "value1"); 删除数据 map.remove("key1"); 获取数据 map.get("key1"); 清空map map.clear(); 使用keySet()遍历 for (…

python怎么读取github_六行代码获取Github排名前10的Python项目

六行代码获取Github排名前10的Python项目Github开放了不少API。下面是对这些API的一个使用。# 获取返回信息import requests as rurl"https://api.github.com/search/repositories?qlanguage:python&sort"import jsonLjson.loads(r.get(url).text)for item in L…

mysql分库一致性_分库分表带来的完整性和一致性问题

如果你对项目管理、系统架构有兴趣&#xff0c;请加微信订阅号“softjg”&#xff0c;加入这个PM、架构师的大家庭在最近做的一个项目中&#xff0c;由于每天核算的数据量过于庞大&#xff0c;需要把数据库进行分库保存。当数据分散到各个库之后&#xff0c;带来的数据更新操作…

BZOJ4293 Siano

题头&#xff1a; 描述 农夫Byteasar买了一片n亩的土地&#xff0c;他要在这上面种草。 他在每一亩土地上都种植了一种独一无二的草&#xff0c;其中&#xff0c;第i亩土地的草每天会长高a[i]厘米。 Byteasar一共会进行m次收割&#xff0c;其中第i次收割在第d[i]天&#xff0c;…

同名字的数值求和插入行_EXCEL条件求和的6种技术,你会的超过3种吗?

今天我们来谈谈EXCEL中的条件求和。我们将利用不同的技术实现&#xff0c;而不是使用函数的6种方法直接开始吧&#xff01;数据源结果1、数据透视表-难度系统★☆☆☆☆插入-透视表&#xff0c;行字段-销售员&#xff0c;值-金额2、 函数公式法-难度系数&#xff1a;★★☆☆☆…

pb mysql 中文乱码_解决springmvc+mybatis+mysql中文乱码问题

近日使用ajax请求springmvc后台查询mysql数据库&#xff0c;页面显示中文出现乱码最初在mybatis配置如下select text from News where id#{o}其中表News的text字段为blob类型如此查出的text值在控制台中一直显示乱码。之后google查找相关resultTypeblob相关内容无果&#xff0c…

Centos7构建NFS服务器和连接

准备两台centos7虚拟机 192.168.30.133 192.168.30.129 2.192.168.30.1&#xff08;服务端&#xff09;&#xff0c; 3查看rpc服务是否启动 4测试安装是否成功 5修改配置文件vi/etc/exports /data 192.168.1.0/24(rw,async) 6启动服务 systemctl start nfs rpcinfo -p查看 …

Font Awesome 中文网

Font Awesome 中文网 转载于:https://www.cnblogs.com/beimingbingpo/p/9430703.html

maven pc配置要求_《使命召唤:黑色行动5》公开测试PC配置要求:推荐GTX970+i7

动视官方公开了《使命召唤&#xff1a;黑色行动5》的公开测试PC系统要求&#xff0c;从官方给出的信息来看&#xff0c;PC平台最低需求为GTX 670显卡i5 2500k处理器。 以下为官方公布的系统要求&#xff1a;PC公开测试最低配置需求操作系统&#xff1a;Windows 7 64-Bit (SP1) …

python wireshark_用python编写脚本从wireshark导出的数据文件中提取数据

上篇文章搭建了一个UDP多播程序的基础&#xff0c;所谓基础&#xff0c;就是看着它&#xff0c;我可以写简单的多播程序了&#xff0c;可以在这个基础上面开始工作了。会多播了&#xff0c;多播的内容从哪里来&#xff0c;播出什么内容呢&#xff1f;呵呵&#xff0c;有个设备&…

linux下源码安装nginx

LNMP模式 后续继续更新&#xff0c;先搭建nginx 安装环境gcc gcc-c 2 下载源码包解压 配置第一个报错 安装openssl openssl-devel yum -y install openssl openssl-devel Make报错 解决 tar -zxvf pcre-8.37.tar.gz cd pcre-8.34 ./configure make make install tar -zxvf …