从入门到精通!java可视化编程软件哪个好

1、我往Redis里写的数据怎么没了?

使用Redis的同学你要明白一点,你为什么用Redis?用redis的作用是什么?用redis的好处是什么?凡事多思考一下为什么,多想想背后的原因。

就在不久前有朋友跟我说过,说他们生产环境的Redis怎么经常会丢掉一些数据?写进去了,过一会儿可能就没了。我的天啊,你问这个问题就说明Redis你就没用对啊。Redis是缓存,你给当存储了用了是吧?

首先要明白一点啥叫缓存?为啥用缓存?

Redis是用内存当缓存的。内存是无限的吗?相反,内存是很宝贵而且是有限的,磁盘是廉价而且是大量的。可能一台机器就几十个G的内存,但是可以有几个T的硬盘空间。Redis主要是基于内存来进行高性能、高并发的读写操作的。

那既然内存是有限的,比如Redis就只能用10个G,你一直往里面写数据,一直写一直写最后10个G都用的差不多了,你还写会,你想想会发生什么?当然会干掉一些的数据了,然后就保留10个G的数据。你说会不会造成数据丢失?

那Redis会干掉哪些数据?保留哪些数据呢?当然是干掉不常用的数据,保留常用的数据了。

所以说,这是缓存的一个最基本的概念:数据是会过期的。要么是你自己设置个过期时间,要么是Redis自己给干掉。

所以你的Redis如果使用不当,把生产数据存到里面,又没有去持久化到mysql,那就会有丢失的可能。

2、我的数据明明都过期了,怎么还占用着内存啊?

还有一种就是如果你给key设置好了一个过期时间,你知道到一定的时间再去查这个key就没有了,但是你知道redis是怎么给你弄成过期的吗?什么时候删除掉?

如果你不知道,在实际的使用过程中你就可能会发现这么一个问题:为啥好多数据明明应该过期了,结果发现redis内存占用还是很高?那是因为你不知道Redis是怎么删除那些过期key的

举例,Redis 内存一共是10个G,你现在往里面写了5个G的数据,然后你对这些数据全都设置了10分钟之后过期,结果10分钟之后,你再来查看看,Redis的内存使用率怎么还是50%呢?5个G的数据都过期了,我从redis里查,是查不到了,结果过期的数据为啥还占用着Redis的内存呢。

如果你连这个问题都不知道,上来就懵了,回答不出来,建议你使用Redis之前多做做功课,不然你写代码的时候,想当然的认为写进Redis的数据就一定会存在,后面导致系统各种漏洞和bug,就不好弄了。

3、问题剖析

(1)设置过期时间

set key value 过期时间(1小时)表示set进去的key,1小时之后就没了,就失效了。

我们set key的时候,都可以给一个expire time,就是过期时间,指定这个key比如说只能存活1个小时?10分钟?这个很有用,我们自己可以指定缓存到期就失效。

如果假设你设置一批key只能存活1个小时,那么接下来1小时后,redis是怎么对这批key进行删除的?

答案是:定期删除+惰性删除

所谓定期删除,指的是Redis默认是每隔100ms就随机抽取一些设置了过期时间的key,检查其是否过期,如果过期就删除。

为什么是随机抽取?
假设Redis里放了10万个key,都设置了过期时间,你每隔几百毫秒,就检查10万个key,那redis基本上就死了,因为这样cpu负载会很高的,全都消耗在你的检查过期key上了。

所以这里可不是每隔100ms就遍历所有的设置过期时间的key,Redis如果设置成检查所有Key那将是一场性能上的灾难。所以实际上redis是每隔100ms随机抽取一些key来检查和删除的。

但是问题是,随机抽取检测key是否过去会导致定期删除策略可能会导致很多过期key到了时间并没有被删除掉,那咋整呢?所以Redis还有另一个策略就是惰性删除

惰性删除 就是说,在你获取某个key的时候,Redis会检查一下 ,这个key如果设置了过期时间那么是否过期了?如果过期了此时就会删除,不会给你返回任何东西。

所以并不是key到时间就被删除掉,而是你查询这个key的时候,Redis再懒惰的检查一下。

通过上述两种手段,保证过期的key一定会被干掉。

那么刚才的问题就不难理解了,就是说,你的过期key,靠定期删除没有被删除掉,还停留在内存里,占用着你的内存呢,除非你的系统去查一下那个key,才会被redis给删除掉。如果都过期了,定期删除才删了一点点,而你又没有去查,没有触发惰性删除,那么短时间内你的redis内存占用率还是会下不来。

但是实际上这还是有问题的,如果定期删除漏掉了很多过期key,然后你也没及时去查,也就没走惰性删除,此时会怎么样?如果大量过期key堆积在内存里,导致redis内存块耗尽了,咋整?

别担心Redis还有方案:内存淘汰机制。

(2)内存淘汰策略

如果Redis的内存占用过多的时候,此时会进行内存淘汰,Redis提供如下丰富的可选策略:

1)noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
(这个一般没人用吧,实在是太恶心了)

2)allkeys-lru:当内存不足以容纳新写入数据时,在所有键空间中,移除最近最少使用的key
(这个是最常用的)

3)allkeys-random:当内存不足以容纳新写入数据时,在所有键空间中,随机移除某个key。
(这个一般没人用吧,为啥要随机,把我重要的key干掉了咋整,肯定是把最近最少使用的干掉)

4)volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key。
(这个一般不太合适)

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

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

例如:Redis 里有10个key,现在内存已经满了,设置的淘汰策略是allkeys-lru,此时Redis需要删除掉一些key来保证你可以继续写入。在这10个key中,其中1个key,最近1分钟被查询了100次,1个key,最近10分钟被查询了50次,1个key,最近1个小时被查询了1次。肯定那些最近最少使用的被干掉了。

为啥存redis的数据有时候会丢失?
很简单,你写的数据太多了,内存占满了,或者触发了什么条件,如redis使用了allkeys-lru内存淘汰策略,自动给你清理掉了一些最近很少使用的数据。

如何获取免费架构学习资料?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

准备两个月,面试五分钟,Java中高级岗面试为何越来越难?

由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以戳这里即可免费获取哦

识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!有需要的程序猿(媛)可以戳这里即可免费获取哦

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

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

相关文章

学生档案c语言编程,学生档案管理问题

/* 一个修改版本 */#include struct student{int num;char name[10];char sex;char address[20];};struct student stu[3] {{000, "li lin", m, "103 beijing road"},{001, "zhang fun", m, "130 shanghai road"},{002, "wang …

从思维图到基础再到深入,java空间查询

蚂蚁金服一面: 先自我介绍,讲讲自己基础掌握情况,以及项目经历平时会用到哪些数据结构?链表和数组的优缺点?解决hash冲突的方法有哪些?讲讲自己对HashMap的理解,以及和Weakhashmap的区别&#…

c语言中如何取消最后一个空格,新人提问:如何将输出时每行最后一个空格删除...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼如何将每行最后一个空格删除&#xff0c;使矩阵只有数字间有空格&#xff0c;没有多余空格&#xff1f;#include#includeint main(){int i,j,k,m,n,x,h,y;int a[15][15]{0};while(scanf("%d",&i)){k1;for(n1;n<i;…

从零开始学Java编程!java集合类详解和使用

目录 一、冒泡排序 二、选择排序 三、插入排序 四、快速排序 五、归并排序 六、希尔排序 七、堆排序 八、基数排序&#xff08;桶排序&#xff09; 九、递归 十、链表 十一、栈 十二、队列 十三、二叉树 最后 由于篇幅有限&#xff0c;这里就不一一罗列了&#xff0c;20道常见…

go语言调用c 的头文件 so,Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a...

Golang类似于C的静态语言&#xff0c;效率也接近于C&#xff0c;如果Golang也可以导出可供C调用的库&#xff0c;那可以和很多高级语言say goodbye了&#xff0c;goodbye似乎又有点武断&#xff0c;但至少说&#xff0c;Golang可以做很多事&#xff0c;而且效率优于很多高级语言…

从青铜到王者的路线,java不同系统间数据同步

深耕技术&#xff0c;啃下22个技术点 互联网行业更新换代非常快&#xff0c;行业常态便是不断学习&#xff0c;因此这些主流技术你一个都不能落下&#xff01; ①并发编程 Java并发编程是整个Java开发体系中最难以理解&#xff0c;但也是最重要的知识点之一&#xff0c;因此学习…

c语言 大雨 班上多个同学准备,2015年计算机二级考试《C语言》提高练习题(7)

1[单选题] 若有C语言表达式23*47/3&#xff0c;以下选项中叙述正确的执行顺序是A.先执行3*4得12&#xff0c;再执行212得14&#xff0c;再执行7/3得2&#xff0c;最后执行142得16B.先执行3*4得12&#xff0c;再执行7/3得2.5&#xff0c;最后执行2122.5得16.5C.先执行7/3得2&…

从青铜到王者的路线,java枚举类使用场景

一、先来解读&#xff1a;23种设计模式要点 1.单例模式&#xff08;Singleton Pattern&#xff09; 2.工厂模式 3.抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 4.模板方法模式&#xff08;Template Method Pattern&#xff09; 5.建造者模式&#xff08;Bu…

android tag的作用,Android中的Context的作用(2)

ContextImpl关键成员和函数/*** Common implementation of Context API, which provides the base* context object for Activity and other application components.*/classContextImplextendsContext {privatefinalstaticString TAG "ContextImpl";privatefinalsta…

企业级项目实战讲解!javamap排序规则

一、服务发布简介 分布式系统架构下&#xff0c;服务发布是一件很麻烦的事情&#xff0c;特别是在构建自动发布流程和灰度测试的策略两个核心方面。通常情况下如果不涉及数据层面的灰度流程&#xff0c;服务可以灰度上线&#xff0c;或者滚动上线&#xff0c;这两种方式很常用…

android页面设置背景图片大小,android页面设置background为图片后,页面滑动掉帧问题...

最近接手的一个android项目里面&#xff0c;有个viewpager3个fragment的页面&#xff0c;就是很常见的可以左右滑动切换页面的那种布局。接手的时候告诉我&#xff0c;这个页面有卡顿现象&#xff0c;性能需要优化。一开始觉得是fragment里面做了太多耗时操作的原因&#xff0c…

企业级项目实战讲解!java的war包能直接改名么

Java核心架构笔记大致如下 0~1年&#xff1a; Java基础&#xff08;基本语法、面向对象、继承、多态、接口和抽象类、异常、内部类、集合、泛型、反射、I/O等&#xff09;Web编程&#xff08;ServletMySQL数据库商品管理系统实战&#xff09;SSM框架入门到精通&#xff08;Sp…

android chrome cast,有了它 任何安卓设备瞬间变身ChromeCast

ChromeCast一经问世就颇受欢迎&#xff0c;虽然35美刀的价格已经很便宜了&#xff0c;但现在你可以不花一分钱就可以拥有ChromeCast类似的功能了。前提是你有一部系统版本在2.2以上的安卓设备&#xff0c;对于很多安卓的玩家这应该不是什么问题。实现与ChromeCast类似的功能只需…

企业级项目实战讲解!java类内部定义枚举

蚂蚁一面 ⼀⾯就做了⼀道算法题&#xff0c;要求两⼩时内完成&#xff0c;给了⻓度为N的有重复元素的数组&#xff0c;要求输出第10⼤的数。典型的TopK问题&#xff0c;快排算法搞定。算法题要注意的是合法性校验、边界条件以及异常的处理。另外&#xff0c;如果要写测试⽤例&…

荣耀鸿蒙价格,荣耀40S秀肌肉,120Hz+双5000万+鸿蒙系统,售价很感人

原标题&#xff1a;荣耀40S秀肌肉&#xff0c;120Hz双5000万鸿蒙系统&#xff0c;售价很感人虽然现在有不少的手机厂商开始发展子品牌&#xff0c;比如vivo发展的iQOO以及OPPO发展的真我&#xff0c;都是在市场上开始冒头。不过知名度最高的还是荣耀这个子品牌&#xff0c;自从…

作为Java开发程序员,中科创达java应届生薪资

01 并发宝典&#xff1a;面试专题 面试专题分为四个部分&#xff0c;分别如下 Synchronized 相关问题 可重入锁 ReentrantLock 及其他显式锁相关问题 Java 线程池相关问题 Java 内存模型相关问题 1.1 Synchronized 相关问题&#xff08;这里整理了八问&#xff09; 问题一…

Java面试必备的集合源码详解,砥砺前行!

一面&#xff08;一个小时左右&#xff09; 算法&#xff1a;写冒泡排序&#xff0c;问如何优化&#xff0c;简单讲了快排和堆排序的原理数据库&#xff1a;解释左连接数据库第一第二第三范式&#xff0c;数据库死锁linux&#xff1a;怎么查看内存&#xff1b;怎么查看进程&am…

android md 控件,Android基本UI控件.md

# Android基本UI控件## *TextView 文本框*### TextView常用用法| 主要方法 | 功能描述 || :----------: | :--------------------: || getText | 获得TextView对象的文本 || setText | 设置TextView对象的文本 || setTextColor | 设置文本显示的颜色 |Javaprivate TextView tex…

java面试核心知识点,详解系列文章

技术能力 通常&#xff0c;「技术能力」这个部分将紧接着你的个人简介之后&#xff0c;放在简历的核心版面。这样设计是有道理的&#xff0c;因为它能够帮助雇主更快的判断你的技能是否与需求相吻合。 因此在制作这一部分内容时&#xff0c;你应该考虑以下两点&#xff1a; …

html5跨平台桌面打包,Html5到跨平台app应用

Html5到跨平台app应用每一项新兴技术的出现和流行&#xff0c;都是为了规模化的去统一解决一系列复杂问题&#xff0c;APICloud选择混合开发方向&#xff0c;目的是希望借助HTML5降低app开发复杂度&#xff0c;提高app开发效率。通过工程化的实践手段&#xff0c;我们首先设计了…